@ojiepermana/angular 22.1.13 → 22.2.0

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.
Files changed (252) hide show
  1. package/README.md +8 -6
  2. package/SUPPORT.md +3 -3
  3. package/chart/README.md +1 -1
  4. package/component/README.md +2 -2
  5. package/component/calendar/README.md +3 -15
  6. package/component/drawer/README.md +1 -2
  7. package/fesm2022/ojiepermana-angular-chart-area.mjs +352 -137
  8. package/fesm2022/ojiepermana-angular-chart-bar.mjs +744 -524
  9. package/fesm2022/ojiepermana-angular-chart-core.mjs +1140 -1344
  10. package/fesm2022/ojiepermana-angular-chart-line.mjs +393 -147
  11. package/fesm2022/ojiepermana-angular-chart-pie.mjs +408 -179
  12. package/fesm2022/ojiepermana-angular-chart-primitives.mjs +1262 -920
  13. package/fesm2022/ojiepermana-angular-chart-radar.mjs +473 -205
  14. package/fesm2022/ojiepermana-angular-chart-radial.mjs +425 -182
  15. package/fesm2022/ojiepermana-angular-chart-scatter.mjs +386 -210
  16. package/fesm2022/ojiepermana-angular-chart.mjs +3 -19
  17. package/fesm2022/ojiepermana-angular-component-accordion.mjs +485 -243
  18. package/fesm2022/ojiepermana-angular-component-alert-dialog.mjs +963 -325
  19. package/fesm2022/ojiepermana-angular-component-alert.mjs +266 -103
  20. package/fesm2022/ojiepermana-angular-component-aspect-ratio.mjs +80 -35
  21. package/fesm2022/ojiepermana-angular-component-avatar.mjs +402 -135
  22. package/fesm2022/ojiepermana-angular-component-badge.mjs +109 -59
  23. package/fesm2022/ojiepermana-angular-component-breadcrumb.mjs +410 -142
  24. package/fesm2022/ojiepermana-angular-component-button-group.mjs +249 -96
  25. package/fesm2022/ojiepermana-angular-component-button.mjs +153 -75
  26. package/fesm2022/ojiepermana-angular-component-calendar.mjs +531 -418
  27. package/fesm2022/ojiepermana-angular-component-card.mjs +457 -171
  28. package/fesm2022/ojiepermana-angular-component-carousel.mjs +642 -272
  29. package/fesm2022/ojiepermana-angular-component-checkbox.mjs +312 -108
  30. package/fesm2022/ojiepermana-angular-component-collapsible.mjs +299 -115
  31. package/fesm2022/ojiepermana-angular-component-combobox.mjs +396 -183
  32. package/fesm2022/ojiepermana-angular-component-command.mjs +807 -347
  33. package/fesm2022/ojiepermana-angular-component-composer.mjs +807 -330
  34. package/fesm2022/ojiepermana-angular-component-context-menu.mjs +196 -161
  35. package/fesm2022/ojiepermana-angular-component-date-picker.mjs +650 -338
  36. package/fesm2022/ojiepermana-angular-component-dialog.mjs +710 -316
  37. package/fesm2022/ojiepermana-angular-component-drawer.mjs +2 -5
  38. package/fesm2022/ojiepermana-angular-component-dropdown-menu.mjs +1212 -646
  39. package/fesm2022/ojiepermana-angular-component-editor.mjs +987 -502
  40. package/fesm2022/ojiepermana-angular-component-empty.mjs +350 -137
  41. package/fesm2022/ojiepermana-angular-component-form.mjs +813 -434
  42. package/fesm2022/ojiepermana-angular-component-hover-card.mjs +486 -277
  43. package/fesm2022/ojiepermana-angular-component-icon.mjs +241 -140
  44. package/fesm2022/ojiepermana-angular-component-input-group.mjs +449 -176
  45. package/fesm2022/ojiepermana-angular-component-input-otp.mjs +891 -488
  46. package/fesm2022/ojiepermana-angular-component-input.mjs +86 -55
  47. package/fesm2022/ojiepermana-angular-component-item.mjs +713 -261
  48. package/fesm2022/ojiepermana-angular-component-kanban.mjs +714 -216
  49. package/fesm2022/ojiepermana-angular-component-kbd.mjs +124 -52
  50. package/fesm2022/ojiepermana-angular-component-label.mjs +82 -31
  51. package/fesm2022/ojiepermana-angular-component-menubar.mjs +479 -329
  52. package/fesm2022/ojiepermana-angular-component-native-select.mjs +167 -65
  53. package/fesm2022/ojiepermana-angular-component-navigation-menu.mjs +683 -380
  54. package/fesm2022/ojiepermana-angular-component-pagination.mjs +277 -94
  55. package/fesm2022/ojiepermana-angular-component-pillbox.mjs +1283 -607
  56. package/fesm2022/ojiepermana-angular-component-popover.mjs +291 -204
  57. package/fesm2022/ojiepermana-angular-component-progress.mjs +176 -53
  58. package/fesm2022/ojiepermana-angular-component-radio.mjs +449 -142
  59. package/fesm2022/ojiepermana-angular-component-resizable.mjs +659 -453
  60. package/fesm2022/ojiepermana-angular-component-scroll-area.mjs +117 -39
  61. package/fesm2022/ojiepermana-angular-component-segmented-control.mjs +351 -172
  62. package/fesm2022/ojiepermana-angular-component-select.mjs +475 -345
  63. package/fesm2022/ojiepermana-angular-component-separator.mjs +102 -35
  64. package/fesm2022/ojiepermana-angular-component-sheet.mjs +797 -347
  65. package/fesm2022/ojiepermana-angular-component-skeleton.mjs +62 -29
  66. package/fesm2022/ojiepermana-angular-component-slider.mjs +592 -376
  67. package/fesm2022/ojiepermana-angular-component-spinner.mjs +135 -38
  68. package/fesm2022/ojiepermana-angular-component-switch.mjs +315 -103
  69. package/fesm2022/ojiepermana-angular-component-table.mjs +440 -153
  70. package/fesm2022/ojiepermana-angular-component-tabs.mjs +590 -317
  71. package/fesm2022/ojiepermana-angular-component-textarea.mjs +85 -50
  72. package/fesm2022/ojiepermana-angular-component-timeline.mjs +609 -231
  73. package/fesm2022/ojiepermana-angular-component-toast.mjs +229 -243
  74. package/fesm2022/ojiepermana-angular-component-toggle-group.mjs +573 -288
  75. package/fesm2022/ojiepermana-angular-component-toggle.mjs +187 -78
  76. package/fesm2022/ojiepermana-angular-component-tooltip.mjs +798 -517
  77. package/fesm2022/ojiepermana-angular-component-utils-core.mjs +159 -292
  78. package/fesm2022/ojiepermana-angular-component-utils-overlay.mjs +46 -58
  79. package/fesm2022/ojiepermana-angular-component-utils-scale.mjs +76 -38
  80. package/fesm2022/ojiepermana-angular-component-utils.mjs +2 -8
  81. package/fesm2022/ojiepermana-angular-component.mjs +0 -10
  82. package/fesm2022/ojiepermana-angular-navigation-core.mjs +13 -23
  83. package/fesm2022/ojiepermana-angular-navigation-icon.mjs +35 -24
  84. package/fesm2022/ojiepermana-angular-navigation-navigation-badge-count.component-BKCeWzml.mjs +129 -0
  85. package/fesm2022/ojiepermana-angular-navigation-navigation-dockbar-menu.component-DFEJK2jD.mjs +811 -0
  86. package/fesm2022/{ojiepermana-angular-navigation-navigation-entry-grid.component-Cd-jh6tg.mjs → ojiepermana-angular-navigation-navigation-entry-grid.component-mpK9Ar08.mjs} +387 -183
  87. package/fesm2022/ojiepermana-angular-navigation-navigation-flyout-menu.component-BPgH7FJk.mjs +650 -0
  88. package/fesm2022/ojiepermana-angular-navigation-navigation-horizontal.component-DMpYcD9t.mjs +662 -0
  89. package/fesm2022/ojiepermana-angular-navigation-navigation-item.component-Basp5SIk.mjs +1228 -0
  90. package/fesm2022/ojiepermana-angular-navigation-navigation-list.component-YUzHI9Pj.mjs +311 -0
  91. package/fesm2022/ojiepermana-angular-navigation-service.mjs +542 -724
  92. package/fesm2022/ojiepermana-angular-navigation-types.mjs +27 -56
  93. package/fesm2022/ojiepermana-angular-navigation.mjs +3052 -4
  94. package/fesm2022/ojiepermana-angular-sdk.mjs +91 -201
  95. package/fesm2022/ojiepermana-angular-theme-component-settings.mjs +1115 -737
  96. package/fesm2022/ojiepermana-angular-theme-layout-services.mjs +245 -328
  97. package/fesm2022/ojiepermana-angular-theme-layout-types.mjs +35 -38
  98. package/fesm2022/ojiepermana-angular-theme-layout-wrapper.mjs +1719 -552
  99. package/fesm2022/ojiepermana-angular-theme-layout.mjs +847 -491
  100. package/fesm2022/ojiepermana-angular-theme-page-core.mjs +288 -358
  101. package/fesm2022/ojiepermana-angular-theme-page-filter.mjs +362 -224
  102. package/fesm2022/ojiepermana-angular-theme-page-overview.mjs +88 -0
  103. package/fesm2022/ojiepermana-angular-theme-page-root.mjs +576 -254
  104. package/fesm2022/ojiepermana-angular-theme-page-side.mjs +317 -177
  105. package/fesm2022/ojiepermana-angular-theme-page-slots.mjs +256 -112
  106. package/fesm2022/ojiepermana-angular-theme-page.mjs +7 -12
  107. package/fesm2022/ojiepermana-angular-theme-shell-services.mjs +215 -326
  108. package/fesm2022/ojiepermana-angular-theme-shell-types.mjs +68 -129
  109. package/fesm2022/ojiepermana-angular-theme-shell.mjs +907 -378
  110. package/fesm2022/ojiepermana-angular-theme-styles.mjs +521 -720
  111. package/fesm2022/ojiepermana-angular-theme.mjs +0 -10
  112. package/fesm2022/ojiepermana-angular.mjs +5 -24
  113. package/navigation/README.md +1 -1
  114. package/package.json +16 -12
  115. package/sdk/README.md +1 -1
  116. package/sdk/src/writer/index.js +2 -2
  117. package/theme/README.md +1 -1
  118. package/theme/layout/README.md +2 -4
  119. package/theme/page/README.md +50 -0
  120. package/theme/styles/README.md +10 -10
  121. package/theme/styles/css/base/prefers-dark.css +1 -1
  122. package/theme/styles/css/base/status.css +1 -1
  123. package/theme/styles/css/color/amber.css +1 -1
  124. package/theme/styles/css/color/blue.css +1 -1
  125. package/theme/styles/css/color/cyan.css +1 -1
  126. package/theme/styles/css/color/emerald.css +1 -1
  127. package/theme/styles/css/color/fuchsia.css +1 -1
  128. package/theme/styles/css/color/green.css +1 -1
  129. package/theme/styles/css/color/indigo.css +1 -1
  130. package/theme/styles/css/color/lime.css +1 -1
  131. package/theme/styles/css/color/orange.css +1 -1
  132. package/theme/styles/css/color/pink.css +1 -1
  133. package/theme/styles/css/color/purple.css +1 -1
  134. package/theme/styles/css/color/red.css +1 -1
  135. package/theme/styles/css/color/rose.css +1 -1
  136. package/theme/styles/css/color/sky.css +1 -1
  137. package/theme/styles/css/color/teal.css +1 -1
  138. package/theme/styles/css/color/violet.css +1 -1
  139. package/theme/styles/css/color/yellow.css +1 -1
  140. package/theme/styles/css/neutral/gray.css +1 -1
  141. package/theme/styles/css/neutral/mauve.css +1 -1
  142. package/theme/styles/css/neutral/mist.css +1 -1
  143. package/theme/styles/css/neutral/neutral.css +1 -1
  144. package/theme/styles/css/neutral/olive.css +1 -1
  145. package/theme/styles/css/neutral/slate.css +1 -1
  146. package/theme/styles/css/neutral/stone.css +1 -1
  147. package/theme/styles/css/neutral/taupe.css +1 -1
  148. package/theme/styles/css/neutral/zinc.css +1 -1
  149. package/types/ojiepermana-angular-chart-area.d.ts +126 -63
  150. package/types/ojiepermana-angular-chart-bar.d.ts +244 -154
  151. package/types/ojiepermana-angular-chart-core.d.ts +409 -398
  152. package/types/ojiepermana-angular-chart-line.d.ts +141 -68
  153. package/types/ojiepermana-angular-chart-pie.d.ts +192 -121
  154. package/types/ojiepermana-angular-chart-primitives.d.ts +283 -214
  155. package/types/ojiepermana-angular-chart-radar.d.ts +189 -108
  156. package/types/ojiepermana-angular-chart-radial.d.ts +177 -106
  157. package/types/ojiepermana-angular-chart-scatter.d.ts +166 -110
  158. package/types/ojiepermana-angular-chart.d.ts +3 -2
  159. package/types/ojiepermana-angular-component-accordion.d.ts +135 -81
  160. package/types/ojiepermana-angular-component-alert-dialog.d.ts +271 -123
  161. package/types/ojiepermana-angular-component-alert.d.ts +69 -39
  162. package/types/ojiepermana-angular-component-aspect-ratio.d.ts +20 -12
  163. package/types/ojiepermana-angular-component-avatar.d.ts +103 -49
  164. package/types/ojiepermana-angular-component-badge.d.ts +36 -24
  165. package/types/ojiepermana-angular-component-breadcrumb.d.ts +79 -40
  166. package/types/ojiepermana-angular-component-button-group.d.ts +48 -24
  167. package/types/ojiepermana-angular-component-button.d.ts +44 -27
  168. package/types/ojiepermana-angular-component-calendar.d.ts +145 -107
  169. package/types/ojiepermana-angular-component-card.d.ts +112 -63
  170. package/types/ojiepermana-angular-component-carousel.d.ts +150 -81
  171. package/types/ojiepermana-angular-component-checkbox.d.ts +96 -38
  172. package/types/ojiepermana-angular-component-collapsible.d.ts +65 -39
  173. package/types/ojiepermana-angular-component-combobox.d.ts +100 -55
  174. package/types/ojiepermana-angular-component-command.d.ts +206 -121
  175. package/types/ojiepermana-angular-component-composer.d.ts +184 -84
  176. package/types/ojiepermana-angular-component-context-menu.d.ts +51 -41
  177. package/types/ojiepermana-angular-component-date-picker.d.ts +199 -109
  178. package/types/ojiepermana-angular-component-dialog.d.ts +200 -105
  179. package/types/ojiepermana-angular-component-drawer.d.ts +2 -1
  180. package/types/ojiepermana-angular-component-dropdown-menu.d.ts +324 -202
  181. package/types/ojiepermana-angular-component-editor.d.ts +215 -117
  182. package/types/ojiepermana-angular-component-empty.d.ts +80 -45
  183. package/types/ojiepermana-angular-component-form.d.ts +185 -121
  184. package/types/ojiepermana-angular-component-hover-card.d.ts +130 -72
  185. package/types/ojiepermana-angular-component-icon.d.ts +87 -57
  186. package/types/ojiepermana-angular-component-input-group.d.ts +93 -46
  187. package/types/ojiepermana-angular-component-input-otp.d.ts +243 -150
  188. package/types/ojiepermana-angular-component-input.d.ts +27 -17
  189. package/types/ojiepermana-angular-component-item.d.ts +160 -84
  190. package/types/ojiepermana-angular-component-kanban.d.ts +157 -62
  191. package/types/ojiepermana-angular-component-kbd.d.ts +24 -15
  192. package/types/ojiepermana-angular-component-label.d.ts +19 -11
  193. package/types/ojiepermana-angular-component-menubar.d.ts +120 -90
  194. package/types/ojiepermana-angular-component-native-select.d.ts +37 -24
  195. package/types/ojiepermana-angular-component-navigation-menu.d.ts +157 -98
  196. package/types/ojiepermana-angular-component-pagination.d.ts +78 -28
  197. package/types/ojiepermana-angular-component-pillbox.d.ts +361 -204
  198. package/types/ojiepermana-angular-component-popover.d.ts +94 -64
  199. package/types/ojiepermana-angular-component-progress.d.ts +45 -17
  200. package/types/ojiepermana-angular-component-radio.d.ts +129 -53
  201. package/types/ojiepermana-angular-component-resizable.d.ts +160 -112
  202. package/types/ojiepermana-angular-component-scroll-area.d.ts +33 -15
  203. package/types/ojiepermana-angular-component-segmented-control.d.ts +94 -50
  204. package/types/ojiepermana-angular-component-select.d.ts +94 -77
  205. package/types/ojiepermana-angular-component-separator.d.ts +26 -14
  206. package/types/ojiepermana-angular-component-sheet.d.ts +226 -116
  207. package/types/ojiepermana-angular-component-skeleton.d.ts +13 -10
  208. package/types/ojiepermana-angular-component-slider.d.ts +140 -75
  209. package/types/ojiepermana-angular-component-spinner.d.ts +31 -13
  210. package/types/ojiepermana-angular-component-switch.d.ts +97 -40
  211. package/types/ojiepermana-angular-component-table.d.ts +102 -50
  212. package/types/ojiepermana-angular-component-tabs.d.ts +174 -115
  213. package/types/ojiepermana-angular-component-textarea.d.ts +27 -17
  214. package/types/ojiepermana-angular-component-timeline.d.ts +141 -59
  215. package/types/ojiepermana-angular-component-toast.d.ts +51 -55
  216. package/types/ojiepermana-angular-component-toggle-group.d.ts +159 -88
  217. package/types/ojiepermana-angular-component-toggle.d.ts +47 -25
  218. package/types/ojiepermana-angular-component-tooltip.d.ts +222 -132
  219. package/types/ojiepermana-angular-component-utils-core.d.ts +81 -90
  220. package/types/ojiepermana-angular-component-utils-overlay.d.ts +7 -11
  221. package/types/ojiepermana-angular-component-utils-scale.d.ts +20 -12
  222. package/types/ojiepermana-angular-component-utils.d.ts +2 -2
  223. package/types/ojiepermana-angular-component.d.ts +1 -2
  224. package/types/ojiepermana-angular-navigation-core.d.ts +46 -50
  225. package/types/ojiepermana-angular-navigation-icon.d.ts +9 -12
  226. package/types/ojiepermana-angular-navigation-service.d.ts +112 -115
  227. package/types/ojiepermana-angular-navigation-types.d.ts +121 -125
  228. package/types/ojiepermana-angular-navigation.d.ts +663 -374
  229. package/types/ojiepermana-angular-sdk.d.ts +69 -71
  230. package/types/ojiepermana-angular-theme-component-settings.d.ts +115 -83
  231. package/types/ojiepermana-angular-theme-layout-services.d.ts +119 -124
  232. package/types/ojiepermana-angular-theme-layout-types.d.ts +27 -31
  233. package/types/ojiepermana-angular-theme-layout-wrapper.d.ts +399 -187
  234. package/types/ojiepermana-angular-theme-layout.d.ts +201 -112
  235. package/types/ojiepermana-angular-theme-page-core.d.ts +136 -142
  236. package/types/ojiepermana-angular-theme-page-filter.d.ts +112 -62
  237. package/types/ojiepermana-angular-theme-page-overview.d.ts +28 -0
  238. package/types/ojiepermana-angular-theme-page-root.d.ts +172 -88
  239. package/types/ojiepermana-angular-theme-page-side.d.ts +89 -49
  240. package/types/ojiepermana-angular-theme-page-slots.d.ts +58 -37
  241. package/types/ojiepermana-angular-theme-page.d.ts +7 -5
  242. package/types/ojiepermana-angular-theme-shell-services.d.ts +119 -125
  243. package/types/ojiepermana-angular-theme-shell-types.d.ts +38 -41
  244. package/types/ojiepermana-angular-theme-shell.d.ts +139 -61
  245. package/types/ojiepermana-angular-theme-styles.d.ts +184 -196
  246. package/types/ojiepermana-angular-theme.d.ts +1 -2
  247. package/types/ojiepermana-angular.d.ts +5 -5
  248. package/fesm2022/ojiepermana-angular-navigation-navigation-badge-count.component-CDBxQ8rk.mjs +0 -91
  249. package/fesm2022/ojiepermana-angular-navigation-navigation-dockbar-menu.component-DBQHdvGa.mjs +0 -512
  250. package/fesm2022/ojiepermana-angular-navigation-navigation-flyout-menu.component-BCGvhoYj.mjs +0 -404
  251. package/fesm2022/ojiepermana-angular-navigation-navigation-horizontal.component-Dk_03e-6.mjs +0 -466
  252. package/fesm2022/ojiepermana-angular-navigation-ojiepermana-angular-navigation-DNKU6viC.mjs +0 -2642
@@ -1,4 +1,3052 @@
1
- export { c as NavigationAsideFooterDirective, d as NavigationCollapseExpandedDirective, e as NavigationCollapseRootDirective, f as NavigationContainerComponent, g as NavigationContentComponent, h as NavigationDockbarComponent, i as NavigationFlyoutComponent, j as NavigationFooterActionComponent, k as NavigationFooterComponent, l as NavigationFooterInitialComponent, m as NavigationFooterTitleComponent, o as NavigationHeaderComponent, p as NavigationHeaderInitialComponent, q as NavigationHeaderTitleComponent, r as NavigationNavbarComponent, s as NavigationSidebarComponent, t as deriveNavigationInitials } from './ojiepermana-angular-navigation-ojiepermana-angular-navigation-DNKU6viC.mjs';
2
- export * from '@ojiepermana/angular/navigation/core';
3
- export { NAVIGATION_DOCKBAR_FALLBACK_ICON, formatNavigationBadgeCount, normalizeUiNavItems } from '@ojiepermana/angular/navigation/types';
4
- export { NavigationIconDirective } from '@ojiepermana/angular/navigation/icon';
1
+ import { t as NavigationListComponent } from "./ojiepermana-angular-navigation-navigation-list.component-YUzHI9Pj.mjs";
2
+ import * as i0 from "@angular/core";
3
+ import { Component, DestroyRef, Directive, ElementRef, InjectionToken, Injector, TemplateRef, ViewContainerRef, afterNextRender, booleanAttribute, computed, contentChild, effect, forwardRef, inject, input, isDevMode, model, output, signal } from "@angular/core";
4
+ import { ActivatedRoute } from "@angular/router";
5
+ import { cn } from "@ojiepermana/angular/component/utils/core";
6
+ import { NavigationIconDirective, NavigationIconDirective as NavigationIconDirective$1 } from "@ojiepermana/angular/navigation/icon";
7
+ import { NAVIGATION_ADAPTER, NAVIGATION_ROUTE_CONTEXT_ADAPTER } from "@ojiepermana/angular/navigation/core";
8
+ import { NAVIGATION_DOCKBAR_FALLBACK_ICON, NAVIGATION_DOCKBAR_FALLBACK_ICON as NAVIGATION_DOCKBAR_FALLBACK_ICON$1, formatNavigationBadgeCount, normalizeUiNavItems, normalizeUiNavItems as normalizeUiNavItems$1 } from "@ojiepermana/angular/navigation/types";
9
+ import { NgTemplateOutlet } from "@angular/common";
10
+ import { IconComponent } from "@ojiepermana/angular/component/icon";
11
+ import { TooltipDirective } from "@ojiepermana/angular/component/tooltip";
12
+ export * from "@ojiepermana/angular/navigation/core";
13
+ function injectNavigationController(inputs) {
14
+ const nav = inject(NAVIGATION_ADAPTER);
15
+ const owner = {};
16
+ const registeredState = signal(null, ...ngDevMode ? [{ debugName: "registeredState" }] : /* istanbul ignore next */ []);
17
+ const normalizedNavId = computed(() => normalizeId(inputs.navId()), ...ngDevMode ? [{ debugName: "normalizedNavId" }] : /* istanbul ignore next */ []);
18
+ const collapsedPreference = computed(() => inputs.collapsed() ?? (inputs.compact() ? true : null), ...ngDevMode ? [{ debugName: "collapsedPreference" }] : /* istanbul ignore next */ []);
19
+ const normalizedItems = computed(() => normalizeUiNavItems$1(inputs.data()), ...ngDevMode ? [{ debugName: "normalizedItems" }] : /* istanbul ignore next */ []);
20
+ const fallbackState = computed(() => ({
21
+ id: normalizedNavId(),
22
+ orientation: inputs.orientation(),
23
+ type: fallbackType(inputs.orientation(), inputs.type()),
24
+ position: inputs.position() ?? (inputs.orientation() === "horizontal" ? "top" : "left"),
25
+ collapsed: collapsedPreference() ?? false,
26
+ dockbarMode: inputs.dockbarMode() ?? "sticky"
27
+ }), ...ngDevMode ? [{ debugName: "fallbackState" }] : /* istanbul ignore next */ []);
28
+ const resolvedState = computed(() => nav.currentState(normalizedNavId()) ?? registeredState() ?? fallbackState(), ...ngDevMode ? [{ debugName: "resolvedState" }] : /* istanbul ignore next */ []);
29
+ const activeIdSet = computed(() => {
30
+ const ids = inputs.activeIds();
31
+ if (!ids) return /* @__PURE__ */ new Set();
32
+ return ids instanceof Set ? new Set(ids) : new Set(ids);
33
+ }, ...ngDevMode ? [{ debugName: "activeIdSet" }] : /* istanbul ignore next */ []);
34
+ effect((onCleanup) => {
35
+ if (!inputs.enabled()) return;
36
+ const nextState = nav.register({
37
+ id: normalizedNavId(),
38
+ orientation: inputs.orientation(),
39
+ type: inputs.type(),
40
+ position: inputs.position(),
41
+ collapsed: collapsedPreference(),
42
+ dockbarMode: inputs.dockbarMode()
43
+ }, owner);
44
+ registeredState.set(nextState);
45
+ onCleanup(() => nav.unregister(nextState.id, owner));
46
+ });
47
+ return {
48
+ normalizedNavId,
49
+ normalizedItems,
50
+ resolvedState,
51
+ activeIdSet,
52
+ toggleCollapsed: () => nav.toggleCollapsed(normalizedNavId())
53
+ };
54
+ }
55
+ function normalizeId(value) {
56
+ return value.trim() || "default";
57
+ }
58
+ function fallbackType(orientation, type) {
59
+ if (orientation === "vertical" && (type === "sidebar" || type === "dockbar")) return type;
60
+ if (orientation === "horizontal" && (type === "navbar" || type === "flyout")) return type;
61
+ return orientation === "horizontal" ? "navbar" : "sidebar";
62
+ }
63
+ const NAVIGATION_SHELL = new InjectionToken("NAVIGATION_SHELL");
64
+ const EMPTY_NAVIGATION_BADGE_CONTEXT$1 = Object.freeze({});
65
+ const EMPTY_NAVIGATION_ACTIVE_IDS = /* @__PURE__ */ new Set();
66
+ var NavigationContainerComponent = class NavigationContainerComponent {
67
+ navId = input("default", {
68
+ ...ngDevMode ? { debugName: "navId" } : /* istanbul ignore next */ {},
69
+ alias: "id"
70
+ });
71
+ dataId = input(null, {
72
+ ...ngDevMode ? { debugName: "dataId" } : /* istanbul ignore next */ {},
73
+ alias: "data-id"
74
+ });
75
+ data = input([], ...ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []);
76
+ ariaLabel = input("Primary navigation", ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
77
+ compact = input(false, ...ngDevMode ? [{ debugName: "compact" }] : /* istanbul ignore next */ []);
78
+ collapseTree = input("stairs", {
79
+ ...ngDevMode ? { debugName: "collapseTree" } : /* istanbul ignore next */ {},
80
+ alias: "collapse-tree"
81
+ });
82
+ class = input("", ...ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []);
83
+ itemClass = input("", ...ngDevMode ? [{ debugName: "itemClass" }] : /* istanbul ignore next */ []);
84
+ groupClass = input("", {
85
+ ...ngDevMode ? { debugName: "groupClass" } : /* istanbul ignore next */ {},
86
+ alias: "nav-group-class"
87
+ });
88
+ activeIds = input(null, ...ngDevMode ? [{ debugName: "activeIds" }] : /* istanbul ignore next */ []);
89
+ activeUrl = input(null, ...ngDevMode ? [{ debugName: "activeUrl" }] : /* istanbul ignore next */ []);
90
+ openedIds = model([], ...ngDevMode ? [{ debugName: "openedIds" }] : /* istanbul ignore next */ []);
91
+ itemSelected = output();
92
+ nav = inject(NAVIGATION_ADAPTER);
93
+ routeContextAdapter = inject(NAVIGATION_ROUTE_CONTEXT_ADAPTER);
94
+ activatedRoute = inject(ActivatedRoute, { optional: true });
95
+ dataOwner = {};
96
+ hoverPreviewExpanded = signal(false, ...ngDevMode ? [{ debugName: "hoverPreviewExpanded" }] : /* istanbul ignore next */ []);
97
+ focusPreviewExpanded = signal(false, ...ngDevMode ? [{ debugName: "focusPreviewExpanded" }] : /* istanbul ignore next */ []);
98
+ typeConfig = signal(null, ...ngDevMode ? [{ debugName: "typeConfig" }] : /* istanbul ignore next */ []);
99
+ orientationPreference = computed(() => this.typeConfig()?.orientation ?? "vertical", ...ngDevMode ? [{ debugName: "orientationPreference" }] : /* istanbul ignore next */ []);
100
+ typePreference = computed(() => this.typeConfig()?.type ?? null, ...ngDevMode ? [{ debugName: "typePreference" }] : /* istanbul ignore next */ []);
101
+ positionPreference = computed(() => this.typeConfig()?.position?.() ?? null, ...ngDevMode ? [{ debugName: "positionPreference" }] : /* istanbul ignore next */ []);
102
+ collapsedPreference = computed(() => this.typeConfig()?.collapsed?.() ?? null, ...ngDevMode ? [{ debugName: "collapsedPreference" }] : /* istanbul ignore next */ []);
103
+ dockbarModePreference = computed(() => this.typeConfig()?.dockbarMode?.() ?? null, ...ngDevMode ? [{ debugName: "dockbarModePreference" }] : /* istanbul ignore next */ []);
104
+ dockbarRouteContextPreference = computed(() => this.typeConfig()?.dockbarRouteContext?.() ?? null, ...ngDevMode ? [{ debugName: "dockbarRouteContextPreference" }] : /* istanbul ignore next */ []);
105
+ dockbarBadgeContext = computed(() => this.typeConfig()?.dockbarBadgeContext?.() ?? EMPTY_NAVIGATION_BADGE_CONTEXT$1, ...ngDevMode ? [{ debugName: "dockbarBadgeContext" }] : /* istanbul ignore next */ []);
106
+ dockbarRouteHeaderVisible = computed(() => this.typeConfig()?.dockbarRouteHeaderVisible?.() ?? false, ...ngDevMode ? [{ debugName: "dockbarRouteHeaderVisible" }] : /* istanbul ignore next */ []);
107
+ dockbarAsideFooter = computed(() => this.typeConfig()?.dockbarAsideFooter?.() ?? null, ...ngDevMode ? [{ debugName: "dockbarAsideFooter" }] : /* istanbul ignore next */ []);
108
+ sidebarCollapse = computed(() => this.typeConfig()?.sidebarCollapse?.() ?? false, ...ngDevMode ? [{ debugName: "sidebarCollapse" }] : /* istanbul ignore next */ []);
109
+ previewExpanded = computed(() => this.typeConfig()?.previewExpanded?.() ?? false, ...ngDevMode ? [{ debugName: "previewExpanded" }] : /* istanbul ignore next */ []);
110
+ typeStyle = computed(() => this.typeConfig()?.typeStyle?.() ?? "flat", ...ngDevMode ? [{ debugName: "typeStyle" }] : /* istanbul ignore next */ []);
111
+ flyoutLabel = computed(() => this.typeConfig()?.flyoutLabel?.() ?? "Menu", ...ngDevMode ? [{ debugName: "flyoutLabel" }] : /* istanbul ignore next */ []);
112
+ flyoutIcon = computed(() => this.typeConfig()?.flyoutIcon?.() ?? null, ...ngDevMode ? [{ debugName: "flyoutIcon" }] : /* istanbul ignore next */ []);
113
+ flyoutIconOnly = computed(() => this.typeConfig()?.flyoutIconOnly?.() ?? false, ...ngDevMode ? [{ debugName: "flyoutIconOnly" }] : /* istanbul ignore next */ []);
114
+ flyoutIconPosition = computed(() => this.typeConfig()?.flyoutIconPosition?.() ?? "start", ...ngDevMode ? [{ debugName: "flyoutIconPosition" }] : /* istanbul ignore next */ []);
115
+ flyoutTriggerVariant = computed(() => this.typeConfig()?.flyoutTriggerVariant?.() ?? "button", ...ngDevMode ? [{ debugName: "flyoutTriggerVariant" }] : /* istanbul ignore next */ []);
116
+ flyoutTriggerFloating = computed(() => this.typeConfig()?.flyoutTriggerFloating?.() ?? false, ...ngDevMode ? [{ debugName: "flyoutTriggerFloating" }] : /* istanbul ignore next */ []);
117
+ flyoutPanelViewport = computed(() => this.typeConfig()?.flyoutPanelViewport?.() ?? false, ...ngDevMode ? [{ debugName: "flyoutPanelViewport" }] : /* istanbul ignore next */ []);
118
+ flyoutTriggerClass = computed(() => this.typeConfig()?.flyoutTriggerClass?.() ?? "", ...ngDevMode ? [{ debugName: "flyoutTriggerClass" }] : /* istanbul ignore next */ []);
119
+ flyoutTriggerButtonClass = computed(() => this.typeConfig()?.flyoutTriggerButtonClass?.() ?? "", ...ngDevMode ? [{ debugName: "flyoutTriggerButtonClass" }] : /* istanbul ignore next */ []);
120
+ controller = injectNavigationController({
121
+ navId: this.navId,
122
+ data: this.data,
123
+ orientation: this.orientationPreference,
124
+ type: this.typePreference,
125
+ position: this.positionPreference,
126
+ collapsed: this.collapsedPreference,
127
+ dockbarMode: this.dockbarModePreference,
128
+ compact: this.compact,
129
+ activeIds: this.activeIds,
130
+ enabled: computed(() => this.typeConfig() !== null)
131
+ });
132
+ iconTemplate = contentChild(NavigationIconDirective$1, ...ngDevMode ? [{ debugName: "iconTemplate" }] : /* istanbul ignore next */ []);
133
+ normalizedItems = this.controller.normalizedItems;
134
+ resolvedState = this.controller.resolvedState;
135
+ activeIdSet = this.controller.activeIdSet;
136
+ dockbarRouteEnabled = computed(() => {
137
+ const context = this.dockbarRouteContextPreference();
138
+ return context !== null && context !== false;
139
+ }, ...ngDevMode ? [{ debugName: "dockbarRouteEnabled" }] : /* istanbul ignore next */ []);
140
+ dockbarResolvedRouteContext = computed(() => {
141
+ const automatic = this.routeContextAdapter.routeContext();
142
+ const config = this.dockbarRouteConfig();
143
+ return {
144
+ url: this.cleanString(config.url) ?? this.activeUrl() ?? automatic.url,
145
+ icon: config.icon === void 0 ? automatic.icon : this.cleanString(config.icon),
146
+ badge: config.badge === void 0 ? automatic.badge : this.cleanString(config.badge),
147
+ label: config.label === void 0 ? automatic.label : this.cleanString(config.label)
148
+ };
149
+ }, ...ngDevMode ? [{ debugName: "dockbarResolvedRouteContext" }] : /* istanbul ignore next */ []);
150
+ dockbarActiveRouteEntry = computed(() => {
151
+ if (!this.dockbarRouteEnabled()) return null;
152
+ const activeUrl = this.dockbarResolvedRouteContext().url;
153
+ return this.normalizedItems().find((entry) => this.routeContextAdapter.isItemRouteActive(entry, activeUrl, this.activatedRoute)) ?? null;
154
+ }, ...ngDevMode ? [{ debugName: "dockbarActiveRouteEntry" }] : /* istanbul ignore next */ []);
155
+ dockbarResolvedActiveIds = computed(() => this.dockbarRouteEnabled() ? EMPTY_NAVIGATION_ACTIVE_IDS : this.activeIdSet(), ...ngDevMode ? [{ debugName: "dockbarResolvedActiveIds" }] : /* istanbul ignore next */ []);
156
+ dockbarActiveRoutePanelGroup = computed(() => {
157
+ const entry = this.dockbarActiveRouteEntry();
158
+ return entry && entry.children.length > 0 ? entry : null;
159
+ }, ...ngDevMode ? [{ debugName: "dockbarActiveRoutePanelGroup" }] : /* istanbul ignore next */ []);
160
+ dockbarRouteHeader = computed(() => {
161
+ if (!this.dockbarRouteEnabled()) return null;
162
+ const activeEntry = this.dockbarActiveRouteEntry();
163
+ const route = this.dockbarResolvedRouteContext();
164
+ const fallbackIcon = this.cleanString(this.dockbarRouteConfig().fallbackIcon) ?? NAVIGATION_DOCKBAR_FALLBACK_ICON$1;
165
+ const icon = activeEntry ? this.cleanString(activeEntry.icon) ?? fallbackIcon : route.icon ?? fallbackIcon;
166
+ const label = this.cleanString(activeEntry?.title) ?? route.label ?? "Current navigation route";
167
+ const badgeKey = activeEntry?.badge?.source ?? route.badge;
168
+ const badge = badgeKey ? this.dockbarBadgeContext()[badgeKey] ?? null : null;
169
+ const item = activeEntry?.source ?? {
170
+ title: label,
171
+ icon
172
+ };
173
+ return {
174
+ activeEntry,
175
+ panelGroup: this.dockbarActiveRoutePanelGroup(),
176
+ icon,
177
+ label,
178
+ badge,
179
+ badgeClass: cn("absolute -right-1 -top-1", activeEntry?.badge?.classes),
180
+ iconContext: {
181
+ $implicit: icon,
182
+ icon,
183
+ item,
184
+ active: true,
185
+ orientation: "vertical",
186
+ level: 0
187
+ }
188
+ };
189
+ }, ...ngDevMode ? [{ debugName: "dockbarRouteHeader" }] : /* istanbul ignore next */ []);
190
+ dockbarRailItems = computed(() => {
191
+ const activeEntry = this.dockbarRouteHeaderVisible() ? this.dockbarActiveRouteEntry() : null;
192
+ if (activeEntry === null) return this.normalizedItems();
193
+ return this.normalizedItems().filter((entry) => entry.key !== activeEntry.key);
194
+ }, ...ngDevMode ? [{ debugName: "dockbarRailItems" }] : /* istanbul ignore next */ []);
195
+ dockbarAsideId = computed(() => `nav-dockbar-${this.safeId(this.resolvedState().id)}`, ...ngDevMode ? [{ debugName: "dockbarAsideId" }] : /* istanbul ignore next */ []);
196
+ dockbarOpenGroup = computed(() => {
197
+ const state = this.resolvedState();
198
+ if (state.type !== "dockbar") return null;
199
+ if (!this.dockbarRouteEnabled()) return this.nav.resolveDockbarGroup(state.id, this.normalizedItems(), state.dockbarMode, this.activeIdSet(), this.activeUrl());
200
+ const groups = this.nav.dockbarGroups(this.normalizedItems());
201
+ const explicitKey = this.nav.currentPanelKey(state.id);
202
+ const explicitGroup = explicitKey === null ? null : groups.find((group) => group.key === explicitKey) ?? null;
203
+ if (explicitGroup !== null) return explicitGroup;
204
+ return state.dockbarMode === "sticky" ? this.dockbarActiveRoutePanelGroup() : null;
205
+ }, ...ngDevMode ? [{ debugName: "dockbarOpenGroup" }] : /* istanbul ignore next */ []);
206
+ dockbarActiveRoutePanelExpanded = computed(() => {
207
+ const panelGroup = this.dockbarActiveRoutePanelGroup();
208
+ const state = this.resolvedState();
209
+ if (panelGroup === null || state.type !== "dockbar") return false;
210
+ return this.dockbarOpenGroup()?.key === panelGroup.key;
211
+ }, ...ngDevMode ? [{ debugName: "dockbarActiveRoutePanelExpanded" }] : /* istanbul ignore next */ []);
212
+ previewRailExpanded = computed(() => {
213
+ const state = this.resolvedState();
214
+ if (state.orientation !== "vertical" || state.type !== "sidebar" || !state.collapsed) return false;
215
+ return this.previewExpanded() || this.sidebarCollapse() && (this.hoverPreviewExpanded() || this.focusPreviewExpanded());
216
+ }, ...ngDevMode ? [{ debugName: "previewRailExpanded" }] : /* istanbul ignore next */ []);
217
+ previewRailOffset = computed(() => this.previewRailExpanded() ? "calc(var(--layout-sidebar-width) - var(--layout-sidebar-collapsed-width))" : "0px", ...ngDevMode ? [{ debugName: "previewRailOffset" }] : /* istanbul ignore next */ []);
218
+ displayState = computed(() => {
219
+ const state = this.resolvedState();
220
+ if (state.type === "dockbar") return {
221
+ ...state,
222
+ collapsed: true
223
+ };
224
+ return this.previewRailExpanded() ? {
225
+ ...state,
226
+ collapsed: false
227
+ } : state;
228
+ }, ...ngDevMode ? [{ debugName: "displayState" }] : /* istanbul ignore next */ []);
229
+ dockbarAsideOpen = computed(() => {
230
+ const state = this.resolvedState();
231
+ if (state.type !== "dockbar" || state.dockbarMode !== "sticky") return false;
232
+ return this.dockbarOpenGroup() !== null;
233
+ }, ...ngDevMode ? [{ debugName: "dockbarAsideOpen" }] : /* istanbul ignore next */ []);
234
+ collapseEnabled = computed(() => {
235
+ const state = this.resolvedState();
236
+ return this.sidebarCollapse() && state.orientation === "vertical" && state.type === "sidebar";
237
+ }, ...ngDevMode ? [{ debugName: "collapseEnabled" }] : /* istanbul ignore next */ []);
238
+ shellClasses = computed(() => cn("flex h-full min-h-0 transition-[width,box-shadow,transform] duration-300 ease-[cubic-bezier(0.22,1,0.36,1)] motion-reduce:transition-none", this.resolvedState().orientation === "horizontal" ? "flex-row items-stretch overflow-visible" : this.resolvedState().type === "dockbar" ? "flex-col overflow-visible" : "flex-col overflow-hidden", this.resolvedState().type === "dockbar" && ["w-(--layout-sidebar-collapsed-width) shrink-0", this.resolvedState().position === "right" && "ml-auto"], this.resolvedState().position === "right" ? "origin-right" : "origin-left", this.previewRailExpanded() && ["absolute inset-y-0 z-20 w-(--layout-sidebar-width) overflow-hidden bg-background shadow-xl", this.resolvedState().position === "right" ? "right-0 border-l border-border" : "left-0 border-r border-border"]), ...ngDevMode ? [{ debugName: "shellClasses" }] : /* istanbul ignore next */ []);
239
+ state = this.resolvedState;
240
+ resolvedDataId = computed(() => this.dataId()?.trim() || this.navId().trim() || "default", ...ngDevMode ? [{ debugName: "resolvedDataId" }] : /* istanbul ignore next */ []);
241
+ hostClasses = computed(() => cn("relative block min-h-0 text-foreground transition-[width] duration-300 ease-[cubic-bezier(0.22,1,0.36,1)] motion-reduce:transition-none", this.resolvedState().orientation === "horizontal" ? "h-full w-full" : this.resolvedState().type === "dockbar" ? this.dockbarAsideOpen() ? "w-[calc(var(--layout-sidebar-collapsed-width)+var(--layout-aside-width))]" : "w-(--layout-sidebar-collapsed-width)" : this.resolvedState().collapsed ? "w-(--layout-sidebar-collapsed-width)" : "w-(--layout-sidebar-width)", this.resolvedState().orientation === "horizontal" || this.resolvedState().type === "dockbar" || this.previewRailExpanded() ? "overflow-visible" : "overflow-hidden", this.class()), ...ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []);
242
+ constructor() {
243
+ effect((onCleanup) => {
244
+ const dataId = this.resolvedDataId();
245
+ this.nav.publishData(dataId, this.data(), this.dataOwner);
246
+ onCleanup(() => this.nav.clearData(dataId, this.dataOwner));
247
+ });
248
+ }
249
+ registerType(config) {
250
+ if (this.typeConfig() !== null && isDevMode()) throw new Error("[Navigation] Hanya satu type (<NavigationSidebar>/<NavigationDockbar>/<NavigationNavbar>/<NavigationFlyout>) yang boleh hidup dalam satu <Navigation>.");
251
+ this.typeConfig.set(config);
252
+ }
253
+ unregisterType(config) {
254
+ if (this.typeConfig() === config) this.typeConfig.set(null);
255
+ }
256
+ toggleCollapsed() {
257
+ this.controller.toggleCollapsed();
258
+ }
259
+ toggleDockbarActiveRoutePanel() {
260
+ const state = this.resolvedState();
261
+ const panelGroup = this.dockbarActiveRoutePanelGroup();
262
+ if (state.type === "dockbar" && state.dockbarMode === "drawer" && panelGroup !== null) this.nav.togglePanel(state.id, panelGroup);
263
+ }
264
+ closeDockbarPanel() {
265
+ const state = this.resolvedState();
266
+ if (state.type === "dockbar" && this.nav.currentPanelKey(state.id) !== null) {
267
+ this.nav.closePanel(state.id);
268
+ return true;
269
+ }
270
+ return false;
271
+ }
272
+ restoreDockbarRoutePanel() {
273
+ const state = this.resolvedState();
274
+ if (!this.dockbarRouteEnabled() || state.type !== "dockbar" || state.dockbarMode !== "sticky" || this.nav.currentPanelKey(state.id) === null) return;
275
+ this.nav.closePanel(state.id);
276
+ }
277
+ setHoverPreview(value) {
278
+ this.hoverPreviewExpanded.set(this.sidebarCollapse() ? value : false);
279
+ }
280
+ setFocusPreview(value, event) {
281
+ if (!this.sidebarCollapse()) {
282
+ this.focusPreviewExpanded.set(false);
283
+ return;
284
+ }
285
+ if (!value && event) {
286
+ const next = event.relatedTarget;
287
+ const host = event.currentTarget;
288
+ if (next instanceof Node && host instanceof Node && host.contains(next)) return;
289
+ }
290
+ this.focusPreviewExpanded.set(value);
291
+ }
292
+ dockbarRouteConfig() {
293
+ const context = this.dockbarRouteContextPreference();
294
+ return context !== null && typeof context === "object" ? context : {};
295
+ }
296
+ cleanString(value) {
297
+ return typeof value === "string" && value.trim() ? value.trim() : null;
298
+ }
299
+ safeId(value) {
300
+ return value.trim().toLowerCase().replace(/[^a-z0-9_-]+/g, "-") || "default";
301
+ }
302
+ static ɵfac = i0.ɵɵngDeclareFactory({
303
+ minVersion: "12.0.0",
304
+ version: "22.2.0",
305
+ ngImport: i0,
306
+ type: NavigationContainerComponent,
307
+ deps: [],
308
+ target: i0.ɵɵFactoryTarget.Component
309
+ });
310
+ static ɵcmp = i0.ɵɵngDeclareComponent({
311
+ minVersion: "17.2.0",
312
+ version: "22.2.0",
313
+ type: NavigationContainerComponent,
314
+ isStandalone: true,
315
+ selector: "Navigation",
316
+ inputs: {
317
+ navId: {
318
+ classPropertyName: "navId",
319
+ publicName: "id",
320
+ isSignal: true,
321
+ isRequired: false,
322
+ transformFunction: null
323
+ },
324
+ dataId: {
325
+ classPropertyName: "dataId",
326
+ publicName: "data-id",
327
+ isSignal: true,
328
+ isRequired: false,
329
+ transformFunction: null
330
+ },
331
+ data: {
332
+ classPropertyName: "data",
333
+ publicName: "data",
334
+ isSignal: true,
335
+ isRequired: false,
336
+ transformFunction: null
337
+ },
338
+ ariaLabel: {
339
+ classPropertyName: "ariaLabel",
340
+ publicName: "ariaLabel",
341
+ isSignal: true,
342
+ isRequired: false,
343
+ transformFunction: null
344
+ },
345
+ compact: {
346
+ classPropertyName: "compact",
347
+ publicName: "compact",
348
+ isSignal: true,
349
+ isRequired: false,
350
+ transformFunction: null
351
+ },
352
+ collapseTree: {
353
+ classPropertyName: "collapseTree",
354
+ publicName: "collapse-tree",
355
+ isSignal: true,
356
+ isRequired: false,
357
+ transformFunction: null
358
+ },
359
+ class: {
360
+ classPropertyName: "class",
361
+ publicName: "class",
362
+ isSignal: true,
363
+ isRequired: false,
364
+ transformFunction: null
365
+ },
366
+ itemClass: {
367
+ classPropertyName: "itemClass",
368
+ publicName: "itemClass",
369
+ isSignal: true,
370
+ isRequired: false,
371
+ transformFunction: null
372
+ },
373
+ groupClass: {
374
+ classPropertyName: "groupClass",
375
+ publicName: "nav-group-class",
376
+ isSignal: true,
377
+ isRequired: false,
378
+ transformFunction: null
379
+ },
380
+ activeIds: {
381
+ classPropertyName: "activeIds",
382
+ publicName: "activeIds",
383
+ isSignal: true,
384
+ isRequired: false,
385
+ transformFunction: null
386
+ },
387
+ activeUrl: {
388
+ classPropertyName: "activeUrl",
389
+ publicName: "activeUrl",
390
+ isSignal: true,
391
+ isRequired: false,
392
+ transformFunction: null
393
+ },
394
+ openedIds: {
395
+ classPropertyName: "openedIds",
396
+ publicName: "openedIds",
397
+ isSignal: true,
398
+ isRequired: false,
399
+ transformFunction: null
400
+ }
401
+ },
402
+ outputs: {
403
+ openedIds: "openedIdsChange",
404
+ itemSelected: "itemSelected"
405
+ },
406
+ host: {
407
+ attributes: { "role": "navigation" },
408
+ listeners: {
409
+ "mouseenter": "setHoverPreview(true)",
410
+ "mouseleave": "setHoverPreview(false)",
411
+ "focusin": "setFocusPreview(true)",
412
+ "focusout": "setFocusPreview(false, $event)"
413
+ },
414
+ properties: {
415
+ "class": "hostClasses()",
416
+ "attr.aria-label": "ariaLabel() || null",
417
+ "attr.data-navigation-id": "resolvedState().id",
418
+ "attr.data-id": "resolvedDataId()",
419
+ "attr.data-orientation": "resolvedState().orientation",
420
+ "attr.data-type": "resolvedState().type",
421
+ "attr.data-type-style": "typeStyle()",
422
+ "attr.data-position": "resolvedState().position",
423
+ "attr.data-collapse-tree": "collapseTree()",
424
+ "attr.data-preview-expanded": "previewRailExpanded() ? \"true\" : null"
425
+ }
426
+ },
427
+ providers: [{
428
+ provide: NAVIGATION_SHELL,
429
+ useExisting: forwardRef(() => NavigationContainerComponent)
430
+ }],
431
+ queries: [{
432
+ propertyName: "iconTemplate",
433
+ first: true,
434
+ predicate: NavigationIconDirective$1,
435
+ descendants: true,
436
+ isSignal: true
437
+ }],
438
+ ngImport: i0,
439
+ template: ` <ng-content /> `,
440
+ isInline: true
441
+ });
442
+ };
443
+ i0.ɵɵngDeclareClassMetadata({
444
+ minVersion: "12.0.0",
445
+ version: "22.2.0",
446
+ ngImport: i0,
447
+ type: NavigationContainerComponent,
448
+ decorators: [{
449
+ type: Component,
450
+ args: [{
451
+ selector: "Navigation",
452
+ providers: [{
453
+ provide: NAVIGATION_SHELL,
454
+ useExisting: forwardRef(() => NavigationContainerComponent)
455
+ }],
456
+ host: {
457
+ "[class]": "hostClasses()",
458
+ role: "navigation",
459
+ "[attr.aria-label]": "ariaLabel() || null",
460
+ "[attr.data-navigation-id]": "resolvedState().id",
461
+ "[attr.data-id]": "resolvedDataId()",
462
+ "[attr.data-orientation]": "resolvedState().orientation",
463
+ "[attr.data-type]": "resolvedState().type",
464
+ "[attr.data-type-style]": "typeStyle()",
465
+ "[attr.data-position]": "resolvedState().position",
466
+ "[attr.data-collapse-tree]": "collapseTree()",
467
+ "[attr.data-preview-expanded]": "previewRailExpanded() ? \"true\" : null",
468
+ "(mouseenter)": "setHoverPreview(true)",
469
+ "(mouseleave)": "setHoverPreview(false)",
470
+ "(focusin)": "setFocusPreview(true)",
471
+ "(focusout)": "setFocusPreview(false, $event)"
472
+ },
473
+ template: ` <ng-content /> `
474
+ }]
475
+ }],
476
+ ctorParameters: () => [],
477
+ propDecorators: {
478
+ navId: [{
479
+ type: i0.Input,
480
+ args: [{
481
+ isSignal: true,
482
+ alias: "id",
483
+ required: false
484
+ }]
485
+ }],
486
+ dataId: [{
487
+ type: i0.Input,
488
+ args: [{
489
+ isSignal: true,
490
+ alias: "data-id",
491
+ required: false
492
+ }]
493
+ }],
494
+ data: [{
495
+ type: i0.Input,
496
+ args: [{
497
+ isSignal: true,
498
+ alias: "data",
499
+ required: false
500
+ }]
501
+ }],
502
+ ariaLabel: [{
503
+ type: i0.Input,
504
+ args: [{
505
+ isSignal: true,
506
+ alias: "ariaLabel",
507
+ required: false
508
+ }]
509
+ }],
510
+ compact: [{
511
+ type: i0.Input,
512
+ args: [{
513
+ isSignal: true,
514
+ alias: "compact",
515
+ required: false
516
+ }]
517
+ }],
518
+ collapseTree: [{
519
+ type: i0.Input,
520
+ args: [{
521
+ isSignal: true,
522
+ alias: "collapse-tree",
523
+ required: false
524
+ }]
525
+ }],
526
+ class: [{
527
+ type: i0.Input,
528
+ args: [{
529
+ isSignal: true,
530
+ alias: "class",
531
+ required: false
532
+ }]
533
+ }],
534
+ itemClass: [{
535
+ type: i0.Input,
536
+ args: [{
537
+ isSignal: true,
538
+ alias: "itemClass",
539
+ required: false
540
+ }]
541
+ }],
542
+ groupClass: [{
543
+ type: i0.Input,
544
+ args: [{
545
+ isSignal: true,
546
+ alias: "nav-group-class",
547
+ required: false
548
+ }]
549
+ }],
550
+ activeIds: [{
551
+ type: i0.Input,
552
+ args: [{
553
+ isSignal: true,
554
+ alias: "activeIds",
555
+ required: false
556
+ }]
557
+ }],
558
+ activeUrl: [{
559
+ type: i0.Input,
560
+ args: [{
561
+ isSignal: true,
562
+ alias: "activeUrl",
563
+ required: false
564
+ }]
565
+ }],
566
+ openedIds: [{
567
+ type: i0.Input,
568
+ args: [{
569
+ isSignal: true,
570
+ alias: "openedIds",
571
+ required: false
572
+ }]
573
+ }, {
574
+ type: i0.Output,
575
+ args: ["openedIdsChange"]
576
+ }],
577
+ itemSelected: [{
578
+ type: i0.Output,
579
+ args: ["itemSelected"]
580
+ }],
581
+ iconTemplate: [{
582
+ type: i0.ContentChild,
583
+ args: [i0.forwardRef(() => NavigationIconDirective$1), { isSignal: true }]
584
+ }]
585
+ }
586
+ });
587
+ var NavigationContentComponent = class NavigationContentComponent {
588
+ container = inject(NavigationContainerComponent);
589
+ class = input("", {
590
+ ...ngDevMode ? { debugName: "class" } : /* istanbul ignore next */ {},
591
+ alias: "class"
592
+ });
593
+ hostClasses = computed(() => cn("min-h-0 flex-1", this.container.displayState().orientation === "horizontal" ? "flex h-full min-w-0 items-stretch justify-center overflow-visible" : "block overflow-y-auto overflow-x-hidden py-2", this.class()), ...ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []);
594
+ static ɵfac = i0.ɵɵngDeclareFactory({
595
+ minVersion: "12.0.0",
596
+ version: "22.2.0",
597
+ ngImport: i0,
598
+ type: NavigationContentComponent,
599
+ deps: [],
600
+ target: i0.ɵɵFactoryTarget.Component
601
+ });
602
+ static ɵcmp = i0.ɵɵngDeclareComponent({
603
+ minVersion: "17.0.0",
604
+ version: "22.2.0",
605
+ type: NavigationContentComponent,
606
+ isStandalone: true,
607
+ selector: "NavigationContent",
608
+ inputs: { class: {
609
+ classPropertyName: "class",
610
+ publicName: "class",
611
+ isSignal: true,
612
+ isRequired: false,
613
+ transformFunction: null
614
+ } },
615
+ host: { properties: { "class": "hostClasses()" } },
616
+ ngImport: i0,
617
+ template: `
618
+ @let navState = container.displayState();
619
+
620
+ @if (navState.orientation === 'horizontal' && navState.type === 'flyout') {
621
+ <!-- Less-common renderers are code-split: a sidebar-only app never bundles them. -->
622
+ @defer (on immediate) {
623
+ <NavigationFlyoutMenu
624
+ [navId]="navState.id"
625
+ [items]="container.normalizedItems()"
626
+ [label]="container.flyoutLabel()"
627
+ [icon]="container.flyoutIcon()"
628
+ [iconOnly]="container.flyoutIconOnly()"
629
+ [iconPosition]="container.flyoutIconPosition()"
630
+ [variant]="container.flyoutTriggerVariant()"
631
+ [floating]="container.flyoutTriggerFloating()"
632
+ [viewport]="container.flyoutPanelViewport()"
633
+ [triggerClass]="container.flyoutTriggerClass()"
634
+ [triggerButtonClass]="container.flyoutTriggerButtonClass()"
635
+ [position]="navState.position"
636
+ [typeStyle]="container.typeStyle()"
637
+ [compact]="container.compact()"
638
+ [itemClass]="container.itemClass()"
639
+ [groupClass]="container.groupClass()"
640
+ [activeIds]="container.activeIdSet()"
641
+ [activeUrl]="container.activeUrl()"
642
+ [iconTemplate]="container.iconTemplate()"
643
+ [collapseTree]="container.collapseTree()"
644
+ [openedIds]="container.openedIds()"
645
+ (openedIdsChange)="container.openedIds.set($event)"
646
+ (itemSelected)="container.itemSelected.emit($event)"
647
+ >
648
+ <ng-content select="NavigationHeader" ngProjectAs="NavigationHeader" />
649
+ <ng-content select="NavigationFooter" ngProjectAs="NavigationFooter" />
650
+ </NavigationFlyoutMenu>
651
+ }
652
+ } @else if (navState.orientation === 'horizontal') {
653
+ @defer (on immediate) {
654
+ <NavigationHorizontal
655
+ [navId]="navState.id"
656
+ [items]="container.normalizedItems()"
657
+ [position]="navState.position"
658
+ [typeStyle]="container.typeStyle()"
659
+ [compact]="container.compact()"
660
+ [itemClass]="container.itemClass()"
661
+ [groupClass]="container.groupClass()"
662
+ [activeIds]="container.activeIdSet()"
663
+ [activeUrl]="container.activeUrl()"
664
+ [iconTemplate]="container.iconTemplate()"
665
+ [collapseTree]="container.collapseTree()"
666
+ [openedIds]="container.openedIds()"
667
+ (openedIdsChange)="container.openedIds.set($event)"
668
+ (itemSelected)="container.itemSelected.emit($event)"
669
+ />
670
+ }
671
+ } @else if (navState.type === 'dockbar') {
672
+ @defer (on immediate) {
673
+ <NavigationDockbarMenu
674
+ [navId]="navState.id"
675
+ [items]="container.normalizedItems()"
676
+ [railItems]="container.dockbarRailItems()"
677
+ [badgeContext]="container.dockbarBadgeContext()"
678
+ [mode]="navState.dockbarMode"
679
+ [position]="navState.position"
680
+ [asideFooterTemplate]="container.dockbarAsideFooter()"
681
+ [itemClass]="container.itemClass()"
682
+ [activeIds]="container.dockbarResolvedActiveIds()"
683
+ [resolvedGroup]="container.dockbarOpenGroup()"
684
+ [activeUrl]="
685
+ container.dockbarRouteEnabled()
686
+ ? container.dockbarResolvedRouteContext().url
687
+ : container.activeUrl()
688
+ "
689
+ [iconTemplate]="container.iconTemplate()"
690
+ [collapseTree]="container.collapseTree()"
691
+ [openedIds]="container.openedIds()"
692
+ (openedIdsChange)="container.openedIds.set($event)"
693
+ (itemSelected)="container.itemSelected.emit($event)"
694
+ />
695
+ }
696
+ } @else {
697
+ <!-- The vertical list (sidebar) is the common default — kept eager, no first-paint pop-in. -->
698
+ <NavigationList
699
+ [navId]="navState.id"
700
+ [items]="container.normalizedItems()"
701
+ [collapsed]="navState.collapsed"
702
+ [position]="navState.position"
703
+ [itemClass]="container.itemClass()"
704
+ [activeIds]="container.activeIdSet()"
705
+ [activeUrl]="container.activeUrl()"
706
+ [iconTemplate]="container.iconTemplate()"
707
+ [collapseTree]="container.collapseTree()"
708
+ [openedIds]="container.openedIds()"
709
+ (openedIdsChange)="container.openedIds.set($event)"
710
+ (itemSelected)="container.itemSelected.emit($event)"
711
+ />
712
+ }
713
+ `,
714
+ isInline: true,
715
+ dependencies: [{
716
+ kind: "component",
717
+ type: NavigationListComponent,
718
+ selector: "NavigationList",
719
+ inputs: [
720
+ "navId",
721
+ "items",
722
+ "collapsed",
723
+ "compact",
724
+ "position",
725
+ "itemClass",
726
+ "activeIds",
727
+ "activeUrl",
728
+ "iconTemplate",
729
+ "collapseTree",
730
+ "openedIds"
731
+ ],
732
+ outputs: ["openedIdsChange", "itemSelected"]
733
+ }],
734
+ deferBlockDependencies: [
735
+ () => [import("./ojiepermana-angular-navigation-navigation-flyout-menu.component-BPgH7FJk.mjs").then((m) => m.NavigationFlyoutMenuComponent)],
736
+ () => [import("./ojiepermana-angular-navigation-navigation-horizontal.component-DMpYcD9t.mjs").then((m) => m.NavigationHorizontalComponent)],
737
+ () => [import("./ojiepermana-angular-navigation-navigation-dockbar-menu.component-DFEJK2jD.mjs").then((m) => m.NavigationDockbarMenuComponent)]
738
+ ]
739
+ });
740
+ };
741
+ i0.ɵɵngDeclareClassMetadataAsync({
742
+ minVersion: "18.0.0",
743
+ version: "22.2.0",
744
+ ngImport: i0,
745
+ type: NavigationContentComponent,
746
+ resolveDeferredDeps: () => [
747
+ import("./ojiepermana-angular-navigation-navigation-flyout-menu.component-BPgH7FJk.mjs").then((m) => m.NavigationFlyoutMenuComponent),
748
+ import("./ojiepermana-angular-navigation-navigation-horizontal.component-DMpYcD9t.mjs").then((m) => m.NavigationHorizontalComponent),
749
+ import("./ojiepermana-angular-navigation-navigation-dockbar-menu.component-DFEJK2jD.mjs").then((m) => m.NavigationDockbarMenuComponent)
750
+ ],
751
+ resolveMetadata: (NavigationFlyoutMenuComponent, NavigationHorizontalComponent, NavigationDockbarMenuComponent) => ({
752
+ decorators: [{
753
+ type: Component,
754
+ args: [{
755
+ selector: "NavigationContent",
756
+ imports: [
757
+ NavigationDockbarMenuComponent,
758
+ NavigationFlyoutMenuComponent,
759
+ NavigationHorizontalComponent,
760
+ NavigationListComponent
761
+ ],
762
+ host: { "[class]": "hostClasses()" },
763
+ template: `
764
+ @let navState = container.displayState();
765
+
766
+ @if (navState.orientation === 'horizontal' && navState.type === 'flyout') {
767
+ <!-- Less-common renderers are code-split: a sidebar-only app never bundles them. -->
768
+ @defer (on immediate) {
769
+ <NavigationFlyoutMenu
770
+ [navId]="navState.id"
771
+ [items]="container.normalizedItems()"
772
+ [label]="container.flyoutLabel()"
773
+ [icon]="container.flyoutIcon()"
774
+ [iconOnly]="container.flyoutIconOnly()"
775
+ [iconPosition]="container.flyoutIconPosition()"
776
+ [variant]="container.flyoutTriggerVariant()"
777
+ [floating]="container.flyoutTriggerFloating()"
778
+ [viewport]="container.flyoutPanelViewport()"
779
+ [triggerClass]="container.flyoutTriggerClass()"
780
+ [triggerButtonClass]="container.flyoutTriggerButtonClass()"
781
+ [position]="navState.position"
782
+ [typeStyle]="container.typeStyle()"
783
+ [compact]="container.compact()"
784
+ [itemClass]="container.itemClass()"
785
+ [groupClass]="container.groupClass()"
786
+ [activeIds]="container.activeIdSet()"
787
+ [activeUrl]="container.activeUrl()"
788
+ [iconTemplate]="container.iconTemplate()"
789
+ [collapseTree]="container.collapseTree()"
790
+ [openedIds]="container.openedIds()"
791
+ (openedIdsChange)="container.openedIds.set($event)"
792
+ (itemSelected)="container.itemSelected.emit($event)"
793
+ >
794
+ <ng-content select="NavigationHeader" ngProjectAs="NavigationHeader" />
795
+ <ng-content select="NavigationFooter" ngProjectAs="NavigationFooter" />
796
+ </NavigationFlyoutMenu>
797
+ }
798
+ } @else if (navState.orientation === 'horizontal') {
799
+ @defer (on immediate) {
800
+ <NavigationHorizontal
801
+ [navId]="navState.id"
802
+ [items]="container.normalizedItems()"
803
+ [position]="navState.position"
804
+ [typeStyle]="container.typeStyle()"
805
+ [compact]="container.compact()"
806
+ [itemClass]="container.itemClass()"
807
+ [groupClass]="container.groupClass()"
808
+ [activeIds]="container.activeIdSet()"
809
+ [activeUrl]="container.activeUrl()"
810
+ [iconTemplate]="container.iconTemplate()"
811
+ [collapseTree]="container.collapseTree()"
812
+ [openedIds]="container.openedIds()"
813
+ (openedIdsChange)="container.openedIds.set($event)"
814
+ (itemSelected)="container.itemSelected.emit($event)"
815
+ />
816
+ }
817
+ } @else if (navState.type === 'dockbar') {
818
+ @defer (on immediate) {
819
+ <NavigationDockbarMenu
820
+ [navId]="navState.id"
821
+ [items]="container.normalizedItems()"
822
+ [railItems]="container.dockbarRailItems()"
823
+ [badgeContext]="container.dockbarBadgeContext()"
824
+ [mode]="navState.dockbarMode"
825
+ [position]="navState.position"
826
+ [asideFooterTemplate]="container.dockbarAsideFooter()"
827
+ [itemClass]="container.itemClass()"
828
+ [activeIds]="container.dockbarResolvedActiveIds()"
829
+ [resolvedGroup]="container.dockbarOpenGroup()"
830
+ [activeUrl]="
831
+ container.dockbarRouteEnabled()
832
+ ? container.dockbarResolvedRouteContext().url
833
+ : container.activeUrl()
834
+ "
835
+ [iconTemplate]="container.iconTemplate()"
836
+ [collapseTree]="container.collapseTree()"
837
+ [openedIds]="container.openedIds()"
838
+ (openedIdsChange)="container.openedIds.set($event)"
839
+ (itemSelected)="container.itemSelected.emit($event)"
840
+ />
841
+ }
842
+ } @else {
843
+ <!-- The vertical list (sidebar) is the common default — kept eager, no first-paint pop-in. -->
844
+ <NavigationList
845
+ [navId]="navState.id"
846
+ [items]="container.normalizedItems()"
847
+ [collapsed]="navState.collapsed"
848
+ [position]="navState.position"
849
+ [itemClass]="container.itemClass()"
850
+ [activeIds]="container.activeIdSet()"
851
+ [activeUrl]="container.activeUrl()"
852
+ [iconTemplate]="container.iconTemplate()"
853
+ [collapseTree]="container.collapseTree()"
854
+ [openedIds]="container.openedIds()"
855
+ (openedIdsChange)="container.openedIds.set($event)"
856
+ (itemSelected)="container.itemSelected.emit($event)"
857
+ />
858
+ }
859
+ `
860
+ }]
861
+ }],
862
+ ctorParameters: null,
863
+ propDecorators: { class: [{
864
+ type: i0.Input,
865
+ args: [{
866
+ isSignal: true,
867
+ alias: "class",
868
+ required: false
869
+ }]
870
+ }] }
871
+ })
872
+ });
873
+ var NavigationFooterComponent = class NavigationFooterComponent {
874
+ shell = inject(NAVIGATION_SHELL, { optional: true });
875
+ class = input("", {
876
+ ...ngDevMode ? { debugName: "class" } : /* istanbul ignore next */ {},
877
+ alias: "class"
878
+ });
879
+ isHorizontal = computed(() => this.shell?.displayState().orientation === "horizontal", ...ngDevMode ? [{ debugName: "isHorizontal" }] : /* istanbul ignore next */ []);
880
+ displayCollapsed = computed(() => this.shell?.displayState().collapsed ?? false, ...ngDevMode ? [{ debugName: "displayCollapsed" }] : /* istanbul ignore next */ []);
881
+ rowClasses = computed(() => cn("flex h-full min-w-0 w-full items-center", !this.isHorizontal() && this.displayCollapsed() ? "justify-center" : "gap-3"), ...ngDevMode ? [{ debugName: "rowClasses" }] : /* istanbul ignore next */ []);
882
+ hostClasses = computed(() => cn(this.isHorizontal() ? "relative z-10 block h-full w-auto shrink-0" : "sticky bottom-0 z-10 block h-(--layout-topbar-height) shrink-0 border-t border-[hsl(var(--border)/var(--section-border-opacity))]", this.class()), ...ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []);
883
+ static ɵfac = i0.ɵɵngDeclareFactory({
884
+ minVersion: "12.0.0",
885
+ version: "22.2.0",
886
+ ngImport: i0,
887
+ type: NavigationFooterComponent,
888
+ deps: [],
889
+ target: i0.ɵɵFactoryTarget.Component
890
+ });
891
+ static ɵcmp = i0.ɵɵngDeclareComponent({
892
+ minVersion: "17.1.0",
893
+ version: "22.2.0",
894
+ type: NavigationFooterComponent,
895
+ isStandalone: true,
896
+ selector: "NavigationFooter",
897
+ inputs: { class: {
898
+ classPropertyName: "class",
899
+ publicName: "class",
900
+ isSignal: true,
901
+ isRequired: false,
902
+ transformFunction: null
903
+ } },
904
+ host: { properties: {
905
+ "class": "hostClasses()",
906
+ "attr.data-collapsed": "displayCollapsed()"
907
+ } },
908
+ ngImport: i0,
909
+ template: `
910
+ <div [class]="rowClasses()">
911
+ <ng-content />
912
+ </div>
913
+ `,
914
+ isInline: true
915
+ });
916
+ };
917
+ i0.ɵɵngDeclareClassMetadata({
918
+ minVersion: "12.0.0",
919
+ version: "22.2.0",
920
+ ngImport: i0,
921
+ type: NavigationFooterComponent,
922
+ decorators: [{
923
+ type: Component,
924
+ args: [{
925
+ selector: "NavigationFooter",
926
+ host: {
927
+ "[class]": "hostClasses()",
928
+ "[attr.data-collapsed]": "displayCollapsed()"
929
+ },
930
+ template: `
931
+ <div [class]="rowClasses()">
932
+ <ng-content />
933
+ </div>
934
+ `
935
+ }]
936
+ }],
937
+ propDecorators: { class: [{
938
+ type: i0.Input,
939
+ args: [{
940
+ isSignal: true,
941
+ alias: "class",
942
+ required: false
943
+ }]
944
+ }] }
945
+ });
946
+ var NavigationHeaderComponent = class NavigationHeaderComponent {
947
+ shell = inject(NAVIGATION_SHELL);
948
+ toggle = input(false, ...ngDevMode ? [{ debugName: "toggle" }] : /* istanbul ignore next */ []);
949
+ class = input("", {
950
+ ...ngDevMode ? { debugName: "class" } : /* istanbul ignore next */ {},
951
+ alias: "class"
952
+ });
953
+ collapsed = computed(() => this.shell.state().collapsed, ...ngDevMode ? [{ debugName: "collapsed" }] : /* istanbul ignore next */ []);
954
+ displayCollapsed = computed(() => this.shell.displayState().collapsed, ...ngDevMode ? [{ debugName: "displayCollapsed" }] : /* istanbul ignore next */ []);
955
+ isHorizontal = computed(() => this.shell.displayState().orientation === "horizontal", ...ngDevMode ? [{ debugName: "isHorizontal" }] : /* istanbul ignore next */ []);
956
+ showToggle = computed(() => {
957
+ if (this.isHorizontal()) return false;
958
+ return this.toggle() || this.shell.collapseEnabled();
959
+ }, ...ngDevMode ? [{ debugName: "showToggle" }] : /* istanbul ignore next */ []);
960
+ toggleAriaLabel = computed(() => this.collapsed() ? "Expand navigation" : "Collapse navigation", ...ngDevMode ? [{ debugName: "toggleAriaLabel" }] : /* istanbul ignore next */ []);
961
+ toggleIconName = computed(() => this.collapsed() ? "left_panel_open" : "left_panel_close", ...ngDevMode ? [{ debugName: "toggleIconName" }] : /* istanbul ignore next */ []);
962
+ rowClasses = computed(() => cn("flex h-full items-center", !this.isHorizontal() && this.displayCollapsed() ? "justify-center" : "gap-3 px-3"), ...ngDevMode ? [{ debugName: "rowClasses" }] : /* istanbul ignore next */ []);
963
+ contentClasses = computed(() => {
964
+ if (this.isHorizontal()) return "flex min-w-0 items-center gap-3";
965
+ return this.displayCollapsed() ? "flex min-w-0 items-center justify-center" : "flex min-w-0 flex-1 items-center gap-3";
966
+ }, ...ngDevMode ? [{ debugName: "contentClasses" }] : /* istanbul ignore next */ []);
967
+ hostClasses = computed(() => cn(this.isHorizontal() ? "relative z-10 block h-full w-auto shrink-0" : "sticky top-0 z-10 block h-(--layout-topbar-height) shrink-0 border-b border-[hsl(var(--border)/var(--section-border-opacity))]", this.class()), ...ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []);
968
+ toggleCollapsed() {
969
+ this.shell.toggleCollapsed();
970
+ }
971
+ static ɵfac = i0.ɵɵngDeclareFactory({
972
+ minVersion: "12.0.0",
973
+ version: "22.2.0",
974
+ ngImport: i0,
975
+ type: NavigationHeaderComponent,
976
+ deps: [],
977
+ target: i0.ɵɵFactoryTarget.Component
978
+ });
979
+ static ɵcmp = i0.ɵɵngDeclareComponent({
980
+ minVersion: "17.0.0",
981
+ version: "22.2.0",
982
+ type: NavigationHeaderComponent,
983
+ isStandalone: true,
984
+ selector: "NavigationHeader",
985
+ inputs: {
986
+ toggle: {
987
+ classPropertyName: "toggle",
988
+ publicName: "toggle",
989
+ isSignal: true,
990
+ isRequired: false,
991
+ transformFunction: null
992
+ },
993
+ class: {
994
+ classPropertyName: "class",
995
+ publicName: "class",
996
+ isSignal: true,
997
+ isRequired: false,
998
+ transformFunction: null
999
+ }
1000
+ },
1001
+ host: { properties: {
1002
+ "class": "hostClasses()",
1003
+ "attr.data-collapsed": "displayCollapsed()"
1004
+ } },
1005
+ ngImport: i0,
1006
+ template: `
1007
+ <div [class]="rowClasses()">
1008
+ <div [class]="contentClasses()">
1009
+ <ng-content />
1010
+ </div>
1011
+
1012
+ @if (showToggle()) {
1013
+ <button
1014
+ type="button"
1015
+ class="inline-flex size-8 shrink-0 items-center justify-center bg-transparent text-foreground/80 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
1016
+ [attr.aria-label]="toggleAriaLabel()"
1017
+ [attr.title]="toggleAriaLabel()"
1018
+ data-navigation-header-toggle="true"
1019
+ (click)="toggleCollapsed()"
1020
+ >
1021
+ <Icon
1022
+ data-navigation-header-toggle-icon="true"
1023
+ [name]="toggleIconName()"
1024
+ size="inherit"
1025
+ class="text-(length:--nav-icon-size)"
1026
+ />
1027
+ </button>
1028
+ }
1029
+ </div>
1030
+ `,
1031
+ isInline: true,
1032
+ dependencies: [{
1033
+ kind: "component",
1034
+ type: IconComponent,
1035
+ selector: "Icon",
1036
+ inputs: [
1037
+ "name",
1038
+ "class",
1039
+ "size",
1040
+ "fill",
1041
+ "weight",
1042
+ "grade",
1043
+ "opticalSize"
1044
+ ]
1045
+ }]
1046
+ });
1047
+ };
1048
+ i0.ɵɵngDeclareClassMetadata({
1049
+ minVersion: "12.0.0",
1050
+ version: "22.2.0",
1051
+ ngImport: i0,
1052
+ type: NavigationHeaderComponent,
1053
+ decorators: [{
1054
+ type: Component,
1055
+ args: [{
1056
+ selector: "NavigationHeader",
1057
+ imports: [IconComponent],
1058
+ host: {
1059
+ "[class]": "hostClasses()",
1060
+ "[attr.data-collapsed]": "displayCollapsed()"
1061
+ },
1062
+ template: `
1063
+ <div [class]="rowClasses()">
1064
+ <div [class]="contentClasses()">
1065
+ <ng-content />
1066
+ </div>
1067
+
1068
+ @if (showToggle()) {
1069
+ <button
1070
+ type="button"
1071
+ class="inline-flex size-8 shrink-0 items-center justify-center bg-transparent text-foreground/80 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
1072
+ [attr.aria-label]="toggleAriaLabel()"
1073
+ [attr.title]="toggleAriaLabel()"
1074
+ data-navigation-header-toggle="true"
1075
+ (click)="toggleCollapsed()"
1076
+ >
1077
+ <Icon
1078
+ data-navigation-header-toggle-icon="true"
1079
+ [name]="toggleIconName()"
1080
+ size="inherit"
1081
+ class="text-(length:--nav-icon-size)"
1082
+ />
1083
+ </button>
1084
+ }
1085
+ </div>
1086
+ `
1087
+ }]
1088
+ }],
1089
+ propDecorators: {
1090
+ toggle: [{
1091
+ type: i0.Input,
1092
+ args: [{
1093
+ isSignal: true,
1094
+ alias: "toggle",
1095
+ required: false
1096
+ }]
1097
+ }],
1098
+ class: [{
1099
+ type: i0.Input,
1100
+ args: [{
1101
+ isSignal: true,
1102
+ alias: "class",
1103
+ required: false
1104
+ }]
1105
+ }]
1106
+ }
1107
+ });
1108
+ var NavigationSidebarComponent = class NavigationSidebarComponent {
1109
+ container = inject(NavigationContainerComponent);
1110
+ destroyRef = inject(DestroyRef);
1111
+ position = input(null, ...ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []);
1112
+ collapsed = input(null, ...ngDevMode ? [{ debugName: "collapsed" }] : /* istanbul ignore next */ []);
1113
+ collapse = input(false, {
1114
+ ...ngDevMode ? { debugName: "collapse" } : /* istanbul ignore next */ {},
1115
+ alias: "nav-sidebar-collapse",
1116
+ transform: booleanAttribute
1117
+ });
1118
+ previewExpanded = input(false, ...ngDevMode ? [{ debugName: "previewExpanded" }] : /* istanbul ignore next */ []);
1119
+ class = input("", {
1120
+ ...ngDevMode ? { debugName: "class" } : /* istanbul ignore next */ {},
1121
+ alias: "class"
1122
+ });
1123
+ headerSlot = contentChild(NavigationHeaderComponent, ...ngDevMode ? [{ debugName: "headerSlot" }] : /* istanbul ignore next */ []);
1124
+ contentSlot = contentChild(NavigationContentComponent, ...ngDevMode ? [{ debugName: "contentSlot" }] : /* istanbul ignore next */ []);
1125
+ footerSlot = contentChild(NavigationFooterComponent, ...ngDevMode ? [{ debugName: "footerSlot" }] : /* istanbul ignore next */ []);
1126
+ hostClasses = computed(() => cn(this.container.shellClasses(), this.class()), ...ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []);
1127
+ constructor() {
1128
+ const config = {
1129
+ orientation: "vertical",
1130
+ type: "sidebar",
1131
+ position: this.position,
1132
+ collapsed: this.collapsed,
1133
+ sidebarCollapse: this.collapse,
1134
+ previewExpanded: this.previewExpanded
1135
+ };
1136
+ this.container.registerType(config);
1137
+ this.destroyRef.onDestroy(() => this.container.unregisterType(config));
1138
+ }
1139
+ static ɵfac = i0.ɵɵngDeclareFactory({
1140
+ minVersion: "12.0.0",
1141
+ version: "22.2.0",
1142
+ ngImport: i0,
1143
+ type: NavigationSidebarComponent,
1144
+ deps: [],
1145
+ target: i0.ɵɵFactoryTarget.Component
1146
+ });
1147
+ static ɵcmp = i0.ɵɵngDeclareComponent({
1148
+ minVersion: "17.0.0",
1149
+ version: "22.2.0",
1150
+ type: NavigationSidebarComponent,
1151
+ isStandalone: true,
1152
+ selector: "NavigationSidebar",
1153
+ inputs: {
1154
+ position: {
1155
+ classPropertyName: "position",
1156
+ publicName: "position",
1157
+ isSignal: true,
1158
+ isRequired: false,
1159
+ transformFunction: null
1160
+ },
1161
+ collapsed: {
1162
+ classPropertyName: "collapsed",
1163
+ publicName: "collapsed",
1164
+ isSignal: true,
1165
+ isRequired: false,
1166
+ transformFunction: null
1167
+ },
1168
+ collapse: {
1169
+ classPropertyName: "collapse",
1170
+ publicName: "nav-sidebar-collapse",
1171
+ isSignal: true,
1172
+ isRequired: false,
1173
+ transformFunction: null
1174
+ },
1175
+ previewExpanded: {
1176
+ classPropertyName: "previewExpanded",
1177
+ publicName: "previewExpanded",
1178
+ isSignal: true,
1179
+ isRequired: false,
1180
+ transformFunction: null
1181
+ },
1182
+ class: {
1183
+ classPropertyName: "class",
1184
+ publicName: "class",
1185
+ isSignal: true,
1186
+ isRequired: false,
1187
+ transformFunction: null
1188
+ }
1189
+ },
1190
+ host: { properties: { "class": "hostClasses()" } },
1191
+ queries: [
1192
+ {
1193
+ propertyName: "headerSlot",
1194
+ first: true,
1195
+ predicate: NavigationHeaderComponent,
1196
+ descendants: true,
1197
+ isSignal: true
1198
+ },
1199
+ {
1200
+ propertyName: "contentSlot",
1201
+ first: true,
1202
+ predicate: NavigationContentComponent,
1203
+ descendants: true,
1204
+ isSignal: true
1205
+ },
1206
+ {
1207
+ propertyName: "footerSlot",
1208
+ first: true,
1209
+ predicate: NavigationFooterComponent,
1210
+ descendants: true,
1211
+ isSignal: true
1212
+ }
1213
+ ],
1214
+ ngImport: i0,
1215
+ template: `
1216
+ @if (headerSlot()) {
1217
+ <ng-content select="NavigationHeader" />
1218
+ }
1219
+
1220
+ @if (contentSlot()) {
1221
+ <ng-content select="NavigationContent" />
1222
+ } @else {
1223
+ <NavigationContent />
1224
+ }
1225
+
1226
+ @if (footerSlot()) {
1227
+ <ng-content select="NavigationFooter" />
1228
+ }
1229
+ `,
1230
+ isInline: true,
1231
+ dependencies: [{
1232
+ kind: "component",
1233
+ type: NavigationContentComponent,
1234
+ selector: "NavigationContent",
1235
+ inputs: ["class"]
1236
+ }]
1237
+ });
1238
+ };
1239
+ i0.ɵɵngDeclareClassMetadata({
1240
+ minVersion: "12.0.0",
1241
+ version: "22.2.0",
1242
+ ngImport: i0,
1243
+ type: NavigationSidebarComponent,
1244
+ decorators: [{
1245
+ type: Component,
1246
+ args: [{
1247
+ selector: "NavigationSidebar",
1248
+ imports: [NavigationContentComponent],
1249
+ host: { "[class]": "hostClasses()" },
1250
+ template: `
1251
+ @if (headerSlot()) {
1252
+ <ng-content select="NavigationHeader" />
1253
+ }
1254
+
1255
+ @if (contentSlot()) {
1256
+ <ng-content select="NavigationContent" />
1257
+ } @else {
1258
+ <NavigationContent />
1259
+ }
1260
+
1261
+ @if (footerSlot()) {
1262
+ <ng-content select="NavigationFooter" />
1263
+ }
1264
+ `
1265
+ }]
1266
+ }],
1267
+ ctorParameters: () => [],
1268
+ propDecorators: {
1269
+ position: [{
1270
+ type: i0.Input,
1271
+ args: [{
1272
+ isSignal: true,
1273
+ alias: "position",
1274
+ required: false
1275
+ }]
1276
+ }],
1277
+ collapsed: [{
1278
+ type: i0.Input,
1279
+ args: [{
1280
+ isSignal: true,
1281
+ alias: "collapsed",
1282
+ required: false
1283
+ }]
1284
+ }],
1285
+ collapse: [{
1286
+ type: i0.Input,
1287
+ args: [{
1288
+ isSignal: true,
1289
+ alias: "nav-sidebar-collapse",
1290
+ required: false
1291
+ }]
1292
+ }],
1293
+ previewExpanded: [{
1294
+ type: i0.Input,
1295
+ args: [{
1296
+ isSignal: true,
1297
+ alias: "previewExpanded",
1298
+ required: false
1299
+ }]
1300
+ }],
1301
+ class: [{
1302
+ type: i0.Input,
1303
+ args: [{
1304
+ isSignal: true,
1305
+ alias: "class",
1306
+ required: false
1307
+ }]
1308
+ }],
1309
+ headerSlot: [{
1310
+ type: i0.ContentChild,
1311
+ args: [i0.forwardRef(() => NavigationHeaderComponent), { isSignal: true }]
1312
+ }],
1313
+ contentSlot: [{
1314
+ type: i0.ContentChild,
1315
+ args: [i0.forwardRef(() => NavigationContentComponent), { isSignal: true }]
1316
+ }],
1317
+ footerSlot: [{
1318
+ type: i0.ContentChild,
1319
+ args: [i0.forwardRef(() => NavigationFooterComponent), { isSignal: true }]
1320
+ }]
1321
+ }
1322
+ });
1323
+ var NavigationAsideFooterDirective = class NavigationAsideFooterDirective {
1324
+ templateRef = inject(TemplateRef);
1325
+ static ɵfac = i0.ɵɵngDeclareFactory({
1326
+ minVersion: "12.0.0",
1327
+ version: "22.2.0",
1328
+ ngImport: i0,
1329
+ type: NavigationAsideFooterDirective,
1330
+ deps: [],
1331
+ target: i0.ɵɵFactoryTarget.Directive
1332
+ });
1333
+ static ɵdir = i0.ɵɵngDeclareDirective({
1334
+ minVersion: "14.0.0",
1335
+ version: "22.2.0",
1336
+ type: NavigationAsideFooterDirective,
1337
+ isStandalone: true,
1338
+ selector: "ng-template[NavigationAsideFooter]",
1339
+ ngImport: i0
1340
+ });
1341
+ };
1342
+ i0.ɵɵngDeclareClassMetadata({
1343
+ minVersion: "12.0.0",
1344
+ version: "22.2.0",
1345
+ ngImport: i0,
1346
+ type: NavigationAsideFooterDirective,
1347
+ decorators: [{
1348
+ type: Directive,
1349
+ args: [{ selector: "ng-template[NavigationAsideFooter]" }]
1350
+ }]
1351
+ });
1352
+ const EMPTY_NAVIGATION_BADGE_CONTEXT = Object.freeze({});
1353
+ var NavigationDockbarComponent = class NavigationDockbarComponent {
1354
+ container = inject(NavigationContainerComponent);
1355
+ destroyRef = inject(DestroyRef);
1356
+ host = inject(ElementRef);
1357
+ injector = inject(Injector);
1358
+ mode = input(null, ...ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []);
1359
+ position = input(null, ...ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []);
1360
+ routeContext = input(null, {
1361
+ ...ngDevMode ? { debugName: "routeContext" } : /* istanbul ignore next */ {},
1362
+ alias: "dockbar-route-context"
1363
+ });
1364
+ badgeContext = input(EMPTY_NAVIGATION_BADGE_CONTEXT, {
1365
+ ...ngDevMode ? { debugName: "badgeContext" } : /* istanbul ignore next */ {},
1366
+ alias: "dockbar-badge"
1367
+ });
1368
+ class = input("", {
1369
+ ...ngDevMode ? { debugName: "class" } : /* istanbul ignore next */ {},
1370
+ alias: "class"
1371
+ });
1372
+ headerSlot = contentChild(NavigationHeaderComponent, ...ngDevMode ? [{ debugName: "headerSlot" }] : /* istanbul ignore next */ []);
1373
+ contentSlot = contentChild(NavigationContentComponent, ...ngDevMode ? [{ debugName: "contentSlot" }] : /* istanbul ignore next */ []);
1374
+ footerSlot = contentChild(NavigationFooterComponent, ...ngDevMode ? [{ debugName: "footerSlot" }] : /* istanbul ignore next */ []);
1375
+ asideFooterSlot = contentChild(NavigationAsideFooterDirective, ...ngDevMode ? [{ debugName: "asideFooterSlot" }] : /* istanbul ignore next */ []);
1376
+ routeContextEnabled = computed(() => {
1377
+ const context = this.routeContext();
1378
+ return context !== null && context !== false;
1379
+ }, ...ngDevMode ? [{ debugName: "routeContextEnabled" }] : /* istanbul ignore next */ []);
1380
+ hostClasses = computed(() => cn(this.container.shellClasses(), this.class()), ...ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []);
1381
+ constructor() {
1382
+ const config = {
1383
+ orientation: "vertical",
1384
+ type: "dockbar",
1385
+ position: this.position,
1386
+ dockbarMode: this.mode,
1387
+ dockbarRouteContext: this.routeContext,
1388
+ dockbarBadgeContext: this.badgeContext,
1389
+ dockbarRouteHeaderVisible: computed(() => this.routeContextEnabled() && this.headerSlot() === void 0),
1390
+ dockbarAsideFooter: computed(() => this.asideFooterSlot()?.templateRef ?? null)
1391
+ };
1392
+ this.container.registerType(config);
1393
+ this.destroyRef.onDestroy(() => this.container.unregisterType(config));
1394
+ }
1395
+ onPointerOut(event) {
1396
+ const relatedTarget = event.relatedTarget;
1397
+ const nodeType = this.host.nativeElement.ownerDocument.defaultView?.Node;
1398
+ if (relatedTarget !== null && nodeType !== void 0 && relatedTarget instanceof nodeType && this.host.nativeElement.contains(relatedTarget)) return;
1399
+ this.container.restoreDockbarRoutePanel();
1400
+ }
1401
+ onEscape(event) {
1402
+ const state = this.container.resolvedState();
1403
+ if (event.defaultPrevented || state.type !== "dockbar" || state.dockbarMode !== "drawer") return;
1404
+ if (!this.container.closeDockbarPanel()) return;
1405
+ event.preventDefault();
1406
+ this.host.nativeElement.querySelector("[data-navigation-dockbar-route-trigger=\"true\"]")?.focus();
1407
+ }
1408
+ toggleActiveRoutePanel() {
1409
+ const wasExpanded = this.container.dockbarActiveRoutePanelExpanded();
1410
+ this.container.toggleDockbarActiveRoutePanel();
1411
+ if (!wasExpanded) afterNextRender({ read: () => {
1412
+ this.host.nativeElement.querySelector(`#${this.container.dockbarAsideId()}`)?.querySelector("a[href], button:not([disabled]), [tabindex]:not([tabindex=\"-1\"])")?.focus();
1413
+ } }, { injector: this.injector });
1414
+ }
1415
+ static ɵfac = i0.ɵɵngDeclareFactory({
1416
+ minVersion: "12.0.0",
1417
+ version: "22.2.0",
1418
+ ngImport: i0,
1419
+ type: NavigationDockbarComponent,
1420
+ deps: [],
1421
+ target: i0.ɵɵFactoryTarget.Component
1422
+ });
1423
+ static ɵcmp = i0.ɵɵngDeclareComponent({
1424
+ minVersion: "17.0.0",
1425
+ version: "22.2.0",
1426
+ type: NavigationDockbarComponent,
1427
+ isStandalone: true,
1428
+ selector: "NavigationDockbar",
1429
+ inputs: {
1430
+ mode: {
1431
+ classPropertyName: "mode",
1432
+ publicName: "mode",
1433
+ isSignal: true,
1434
+ isRequired: false,
1435
+ transformFunction: null
1436
+ },
1437
+ position: {
1438
+ classPropertyName: "position",
1439
+ publicName: "position",
1440
+ isSignal: true,
1441
+ isRequired: false,
1442
+ transformFunction: null
1443
+ },
1444
+ routeContext: {
1445
+ classPropertyName: "routeContext",
1446
+ publicName: "dockbar-route-context",
1447
+ isSignal: true,
1448
+ isRequired: false,
1449
+ transformFunction: null
1450
+ },
1451
+ badgeContext: {
1452
+ classPropertyName: "badgeContext",
1453
+ publicName: "dockbar-badge",
1454
+ isSignal: true,
1455
+ isRequired: false,
1456
+ transformFunction: null
1457
+ },
1458
+ class: {
1459
+ classPropertyName: "class",
1460
+ publicName: "class",
1461
+ isSignal: true,
1462
+ isRequired: false,
1463
+ transformFunction: null
1464
+ }
1465
+ },
1466
+ host: {
1467
+ listeners: {
1468
+ "keydown.escape": "onEscape($event)",
1469
+ "pointerout": "onPointerOut($event)"
1470
+ },
1471
+ properties: { "class": "hostClasses()" }
1472
+ },
1473
+ queries: [
1474
+ {
1475
+ propertyName: "headerSlot",
1476
+ first: true,
1477
+ predicate: NavigationHeaderComponent,
1478
+ descendants: true,
1479
+ isSignal: true
1480
+ },
1481
+ {
1482
+ propertyName: "contentSlot",
1483
+ first: true,
1484
+ predicate: NavigationContentComponent,
1485
+ descendants: true,
1486
+ isSignal: true
1487
+ },
1488
+ {
1489
+ propertyName: "footerSlot",
1490
+ first: true,
1491
+ predicate: NavigationFooterComponent,
1492
+ descendants: true,
1493
+ isSignal: true
1494
+ },
1495
+ {
1496
+ propertyName: "asideFooterSlot",
1497
+ first: true,
1498
+ predicate: NavigationAsideFooterDirective,
1499
+ descendants: true,
1500
+ isSignal: true
1501
+ }
1502
+ ],
1503
+ ngImport: i0,
1504
+ template: `
1505
+ @if (headerSlot()) {
1506
+ <ng-content select="NavigationHeader" />
1507
+ } @else if (container.dockbarRouteHeader(); as routeHeader) {
1508
+ <NavigationHeader>
1509
+ <ng-template #routeIndicator>
1510
+ <span
1511
+ aria-hidden="true"
1512
+ class="inline-flex items-center justify-center text-(length:--nav-icon-size-rail) text-current"
1513
+ >
1514
+ @if (container.iconTemplate(); as customIcon) {
1515
+ <ng-container
1516
+ [ngTemplateOutlet]="customIcon.template"
1517
+ [ngTemplateOutletContext]="routeHeader.iconContext"
1518
+ />
1519
+ } @else {
1520
+ <Icon [name]="routeHeader.icon" size="inherit" [fill]="1" />
1521
+ }
1522
+ </span>
1523
+
1524
+ @if (routeHeader.badge; as badge) {
1525
+ @defer (on immediate) {
1526
+ <NavigationBadgeCount [badge]="badge" [class]="routeHeader.badgeClass" />
1527
+ }
1528
+ }
1529
+ </ng-template>
1530
+
1531
+ @if (routeHeader.panelGroup && container.resolvedState().dockbarMode === 'drawer') {
1532
+ <button
1533
+ type="button"
1534
+ data-navigation-dockbar-route-header="true"
1535
+ data-navigation-dockbar-route-trigger="true"
1536
+ [attr.data-navigation-item-key]="routeHeader.activeEntry?.key"
1537
+ class="relative inline-flex size-(--nav-rail-item-size) items-center justify-center rounded-md bg-accent text-foreground transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
1538
+ [Tooltip]="routeHeader.label"
1539
+ [TooltipPosition]="position() === 'right' ? 'left' : 'right'"
1540
+ [attr.aria-controls]="container.dockbarAsideId()"
1541
+ [attr.aria-expanded]="container.dockbarActiveRoutePanelExpanded()"
1542
+ (click)="toggleActiveRoutePanel()"
1543
+ >
1544
+ <span class="sr-only">{{ routeHeader.label }}</span>
1545
+ <ng-container [ngTemplateOutlet]="routeIndicator" />
1546
+ </button>
1547
+ } @else {
1548
+ <span
1549
+ data-navigation-dockbar-route-header="true"
1550
+ class="relative inline-flex size-(--nav-rail-item-size) items-center justify-center text-foreground"
1551
+ [Tooltip]="routeHeader.label"
1552
+ [TooltipPosition]="position() === 'right' ? 'left' : 'right'"
1553
+ >
1554
+ <span class="sr-only">{{ routeHeader.label }}</span>
1555
+ <ng-container [ngTemplateOutlet]="routeIndicator" />
1556
+ </span>
1557
+ }
1558
+ </NavigationHeader>
1559
+ }
1560
+
1561
+ @if (contentSlot()) {
1562
+ <ng-content select="NavigationContent" />
1563
+ } @else {
1564
+ <NavigationContent />
1565
+ }
1566
+
1567
+ @if (footerSlot()) {
1568
+ <ng-content select="NavigationFooter" />
1569
+ }
1570
+ `,
1571
+ isInline: true,
1572
+ dependencies: [
1573
+ {
1574
+ kind: "component",
1575
+ type: IconComponent,
1576
+ selector: "Icon",
1577
+ inputs: [
1578
+ "name",
1579
+ "class",
1580
+ "size",
1581
+ "fill",
1582
+ "weight",
1583
+ "grade",
1584
+ "opticalSize"
1585
+ ]
1586
+ },
1587
+ {
1588
+ kind: "component",
1589
+ type: NavigationContentComponent,
1590
+ selector: "NavigationContent",
1591
+ inputs: ["class"]
1592
+ },
1593
+ {
1594
+ kind: "component",
1595
+ type: NavigationHeaderComponent,
1596
+ selector: "NavigationHeader",
1597
+ inputs: ["toggle", "class"]
1598
+ },
1599
+ {
1600
+ kind: "directive",
1601
+ type: NgTemplateOutlet,
1602
+ selector: "[ngTemplateOutlet]",
1603
+ inputs: [
1604
+ "ngTemplateOutletContext",
1605
+ "ngTemplateOutlet",
1606
+ "ngTemplateOutletInjector"
1607
+ ]
1608
+ },
1609
+ {
1610
+ kind: "directive",
1611
+ type: TooltipDirective,
1612
+ selector: "[Tooltip]",
1613
+ inputs: [
1614
+ "Tooltip",
1615
+ "TooltipPosition",
1616
+ "TooltipDisabled",
1617
+ "TooltipShowDelay",
1618
+ "TooltipHideDelay"
1619
+ ],
1620
+ exportAs: ["Tooltip"]
1621
+ }
1622
+ ],
1623
+ deferBlockDependencies: [() => [import("./ojiepermana-angular-navigation-navigation-badge-count.component-BKCeWzml.mjs").then((m) => m.NavigationBadgeCountComponent)]]
1624
+ });
1625
+ };
1626
+ i0.ɵɵngDeclareClassMetadataAsync({
1627
+ minVersion: "18.0.0",
1628
+ version: "22.2.0",
1629
+ ngImport: i0,
1630
+ type: NavigationDockbarComponent,
1631
+ resolveDeferredDeps: () => [import("./ojiepermana-angular-navigation-navigation-badge-count.component-BKCeWzml.mjs").then((m) => m.NavigationBadgeCountComponent)],
1632
+ resolveMetadata: (NavigationBadgeCountComponent) => ({
1633
+ decorators: [{
1634
+ type: Component,
1635
+ args: [{
1636
+ selector: "NavigationDockbar",
1637
+ imports: [
1638
+ IconComponent,
1639
+ NavigationBadgeCountComponent,
1640
+ NavigationContentComponent,
1641
+ NavigationHeaderComponent,
1642
+ NgTemplateOutlet,
1643
+ TooltipDirective
1644
+ ],
1645
+ host: {
1646
+ "[class]": "hostClasses()",
1647
+ "(keydown.escape)": "onEscape($event)",
1648
+ "(pointerout)": "onPointerOut($event)"
1649
+ },
1650
+ template: `
1651
+ @if (headerSlot()) {
1652
+ <ng-content select="NavigationHeader" />
1653
+ } @else if (container.dockbarRouteHeader(); as routeHeader) {
1654
+ <NavigationHeader>
1655
+ <ng-template #routeIndicator>
1656
+ <span
1657
+ aria-hidden="true"
1658
+ class="inline-flex items-center justify-center text-(length:--nav-icon-size-rail) text-current"
1659
+ >
1660
+ @if (container.iconTemplate(); as customIcon) {
1661
+ <ng-container
1662
+ [ngTemplateOutlet]="customIcon.template"
1663
+ [ngTemplateOutletContext]="routeHeader.iconContext"
1664
+ />
1665
+ } @else {
1666
+ <Icon [name]="routeHeader.icon" size="inherit" [fill]="1" />
1667
+ }
1668
+ </span>
1669
+
1670
+ @if (routeHeader.badge; as badge) {
1671
+ @defer (on immediate) {
1672
+ <NavigationBadgeCount [badge]="badge" [class]="routeHeader.badgeClass" />
1673
+ }
1674
+ }
1675
+ </ng-template>
1676
+
1677
+ @if (routeHeader.panelGroup && container.resolvedState().dockbarMode === 'drawer') {
1678
+ <button
1679
+ type="button"
1680
+ data-navigation-dockbar-route-header="true"
1681
+ data-navigation-dockbar-route-trigger="true"
1682
+ [attr.data-navigation-item-key]="routeHeader.activeEntry?.key"
1683
+ class="relative inline-flex size-(--nav-rail-item-size) items-center justify-center rounded-md bg-accent text-foreground transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
1684
+ [Tooltip]="routeHeader.label"
1685
+ [TooltipPosition]="position() === 'right' ? 'left' : 'right'"
1686
+ [attr.aria-controls]="container.dockbarAsideId()"
1687
+ [attr.aria-expanded]="container.dockbarActiveRoutePanelExpanded()"
1688
+ (click)="toggleActiveRoutePanel()"
1689
+ >
1690
+ <span class="sr-only">{{ routeHeader.label }}</span>
1691
+ <ng-container [ngTemplateOutlet]="routeIndicator" />
1692
+ </button>
1693
+ } @else {
1694
+ <span
1695
+ data-navigation-dockbar-route-header="true"
1696
+ class="relative inline-flex size-(--nav-rail-item-size) items-center justify-center text-foreground"
1697
+ [Tooltip]="routeHeader.label"
1698
+ [TooltipPosition]="position() === 'right' ? 'left' : 'right'"
1699
+ >
1700
+ <span class="sr-only">{{ routeHeader.label }}</span>
1701
+ <ng-container [ngTemplateOutlet]="routeIndicator" />
1702
+ </span>
1703
+ }
1704
+ </NavigationHeader>
1705
+ }
1706
+
1707
+ @if (contentSlot()) {
1708
+ <ng-content select="NavigationContent" />
1709
+ } @else {
1710
+ <NavigationContent />
1711
+ }
1712
+
1713
+ @if (footerSlot()) {
1714
+ <ng-content select="NavigationFooter" />
1715
+ }
1716
+ `
1717
+ }]
1718
+ }],
1719
+ ctorParameters: () => [],
1720
+ propDecorators: {
1721
+ mode: [{
1722
+ type: i0.Input,
1723
+ args: [{
1724
+ isSignal: true,
1725
+ alias: "mode",
1726
+ required: false
1727
+ }]
1728
+ }],
1729
+ position: [{
1730
+ type: i0.Input,
1731
+ args: [{
1732
+ isSignal: true,
1733
+ alias: "position",
1734
+ required: false
1735
+ }]
1736
+ }],
1737
+ routeContext: [{
1738
+ type: i0.Input,
1739
+ args: [{
1740
+ isSignal: true,
1741
+ alias: "dockbar-route-context",
1742
+ required: false
1743
+ }]
1744
+ }],
1745
+ badgeContext: [{
1746
+ type: i0.Input,
1747
+ args: [{
1748
+ isSignal: true,
1749
+ alias: "dockbar-badge",
1750
+ required: false
1751
+ }]
1752
+ }],
1753
+ class: [{
1754
+ type: i0.Input,
1755
+ args: [{
1756
+ isSignal: true,
1757
+ alias: "class",
1758
+ required: false
1759
+ }]
1760
+ }],
1761
+ headerSlot: [{
1762
+ type: i0.ContentChild,
1763
+ args: [i0.forwardRef(() => NavigationHeaderComponent), { isSignal: true }]
1764
+ }],
1765
+ contentSlot: [{
1766
+ type: i0.ContentChild,
1767
+ args: [i0.forwardRef(() => NavigationContentComponent), { isSignal: true }]
1768
+ }],
1769
+ footerSlot: [{
1770
+ type: i0.ContentChild,
1771
+ args: [i0.forwardRef(() => NavigationFooterComponent), { isSignal: true }]
1772
+ }],
1773
+ asideFooterSlot: [{
1774
+ type: i0.ContentChild,
1775
+ args: [i0.forwardRef(() => NavigationAsideFooterDirective), { isSignal: true }]
1776
+ }]
1777
+ }
1778
+ })
1779
+ });
1780
+ var NavigationNavbarComponent = class NavigationNavbarComponent {
1781
+ container = inject(NavigationContainerComponent);
1782
+ destroyRef = inject(DestroyRef);
1783
+ position = input(null, {
1784
+ ...ngDevMode ? { debugName: "position" } : /* istanbul ignore next */ {},
1785
+ alias: "nav-position"
1786
+ });
1787
+ typeStyle = input("flat", {
1788
+ ...ngDevMode ? { debugName: "typeStyle" } : /* istanbul ignore next */ {},
1789
+ alias: "nav-type-style"
1790
+ });
1791
+ class = input("", {
1792
+ ...ngDevMode ? { debugName: "class" } : /* istanbul ignore next */ {},
1793
+ alias: "class"
1794
+ });
1795
+ headerSlot = contentChild(NavigationHeaderComponent, ...ngDevMode ? [{ debugName: "headerSlot" }] : /* istanbul ignore next */ []);
1796
+ contentSlot = contentChild(NavigationContentComponent, ...ngDevMode ? [{ debugName: "contentSlot" }] : /* istanbul ignore next */ []);
1797
+ footerSlot = contentChild(NavigationFooterComponent, ...ngDevMode ? [{ debugName: "footerSlot" }] : /* istanbul ignore next */ []);
1798
+ hostClasses = computed(() => cn(this.container.shellClasses(), this.class()), ...ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []);
1799
+ constructor() {
1800
+ const config = {
1801
+ orientation: "horizontal",
1802
+ type: "navbar",
1803
+ position: this.position,
1804
+ typeStyle: this.typeStyle
1805
+ };
1806
+ this.container.registerType(config);
1807
+ this.destroyRef.onDestroy(() => this.container.unregisterType(config));
1808
+ }
1809
+ static ɵfac = i0.ɵɵngDeclareFactory({
1810
+ minVersion: "12.0.0",
1811
+ version: "22.2.0",
1812
+ ngImport: i0,
1813
+ type: NavigationNavbarComponent,
1814
+ deps: [],
1815
+ target: i0.ɵɵFactoryTarget.Component
1816
+ });
1817
+ static ɵcmp = i0.ɵɵngDeclareComponent({
1818
+ minVersion: "17.0.0",
1819
+ version: "22.2.0",
1820
+ type: NavigationNavbarComponent,
1821
+ isStandalone: true,
1822
+ selector: "NavigationNavbar",
1823
+ inputs: {
1824
+ position: {
1825
+ classPropertyName: "position",
1826
+ publicName: "nav-position",
1827
+ isSignal: true,
1828
+ isRequired: false,
1829
+ transformFunction: null
1830
+ },
1831
+ typeStyle: {
1832
+ classPropertyName: "typeStyle",
1833
+ publicName: "nav-type-style",
1834
+ isSignal: true,
1835
+ isRequired: false,
1836
+ transformFunction: null
1837
+ },
1838
+ class: {
1839
+ classPropertyName: "class",
1840
+ publicName: "class",
1841
+ isSignal: true,
1842
+ isRequired: false,
1843
+ transformFunction: null
1844
+ }
1845
+ },
1846
+ host: { properties: { "class": "hostClasses()" } },
1847
+ queries: [
1848
+ {
1849
+ propertyName: "headerSlot",
1850
+ first: true,
1851
+ predicate: NavigationHeaderComponent,
1852
+ descendants: true,
1853
+ isSignal: true
1854
+ },
1855
+ {
1856
+ propertyName: "contentSlot",
1857
+ first: true,
1858
+ predicate: NavigationContentComponent,
1859
+ descendants: true,
1860
+ isSignal: true
1861
+ },
1862
+ {
1863
+ propertyName: "footerSlot",
1864
+ first: true,
1865
+ predicate: NavigationFooterComponent,
1866
+ descendants: true,
1867
+ isSignal: true
1868
+ }
1869
+ ],
1870
+ ngImport: i0,
1871
+ template: `
1872
+ @if (headerSlot()) {
1873
+ <ng-content select="NavigationHeader" />
1874
+ }
1875
+
1876
+ @if (contentSlot()) {
1877
+ <ng-content select="NavigationContent" />
1878
+ } @else {
1879
+ <NavigationContent />
1880
+ }
1881
+
1882
+ @if (footerSlot()) {
1883
+ <ng-content select="NavigationFooter" />
1884
+ }
1885
+ `,
1886
+ isInline: true,
1887
+ dependencies: [{
1888
+ kind: "component",
1889
+ type: NavigationContentComponent,
1890
+ selector: "NavigationContent",
1891
+ inputs: ["class"]
1892
+ }]
1893
+ });
1894
+ };
1895
+ i0.ɵɵngDeclareClassMetadata({
1896
+ minVersion: "12.0.0",
1897
+ version: "22.2.0",
1898
+ ngImport: i0,
1899
+ type: NavigationNavbarComponent,
1900
+ decorators: [{
1901
+ type: Component,
1902
+ args: [{
1903
+ selector: "NavigationNavbar",
1904
+ imports: [NavigationContentComponent],
1905
+ host: { "[class]": "hostClasses()" },
1906
+ template: `
1907
+ @if (headerSlot()) {
1908
+ <ng-content select="NavigationHeader" />
1909
+ }
1910
+
1911
+ @if (contentSlot()) {
1912
+ <ng-content select="NavigationContent" />
1913
+ } @else {
1914
+ <NavigationContent />
1915
+ }
1916
+
1917
+ @if (footerSlot()) {
1918
+ <ng-content select="NavigationFooter" />
1919
+ }
1920
+ `
1921
+ }]
1922
+ }],
1923
+ ctorParameters: () => [],
1924
+ propDecorators: {
1925
+ position: [{
1926
+ type: i0.Input,
1927
+ args: [{
1928
+ isSignal: true,
1929
+ alias: "nav-position",
1930
+ required: false
1931
+ }]
1932
+ }],
1933
+ typeStyle: [{
1934
+ type: i0.Input,
1935
+ args: [{
1936
+ isSignal: true,
1937
+ alias: "nav-type-style",
1938
+ required: false
1939
+ }]
1940
+ }],
1941
+ class: [{
1942
+ type: i0.Input,
1943
+ args: [{
1944
+ isSignal: true,
1945
+ alias: "class",
1946
+ required: false
1947
+ }]
1948
+ }],
1949
+ headerSlot: [{
1950
+ type: i0.ContentChild,
1951
+ args: [i0.forwardRef(() => NavigationHeaderComponent), { isSignal: true }]
1952
+ }],
1953
+ contentSlot: [{
1954
+ type: i0.ContentChild,
1955
+ args: [i0.forwardRef(() => NavigationContentComponent), { isSignal: true }]
1956
+ }],
1957
+ footerSlot: [{
1958
+ type: i0.ContentChild,
1959
+ args: [i0.forwardRef(() => NavigationFooterComponent), { isSignal: true }]
1960
+ }]
1961
+ }
1962
+ });
1963
+ var NavigationFlyoutComponent = class NavigationFlyoutComponent {
1964
+ container = inject(NavigationContainerComponent);
1965
+ destroyRef = inject(DestroyRef);
1966
+ label = input("Menu", ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
1967
+ icon = input(null, ...ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []);
1968
+ iconOnly = input(false, {
1969
+ ...ngDevMode ? { debugName: "iconOnly" } : /* istanbul ignore next */ {},
1970
+ alias: "icon-only",
1971
+ transform: booleanAttribute
1972
+ });
1973
+ iconPosition = input("start", {
1974
+ ...ngDevMode ? { debugName: "iconPosition" } : /* istanbul ignore next */ {},
1975
+ alias: "icon-position"
1976
+ });
1977
+ triggerVariant = input("button", {
1978
+ ...ngDevMode ? { debugName: "triggerVariant" } : /* istanbul ignore next */ {},
1979
+ alias: "trigger-variant"
1980
+ });
1981
+ triggerFloating = input(false, {
1982
+ ...ngDevMode ? { debugName: "triggerFloating" } : /* istanbul ignore next */ {},
1983
+ alias: "trigger-floating",
1984
+ transform: booleanAttribute
1985
+ });
1986
+ panelViewport = input(false, {
1987
+ ...ngDevMode ? { debugName: "panelViewport" } : /* istanbul ignore next */ {},
1988
+ alias: "panel-viewport",
1989
+ transform: booleanAttribute
1990
+ });
1991
+ triggerClass = input("", {
1992
+ ...ngDevMode ? { debugName: "triggerClass" } : /* istanbul ignore next */ {},
1993
+ alias: "trigger-class"
1994
+ });
1995
+ triggerButtonClass = input("", {
1996
+ ...ngDevMode ? { debugName: "triggerButtonClass" } : /* istanbul ignore next */ {},
1997
+ alias: "trigger-button-class"
1998
+ });
1999
+ position = input(null, {
2000
+ ...ngDevMode ? { debugName: "position" } : /* istanbul ignore next */ {},
2001
+ alias: "nav-position"
2002
+ });
2003
+ typeStyle = input("flat", {
2004
+ ...ngDevMode ? { debugName: "typeStyle" } : /* istanbul ignore next */ {},
2005
+ alias: "nav-type-style"
2006
+ });
2007
+ class = input("", {
2008
+ ...ngDevMode ? { debugName: "class" } : /* istanbul ignore next */ {},
2009
+ alias: "class"
2010
+ });
2011
+ hostClasses = computed(() => cn(this.container.shellClasses(), this.class()), ...ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []);
2012
+ constructor() {
2013
+ const config = {
2014
+ orientation: "horizontal",
2015
+ type: "flyout",
2016
+ position: this.position,
2017
+ flyoutLabel: this.label,
2018
+ flyoutIcon: this.icon,
2019
+ flyoutIconOnly: this.iconOnly,
2020
+ flyoutIconPosition: this.iconPosition,
2021
+ flyoutTriggerVariant: this.triggerVariant,
2022
+ flyoutTriggerFloating: this.triggerFloating,
2023
+ flyoutPanelViewport: this.panelViewport,
2024
+ flyoutTriggerClass: this.triggerClass,
2025
+ flyoutTriggerButtonClass: this.triggerButtonClass,
2026
+ typeStyle: this.typeStyle
2027
+ };
2028
+ this.container.registerType(config);
2029
+ this.destroyRef.onDestroy(() => this.container.unregisterType(config));
2030
+ }
2031
+ static ɵfac = i0.ɵɵngDeclareFactory({
2032
+ minVersion: "12.0.0",
2033
+ version: "22.2.0",
2034
+ ngImport: i0,
2035
+ type: NavigationFlyoutComponent,
2036
+ deps: [],
2037
+ target: i0.ɵɵFactoryTarget.Component
2038
+ });
2039
+ static ɵcmp = i0.ɵɵngDeclareComponent({
2040
+ minVersion: "17.1.0",
2041
+ version: "22.2.0",
2042
+ type: NavigationFlyoutComponent,
2043
+ isStandalone: true,
2044
+ selector: "NavigationFlyout",
2045
+ inputs: {
2046
+ label: {
2047
+ classPropertyName: "label",
2048
+ publicName: "label",
2049
+ isSignal: true,
2050
+ isRequired: false,
2051
+ transformFunction: null
2052
+ },
2053
+ icon: {
2054
+ classPropertyName: "icon",
2055
+ publicName: "icon",
2056
+ isSignal: true,
2057
+ isRequired: false,
2058
+ transformFunction: null
2059
+ },
2060
+ iconOnly: {
2061
+ classPropertyName: "iconOnly",
2062
+ publicName: "icon-only",
2063
+ isSignal: true,
2064
+ isRequired: false,
2065
+ transformFunction: null
2066
+ },
2067
+ iconPosition: {
2068
+ classPropertyName: "iconPosition",
2069
+ publicName: "icon-position",
2070
+ isSignal: true,
2071
+ isRequired: false,
2072
+ transformFunction: null
2073
+ },
2074
+ triggerVariant: {
2075
+ classPropertyName: "triggerVariant",
2076
+ publicName: "trigger-variant",
2077
+ isSignal: true,
2078
+ isRequired: false,
2079
+ transformFunction: null
2080
+ },
2081
+ triggerFloating: {
2082
+ classPropertyName: "triggerFloating",
2083
+ publicName: "trigger-floating",
2084
+ isSignal: true,
2085
+ isRequired: false,
2086
+ transformFunction: null
2087
+ },
2088
+ panelViewport: {
2089
+ classPropertyName: "panelViewport",
2090
+ publicName: "panel-viewport",
2091
+ isSignal: true,
2092
+ isRequired: false,
2093
+ transformFunction: null
2094
+ },
2095
+ triggerClass: {
2096
+ classPropertyName: "triggerClass",
2097
+ publicName: "trigger-class",
2098
+ isSignal: true,
2099
+ isRequired: false,
2100
+ transformFunction: null
2101
+ },
2102
+ triggerButtonClass: {
2103
+ classPropertyName: "triggerButtonClass",
2104
+ publicName: "trigger-button-class",
2105
+ isSignal: true,
2106
+ isRequired: false,
2107
+ transformFunction: null
2108
+ },
2109
+ position: {
2110
+ classPropertyName: "position",
2111
+ publicName: "nav-position",
2112
+ isSignal: true,
2113
+ isRequired: false,
2114
+ transformFunction: null
2115
+ },
2116
+ typeStyle: {
2117
+ classPropertyName: "typeStyle",
2118
+ publicName: "nav-type-style",
2119
+ isSignal: true,
2120
+ isRequired: false,
2121
+ transformFunction: null
2122
+ },
2123
+ class: {
2124
+ classPropertyName: "class",
2125
+ publicName: "class",
2126
+ isSignal: true,
2127
+ isRequired: false,
2128
+ transformFunction: null
2129
+ }
2130
+ },
2131
+ host: { properties: { "class": "hostClasses()" } },
2132
+ ngImport: i0,
2133
+ template: `
2134
+ <!-- Bar hanya berisi trigger (dari NavigationContent → FlyoutMenu); NavigationHeader &
2135
+ NavigationFooter di-re-project ke DALAM panel flyout saat dibuka. Urutan dibaca dari sisi
2136
+ bar ke arah luar: header (menempel bar, sticky) → menu → footer (ujung jauh). Mode top:
2137
+ brand atas, logout bawah; mode bottom: cerminannya (brand bawah dekat bar, logout atas). -->
2138
+ <NavigationContent>
2139
+ <ng-content select="NavigationHeader" ngProjectAs="NavigationHeader" />
2140
+ <ng-content select="NavigationFooter" ngProjectAs="NavigationFooter" />
2141
+ </NavigationContent>
2142
+ `,
2143
+ isInline: true,
2144
+ dependencies: [{
2145
+ kind: "component",
2146
+ type: NavigationContentComponent,
2147
+ selector: "NavigationContent",
2148
+ inputs: ["class"]
2149
+ }]
2150
+ });
2151
+ };
2152
+ i0.ɵɵngDeclareClassMetadata({
2153
+ minVersion: "12.0.0",
2154
+ version: "22.2.0",
2155
+ ngImport: i0,
2156
+ type: NavigationFlyoutComponent,
2157
+ decorators: [{
2158
+ type: Component,
2159
+ args: [{
2160
+ selector: "NavigationFlyout",
2161
+ imports: [NavigationContentComponent],
2162
+ host: { "[class]": "hostClasses()" },
2163
+ template: `
2164
+ <!-- Bar hanya berisi trigger (dari NavigationContent → FlyoutMenu); NavigationHeader &
2165
+ NavigationFooter di-re-project ke DALAM panel flyout saat dibuka. Urutan dibaca dari sisi
2166
+ bar ke arah luar: header (menempel bar, sticky) → menu → footer (ujung jauh). Mode top:
2167
+ brand atas, logout bawah; mode bottom: cerminannya (brand bawah dekat bar, logout atas). -->
2168
+ <NavigationContent>
2169
+ <ng-content select="NavigationHeader" ngProjectAs="NavigationHeader" />
2170
+ <ng-content select="NavigationFooter" ngProjectAs="NavigationFooter" />
2171
+ </NavigationContent>
2172
+ `
2173
+ }]
2174
+ }],
2175
+ ctorParameters: () => [],
2176
+ propDecorators: {
2177
+ label: [{
2178
+ type: i0.Input,
2179
+ args: [{
2180
+ isSignal: true,
2181
+ alias: "label",
2182
+ required: false
2183
+ }]
2184
+ }],
2185
+ icon: [{
2186
+ type: i0.Input,
2187
+ args: [{
2188
+ isSignal: true,
2189
+ alias: "icon",
2190
+ required: false
2191
+ }]
2192
+ }],
2193
+ iconOnly: [{
2194
+ type: i0.Input,
2195
+ args: [{
2196
+ isSignal: true,
2197
+ alias: "icon-only",
2198
+ required: false
2199
+ }]
2200
+ }],
2201
+ iconPosition: [{
2202
+ type: i0.Input,
2203
+ args: [{
2204
+ isSignal: true,
2205
+ alias: "icon-position",
2206
+ required: false
2207
+ }]
2208
+ }],
2209
+ triggerVariant: [{
2210
+ type: i0.Input,
2211
+ args: [{
2212
+ isSignal: true,
2213
+ alias: "trigger-variant",
2214
+ required: false
2215
+ }]
2216
+ }],
2217
+ triggerFloating: [{
2218
+ type: i0.Input,
2219
+ args: [{
2220
+ isSignal: true,
2221
+ alias: "trigger-floating",
2222
+ required: false
2223
+ }]
2224
+ }],
2225
+ panelViewport: [{
2226
+ type: i0.Input,
2227
+ args: [{
2228
+ isSignal: true,
2229
+ alias: "panel-viewport",
2230
+ required: false
2231
+ }]
2232
+ }],
2233
+ triggerClass: [{
2234
+ type: i0.Input,
2235
+ args: [{
2236
+ isSignal: true,
2237
+ alias: "trigger-class",
2238
+ required: false
2239
+ }]
2240
+ }],
2241
+ triggerButtonClass: [{
2242
+ type: i0.Input,
2243
+ args: [{
2244
+ isSignal: true,
2245
+ alias: "trigger-button-class",
2246
+ required: false
2247
+ }]
2248
+ }],
2249
+ position: [{
2250
+ type: i0.Input,
2251
+ args: [{
2252
+ isSignal: true,
2253
+ alias: "nav-position",
2254
+ required: false
2255
+ }]
2256
+ }],
2257
+ typeStyle: [{
2258
+ type: i0.Input,
2259
+ args: [{
2260
+ isSignal: true,
2261
+ alias: "nav-type-style",
2262
+ required: false
2263
+ }]
2264
+ }],
2265
+ class: [{
2266
+ type: i0.Input,
2267
+ args: [{
2268
+ isSignal: true,
2269
+ alias: "class",
2270
+ required: false
2271
+ }]
2272
+ }]
2273
+ }
2274
+ });
2275
+ function isCompactDisplay(shell) {
2276
+ const state = shell.displayState();
2277
+ if (state.orientation !== "vertical") return false;
2278
+ if (state.type === "dockbar") return true;
2279
+ return shell.collapseEnabled() && state.collapsed;
2280
+ }
2281
+ var NavigationCollapseRootDirective = class NavigationCollapseRootDirective {
2282
+ shell = inject(NAVIGATION_SHELL);
2283
+ collapseEnabled = computed(() => {
2284
+ const state = this.shell.displayState();
2285
+ return state.orientation === "vertical" && (this.shell.collapseEnabled() || state.type === "dockbar");
2286
+ }, ...ngDevMode ? [{ debugName: "collapseEnabled" }] : /* istanbul ignore next */ []);
2287
+ displayCollapsed = computed(() => isCompactDisplay(this.shell), ...ngDevMode ? [{ debugName: "displayCollapsed" }] : /* istanbul ignore next */ []);
2288
+ static ɵfac = i0.ɵɵngDeclareFactory({
2289
+ minVersion: "12.0.0",
2290
+ version: "22.2.0",
2291
+ ngImport: i0,
2292
+ type: NavigationCollapseRootDirective,
2293
+ deps: [],
2294
+ target: i0.ɵɵFactoryTarget.Directive
2295
+ });
2296
+ static ɵdir = i0.ɵɵngDeclareDirective({
2297
+ minVersion: "14.0.0",
2298
+ version: "22.2.0",
2299
+ type: NavigationCollapseRootDirective,
2300
+ isStandalone: true,
2301
+ selector: "[NavigationCollapseRoot]",
2302
+ host: { properties: {
2303
+ "class.w-full": "collapseEnabled()",
2304
+ "class.justify-center": "displayCollapsed()"
2305
+ } },
2306
+ ngImport: i0
2307
+ });
2308
+ };
2309
+ i0.ɵɵngDeclareClassMetadata({
2310
+ minVersion: "12.0.0",
2311
+ version: "22.2.0",
2312
+ ngImport: i0,
2313
+ type: NavigationCollapseRootDirective,
2314
+ decorators: [{
2315
+ type: Directive,
2316
+ args: [{
2317
+ selector: "[NavigationCollapseRoot]",
2318
+ host: {
2319
+ "[class.w-full]": "collapseEnabled()",
2320
+ "[class.justify-center]": "displayCollapsed()"
2321
+ }
2322
+ }]
2323
+ }]
2324
+ });
2325
+ var NavigationCollapseExpandedDirective = class NavigationCollapseExpandedDirective {
2326
+ shell = inject(NAVIGATION_SHELL);
2327
+ templateRef = inject(TemplateRef);
2328
+ viewContainer = inject(ViewContainerRef);
2329
+ hasView = false;
2330
+ shouldRender = computed(() => !isCompactDisplay(this.shell), ...ngDevMode ? [{ debugName: "shouldRender" }] : /* istanbul ignore next */ []);
2331
+ constructor() {
2332
+ effect(() => {
2333
+ if (this.shouldRender()) {
2334
+ if (!this.hasView) {
2335
+ this.viewContainer.createEmbeddedView(this.templateRef);
2336
+ this.hasView = true;
2337
+ }
2338
+ return;
2339
+ }
2340
+ if (this.hasView) {
2341
+ this.viewContainer.clear();
2342
+ this.hasView = false;
2343
+ }
2344
+ });
2345
+ }
2346
+ static ɵfac = i0.ɵɵngDeclareFactory({
2347
+ minVersion: "12.0.0",
2348
+ version: "22.2.0",
2349
+ ngImport: i0,
2350
+ type: NavigationCollapseExpandedDirective,
2351
+ deps: [],
2352
+ target: i0.ɵɵFactoryTarget.Directive
2353
+ });
2354
+ static ɵdir = i0.ɵɵngDeclareDirective({
2355
+ minVersion: "14.0.0",
2356
+ version: "22.2.0",
2357
+ type: NavigationCollapseExpandedDirective,
2358
+ isStandalone: true,
2359
+ selector: "[NavigationCollapseExpanded]",
2360
+ ngImport: i0
2361
+ });
2362
+ };
2363
+ i0.ɵɵngDeclareClassMetadata({
2364
+ minVersion: "12.0.0",
2365
+ version: "22.2.0",
2366
+ ngImport: i0,
2367
+ type: NavigationCollapseExpandedDirective,
2368
+ decorators: [{
2369
+ type: Directive,
2370
+ args: [{ selector: "[NavigationCollapseExpanded]" }]
2371
+ }],
2372
+ ctorParameters: () => []
2373
+ });
2374
+ var NavigationFooterActionComponent = class NavigationFooterActionComponent {
2375
+ shell = inject(NAVIGATION_SHELL, { optional: true });
2376
+ class = input("", {
2377
+ ...ngDevMode ? { debugName: "class" } : /* istanbul ignore next */ {},
2378
+ alias: "class"
2379
+ });
2380
+ collapsed = computed(() => {
2381
+ const state = this.shell?.displayState();
2382
+ return state ? state.orientation === "vertical" && state.collapsed : false;
2383
+ }, ...ngDevMode ? [{ debugName: "collapsed" }] : /* istanbul ignore next */ []);
2384
+ hostClasses = computed(() => cn(this.collapsed() ? "hidden" : "ml-auto flex shrink-0 items-center gap-1", this.class()), ...ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []);
2385
+ static ɵfac = i0.ɵɵngDeclareFactory({
2386
+ minVersion: "12.0.0",
2387
+ version: "22.2.0",
2388
+ ngImport: i0,
2389
+ type: NavigationFooterActionComponent,
2390
+ deps: [],
2391
+ target: i0.ɵɵFactoryTarget.Component
2392
+ });
2393
+ static ɵcmp = i0.ɵɵngDeclareComponent({
2394
+ minVersion: "17.1.0",
2395
+ version: "22.2.0",
2396
+ type: NavigationFooterActionComponent,
2397
+ isStandalone: true,
2398
+ selector: "NavigationFooterAction",
2399
+ inputs: { class: {
2400
+ classPropertyName: "class",
2401
+ publicName: "class",
2402
+ isSignal: true,
2403
+ isRequired: false,
2404
+ transformFunction: null
2405
+ } },
2406
+ host: { properties: { "class": "hostClasses()" } },
2407
+ ngImport: i0,
2408
+ template: `<ng-content />`,
2409
+ isInline: true
2410
+ });
2411
+ };
2412
+ i0.ɵɵngDeclareClassMetadata({
2413
+ minVersion: "12.0.0",
2414
+ version: "22.2.0",
2415
+ ngImport: i0,
2416
+ type: NavigationFooterActionComponent,
2417
+ decorators: [{
2418
+ type: Component,
2419
+ args: [{
2420
+ selector: "NavigationFooterAction",
2421
+ host: { "[class]": "hostClasses()" },
2422
+ template: `<ng-content />`
2423
+ }]
2424
+ }],
2425
+ propDecorators: { class: [{
2426
+ type: i0.Input,
2427
+ args: [{
2428
+ isSignal: true,
2429
+ alias: "class",
2430
+ required: false
2431
+ }]
2432
+ }] }
2433
+ });
2434
+ function deriveNavigationInitials(name) {
2435
+ const parts = name.trim().split(/\s+/).filter(Boolean);
2436
+ if (parts.length === 0) return "";
2437
+ const first = parts[0] ?? "";
2438
+ if (parts.length === 1) return first.slice(0, 2).toUpperCase();
2439
+ const last = parts[parts.length - 1] ?? "";
2440
+ return (first.charAt(0) + last.charAt(0)).toUpperCase();
2441
+ }
2442
+ const INITIAL_HOST_CLASSES = "inline-flex size-8 shrink-0 items-center justify-center overflow-hidden rounded-md bg-primary/10 text-primary";
2443
+ function setupNavigationInitial(sources) {
2444
+ return {
2445
+ resolvedInitials: computed(() => sources.initials()?.slice(0, 2).toUpperCase() || deriveNavigationInitials(sources.name())),
2446
+ iconClasses: computed(() => sources.compact() ? "text-(length:--nav-icon-size-rail)" : "text-(length:--nav-icon-size)"),
2447
+ hostClasses: computed(() => cn(INITIAL_HOST_CLASSES, sources.class()))
2448
+ };
2449
+ }
2450
+ var NavigationFooterInitialComponent = class NavigationFooterInitialComponent {
2451
+ name = input("", ...ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []);
2452
+ src = input(null, ...ngDevMode ? [{ debugName: "src" }] : /* istanbul ignore next */ []);
2453
+ initials = input(null, ...ngDevMode ? [{ debugName: "initials" }] : /* istanbul ignore next */ []);
2454
+ icon = input(null, ...ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []);
2455
+ class = input("", {
2456
+ ...ngDevMode ? { debugName: "class" } : /* istanbul ignore next */ {},
2457
+ alias: "class"
2458
+ });
2459
+ view = setupNavigationInitial({
2460
+ name: () => this.name(),
2461
+ initials: () => this.initials(),
2462
+ compact: () => false,
2463
+ class: () => this.class()
2464
+ });
2465
+ resolvedInitials = this.view.resolvedInitials;
2466
+ hostClasses = this.view.hostClasses;
2467
+ static ɵfac = i0.ɵɵngDeclareFactory({
2468
+ minVersion: "12.0.0",
2469
+ version: "22.2.0",
2470
+ ngImport: i0,
2471
+ type: NavigationFooterInitialComponent,
2472
+ deps: [],
2473
+ target: i0.ɵɵFactoryTarget.Component
2474
+ });
2475
+ static ɵcmp = i0.ɵɵngDeclareComponent({
2476
+ minVersion: "17.0.0",
2477
+ version: "22.2.0",
2478
+ type: NavigationFooterInitialComponent,
2479
+ isStandalone: true,
2480
+ selector: "NavigationFooterInitial",
2481
+ inputs: {
2482
+ name: {
2483
+ classPropertyName: "name",
2484
+ publicName: "name",
2485
+ isSignal: true,
2486
+ isRequired: false,
2487
+ transformFunction: null
2488
+ },
2489
+ src: {
2490
+ classPropertyName: "src",
2491
+ publicName: "src",
2492
+ isSignal: true,
2493
+ isRequired: false,
2494
+ transformFunction: null
2495
+ },
2496
+ initials: {
2497
+ classPropertyName: "initials",
2498
+ publicName: "initials",
2499
+ isSignal: true,
2500
+ isRequired: false,
2501
+ transformFunction: null
2502
+ },
2503
+ icon: {
2504
+ classPropertyName: "icon",
2505
+ publicName: "icon",
2506
+ isSignal: true,
2507
+ isRequired: false,
2508
+ transformFunction: null
2509
+ },
2510
+ class: {
2511
+ classPropertyName: "class",
2512
+ publicName: "class",
2513
+ isSignal: true,
2514
+ isRequired: false,
2515
+ transformFunction: null
2516
+ }
2517
+ },
2518
+ host: { properties: {
2519
+ "class": "hostClasses()",
2520
+ "attr.role": "name() ? 'img' : null",
2521
+ "attr.aria-label": "name() || null"
2522
+ } },
2523
+ ngImport: i0,
2524
+ template: `
2525
+ @if (src(); as source) {
2526
+ <img [src]="source" alt="" class="h-full w-full rounded-[inherit] object-cover" />
2527
+ } @else if (icon(); as glyph) {
2528
+ <Icon [name]="glyph" size="inherit" [fill]="1" class="text-(length:--nav-icon-size)" />
2529
+ } @else {
2530
+ <span class="text-xs font-semibold leading-none">{{ resolvedInitials() }}</span>
2531
+ }
2532
+ `,
2533
+ isInline: true,
2534
+ dependencies: [{
2535
+ kind: "component",
2536
+ type: IconComponent,
2537
+ selector: "Icon",
2538
+ inputs: [
2539
+ "name",
2540
+ "class",
2541
+ "size",
2542
+ "fill",
2543
+ "weight",
2544
+ "grade",
2545
+ "opticalSize"
2546
+ ]
2547
+ }]
2548
+ });
2549
+ };
2550
+ i0.ɵɵngDeclareClassMetadata({
2551
+ minVersion: "12.0.0",
2552
+ version: "22.2.0",
2553
+ ngImport: i0,
2554
+ type: NavigationFooterInitialComponent,
2555
+ decorators: [{
2556
+ type: Component,
2557
+ args: [{
2558
+ selector: "NavigationFooterInitial",
2559
+ imports: [IconComponent],
2560
+ host: {
2561
+ "[class]": "hostClasses()",
2562
+ "[attr.role]": "name() ? 'img' : null",
2563
+ "[attr.aria-label]": "name() || null"
2564
+ },
2565
+ template: `
2566
+ @if (src(); as source) {
2567
+ <img [src]="source" alt="" class="h-full w-full rounded-[inherit] object-cover" />
2568
+ } @else if (icon(); as glyph) {
2569
+ <Icon [name]="glyph" size="inherit" [fill]="1" class="text-(length:--nav-icon-size)" />
2570
+ } @else {
2571
+ <span class="text-xs font-semibold leading-none">{{ resolvedInitials() }}</span>
2572
+ }
2573
+ `
2574
+ }]
2575
+ }],
2576
+ propDecorators: {
2577
+ name: [{
2578
+ type: i0.Input,
2579
+ args: [{
2580
+ isSignal: true,
2581
+ alias: "name",
2582
+ required: false
2583
+ }]
2584
+ }],
2585
+ src: [{
2586
+ type: i0.Input,
2587
+ args: [{
2588
+ isSignal: true,
2589
+ alias: "src",
2590
+ required: false
2591
+ }]
2592
+ }],
2593
+ initials: [{
2594
+ type: i0.Input,
2595
+ args: [{
2596
+ isSignal: true,
2597
+ alias: "initials",
2598
+ required: false
2599
+ }]
2600
+ }],
2601
+ icon: [{
2602
+ type: i0.Input,
2603
+ args: [{
2604
+ isSignal: true,
2605
+ alias: "icon",
2606
+ required: false
2607
+ }]
2608
+ }],
2609
+ class: [{
2610
+ type: i0.Input,
2611
+ args: [{
2612
+ isSignal: true,
2613
+ alias: "class",
2614
+ required: false
2615
+ }]
2616
+ }]
2617
+ }
2618
+ });
2619
+ var NavigationFooterTitleComponent = class NavigationFooterTitleComponent {
2620
+ shell = inject(NAVIGATION_SHELL, { optional: true });
2621
+ title = input("", ...ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []);
2622
+ subtitle = input(null, ...ngDevMode ? [{ debugName: "subtitle" }] : /* istanbul ignore next */ []);
2623
+ class = input("", {
2624
+ ...ngDevMode ? { debugName: "class" } : /* istanbul ignore next */ {},
2625
+ alias: "class"
2626
+ });
2627
+ collapsed = computed(() => {
2628
+ const state = this.shell?.displayState();
2629
+ return state ? state.orientation === "vertical" && state.collapsed : false;
2630
+ }, ...ngDevMode ? [{ debugName: "collapsed" }] : /* istanbul ignore next */ []);
2631
+ hostClasses = computed(() => cn(this.collapsed() ? "hidden" : "flex min-w-0 flex-col justify-center", this.class()), ...ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []);
2632
+ static ɵfac = i0.ɵɵngDeclareFactory({
2633
+ minVersion: "12.0.0",
2634
+ version: "22.2.0",
2635
+ ngImport: i0,
2636
+ type: NavigationFooterTitleComponent,
2637
+ deps: [],
2638
+ target: i0.ɵɵFactoryTarget.Component
2639
+ });
2640
+ static ɵcmp = i0.ɵɵngDeclareComponent({
2641
+ minVersion: "17.0.0",
2642
+ version: "22.2.0",
2643
+ type: NavigationFooterTitleComponent,
2644
+ isStandalone: true,
2645
+ selector: "NavigationFooterTitle",
2646
+ inputs: {
2647
+ title: {
2648
+ classPropertyName: "title",
2649
+ publicName: "title",
2650
+ isSignal: true,
2651
+ isRequired: false,
2652
+ transformFunction: null
2653
+ },
2654
+ subtitle: {
2655
+ classPropertyName: "subtitle",
2656
+ publicName: "subtitle",
2657
+ isSignal: true,
2658
+ isRequired: false,
2659
+ transformFunction: null
2660
+ },
2661
+ class: {
2662
+ classPropertyName: "class",
2663
+ publicName: "class",
2664
+ isSignal: true,
2665
+ isRequired: false,
2666
+ transformFunction: null
2667
+ }
2668
+ },
2669
+ host: { properties: {
2670
+ "class": "hostClasses()",
2671
+ "attr.data-collapsed": "collapsed()"
2672
+ } },
2673
+ ngImport: i0,
2674
+ template: `
2675
+ <span class="nav-text block truncate text-foreground">{{ title() }}</span>
2676
+ @if (subtitle(); as sub) {
2677
+ <span
2678
+ class="nav-subtitle -mt-0.5 block truncate text-muted-foreground"
2679
+ data-navigation-sidebar-subtitle
2680
+ >
2681
+ {{ sub }}
2682
+ </span>
2683
+ }
2684
+ `,
2685
+ isInline: true
2686
+ });
2687
+ };
2688
+ i0.ɵɵngDeclareClassMetadata({
2689
+ minVersion: "12.0.0",
2690
+ version: "22.2.0",
2691
+ ngImport: i0,
2692
+ type: NavigationFooterTitleComponent,
2693
+ decorators: [{
2694
+ type: Component,
2695
+ args: [{
2696
+ selector: "NavigationFooterTitle",
2697
+ host: {
2698
+ "[class]": "hostClasses()",
2699
+ "[attr.data-collapsed]": "collapsed()"
2700
+ },
2701
+ template: `
2702
+ <span class="nav-text block truncate text-foreground">{{ title() }}</span>
2703
+ @if (subtitle(); as sub) {
2704
+ <span
2705
+ class="nav-subtitle -mt-0.5 block truncate text-muted-foreground"
2706
+ data-navigation-sidebar-subtitle
2707
+ >
2708
+ {{ sub }}
2709
+ </span>
2710
+ }
2711
+ `
2712
+ }]
2713
+ }],
2714
+ propDecorators: {
2715
+ title: [{
2716
+ type: i0.Input,
2717
+ args: [{
2718
+ isSignal: true,
2719
+ alias: "title",
2720
+ required: false
2721
+ }]
2722
+ }],
2723
+ subtitle: [{
2724
+ type: i0.Input,
2725
+ args: [{
2726
+ isSignal: true,
2727
+ alias: "subtitle",
2728
+ required: false
2729
+ }]
2730
+ }],
2731
+ class: [{
2732
+ type: i0.Input,
2733
+ args: [{
2734
+ isSignal: true,
2735
+ alias: "class",
2736
+ required: false
2737
+ }]
2738
+ }]
2739
+ }
2740
+ });
2741
+ var NavigationHeaderInitialComponent = class NavigationHeaderInitialComponent {
2742
+ name = input("", ...ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []);
2743
+ src = input(null, ...ngDevMode ? [{ debugName: "src" }] : /* istanbul ignore next */ []);
2744
+ initials = input(null, ...ngDevMode ? [{ debugName: "initials" }] : /* istanbul ignore next */ []);
2745
+ icon = input(null, ...ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []);
2746
+ compact = input(false, {
2747
+ ...ngDevMode ? { debugName: "compact" } : /* istanbul ignore next */ {},
2748
+ transform: booleanAttribute
2749
+ });
2750
+ class = input("", {
2751
+ ...ngDevMode ? { debugName: "class" } : /* istanbul ignore next */ {},
2752
+ alias: "class"
2753
+ });
2754
+ view = setupNavigationInitial({
2755
+ name: () => this.name(),
2756
+ initials: () => this.initials(),
2757
+ compact: () => this.compact(),
2758
+ class: () => this.class()
2759
+ });
2760
+ resolvedInitials = this.view.resolvedInitials;
2761
+ iconClasses = this.view.iconClasses;
2762
+ hostClasses = this.view.hostClasses;
2763
+ static ɵfac = i0.ɵɵngDeclareFactory({
2764
+ minVersion: "12.0.0",
2765
+ version: "22.2.0",
2766
+ ngImport: i0,
2767
+ type: NavigationHeaderInitialComponent,
2768
+ deps: [],
2769
+ target: i0.ɵɵFactoryTarget.Component
2770
+ });
2771
+ static ɵcmp = i0.ɵɵngDeclareComponent({
2772
+ minVersion: "17.0.0",
2773
+ version: "22.2.0",
2774
+ type: NavigationHeaderInitialComponent,
2775
+ isStandalone: true,
2776
+ selector: "NavigationHeaderInitial",
2777
+ inputs: {
2778
+ name: {
2779
+ classPropertyName: "name",
2780
+ publicName: "name",
2781
+ isSignal: true,
2782
+ isRequired: false,
2783
+ transformFunction: null
2784
+ },
2785
+ src: {
2786
+ classPropertyName: "src",
2787
+ publicName: "src",
2788
+ isSignal: true,
2789
+ isRequired: false,
2790
+ transformFunction: null
2791
+ },
2792
+ initials: {
2793
+ classPropertyName: "initials",
2794
+ publicName: "initials",
2795
+ isSignal: true,
2796
+ isRequired: false,
2797
+ transformFunction: null
2798
+ },
2799
+ icon: {
2800
+ classPropertyName: "icon",
2801
+ publicName: "icon",
2802
+ isSignal: true,
2803
+ isRequired: false,
2804
+ transformFunction: null
2805
+ },
2806
+ compact: {
2807
+ classPropertyName: "compact",
2808
+ publicName: "compact",
2809
+ isSignal: true,
2810
+ isRequired: false,
2811
+ transformFunction: null
2812
+ },
2813
+ class: {
2814
+ classPropertyName: "class",
2815
+ publicName: "class",
2816
+ isSignal: true,
2817
+ isRequired: false,
2818
+ transformFunction: null
2819
+ }
2820
+ },
2821
+ host: { properties: {
2822
+ "class": "hostClasses()",
2823
+ "attr.role": "name() ? 'img' : null",
2824
+ "attr.aria-label": "name() || null"
2825
+ } },
2826
+ ngImport: i0,
2827
+ template: `
2828
+ @if (src(); as source) {
2829
+ <img [src]="source" alt="" class="h-full w-full rounded-[inherit] object-cover" />
2830
+ } @else if (icon(); as glyph) {
2831
+ <Icon [name]="glyph" size="inherit" [fill]="1" [class]="iconClasses()" />
2832
+ } @else {
2833
+ <span class="text-xs font-semibold leading-none">{{ resolvedInitials() }}</span>
2834
+ }
2835
+ `,
2836
+ isInline: true,
2837
+ dependencies: [{
2838
+ kind: "component",
2839
+ type: IconComponent,
2840
+ selector: "Icon",
2841
+ inputs: [
2842
+ "name",
2843
+ "class",
2844
+ "size",
2845
+ "fill",
2846
+ "weight",
2847
+ "grade",
2848
+ "opticalSize"
2849
+ ]
2850
+ }]
2851
+ });
2852
+ };
2853
+ i0.ɵɵngDeclareClassMetadata({
2854
+ minVersion: "12.0.0",
2855
+ version: "22.2.0",
2856
+ ngImport: i0,
2857
+ type: NavigationHeaderInitialComponent,
2858
+ decorators: [{
2859
+ type: Component,
2860
+ args: [{
2861
+ selector: "NavigationHeaderInitial",
2862
+ imports: [IconComponent],
2863
+ host: {
2864
+ "[class]": "hostClasses()",
2865
+ "[attr.role]": "name() ? 'img' : null",
2866
+ "[attr.aria-label]": "name() || null"
2867
+ },
2868
+ template: `
2869
+ @if (src(); as source) {
2870
+ <img [src]="source" alt="" class="h-full w-full rounded-[inherit] object-cover" />
2871
+ } @else if (icon(); as glyph) {
2872
+ <Icon [name]="glyph" size="inherit" [fill]="1" [class]="iconClasses()" />
2873
+ } @else {
2874
+ <span class="text-xs font-semibold leading-none">{{ resolvedInitials() }}</span>
2875
+ }
2876
+ `
2877
+ }]
2878
+ }],
2879
+ propDecorators: {
2880
+ name: [{
2881
+ type: i0.Input,
2882
+ args: [{
2883
+ isSignal: true,
2884
+ alias: "name",
2885
+ required: false
2886
+ }]
2887
+ }],
2888
+ src: [{
2889
+ type: i0.Input,
2890
+ args: [{
2891
+ isSignal: true,
2892
+ alias: "src",
2893
+ required: false
2894
+ }]
2895
+ }],
2896
+ initials: [{
2897
+ type: i0.Input,
2898
+ args: [{
2899
+ isSignal: true,
2900
+ alias: "initials",
2901
+ required: false
2902
+ }]
2903
+ }],
2904
+ icon: [{
2905
+ type: i0.Input,
2906
+ args: [{
2907
+ isSignal: true,
2908
+ alias: "icon",
2909
+ required: false
2910
+ }]
2911
+ }],
2912
+ compact: [{
2913
+ type: i0.Input,
2914
+ args: [{
2915
+ isSignal: true,
2916
+ alias: "compact",
2917
+ required: false
2918
+ }]
2919
+ }],
2920
+ class: [{
2921
+ type: i0.Input,
2922
+ args: [{
2923
+ isSignal: true,
2924
+ alias: "class",
2925
+ required: false
2926
+ }]
2927
+ }]
2928
+ }
2929
+ });
2930
+ var NavigationHeaderTitleComponent = class NavigationHeaderTitleComponent {
2931
+ shell = inject(NAVIGATION_SHELL, { optional: true });
2932
+ title = input("", ...ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []);
2933
+ subtitle = input(null, ...ngDevMode ? [{ debugName: "subtitle" }] : /* istanbul ignore next */ []);
2934
+ class = input("", {
2935
+ ...ngDevMode ? { debugName: "class" } : /* istanbul ignore next */ {},
2936
+ alias: "class"
2937
+ });
2938
+ collapsed = computed(() => {
2939
+ const state = this.shell?.displayState();
2940
+ return state ? state.orientation === "vertical" && state.collapsed : false;
2941
+ }, ...ngDevMode ? [{ debugName: "collapsed" }] : /* istanbul ignore next */ []);
2942
+ hostClasses = computed(() => cn(this.collapsed() ? "hidden" : "flex min-w-0 flex-col justify-center", this.class()), ...ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []);
2943
+ static ɵfac = i0.ɵɵngDeclareFactory({
2944
+ minVersion: "12.0.0",
2945
+ version: "22.2.0",
2946
+ ngImport: i0,
2947
+ type: NavigationHeaderTitleComponent,
2948
+ deps: [],
2949
+ target: i0.ɵɵFactoryTarget.Component
2950
+ });
2951
+ static ɵcmp = i0.ɵɵngDeclareComponent({
2952
+ minVersion: "17.0.0",
2953
+ version: "22.2.0",
2954
+ type: NavigationHeaderTitleComponent,
2955
+ isStandalone: true,
2956
+ selector: "NavigationHeaderTitle",
2957
+ inputs: {
2958
+ title: {
2959
+ classPropertyName: "title",
2960
+ publicName: "title",
2961
+ isSignal: true,
2962
+ isRequired: false,
2963
+ transformFunction: null
2964
+ },
2965
+ subtitle: {
2966
+ classPropertyName: "subtitle",
2967
+ publicName: "subtitle",
2968
+ isSignal: true,
2969
+ isRequired: false,
2970
+ transformFunction: null
2971
+ },
2972
+ class: {
2973
+ classPropertyName: "class",
2974
+ publicName: "class",
2975
+ isSignal: true,
2976
+ isRequired: false,
2977
+ transformFunction: null
2978
+ }
2979
+ },
2980
+ host: { properties: {
2981
+ "class": "hostClasses()",
2982
+ "attr.data-collapsed": "collapsed()"
2983
+ } },
2984
+ ngImport: i0,
2985
+ template: `
2986
+ <span class="nav-text block truncate text-foreground">{{ title() }}</span>
2987
+ @if (subtitle(); as sub) {
2988
+ <span
2989
+ class="nav-subtitle block truncate text-muted-foreground"
2990
+ data-navigation-sidebar-subtitle
2991
+ >
2992
+ {{ sub }}
2993
+ </span>
2994
+ }
2995
+ `,
2996
+ isInline: true
2997
+ });
2998
+ };
2999
+ i0.ɵɵngDeclareClassMetadata({
3000
+ minVersion: "12.0.0",
3001
+ version: "22.2.0",
3002
+ ngImport: i0,
3003
+ type: NavigationHeaderTitleComponent,
3004
+ decorators: [{
3005
+ type: Component,
3006
+ args: [{
3007
+ selector: "NavigationHeaderTitle",
3008
+ host: {
3009
+ "[class]": "hostClasses()",
3010
+ "[attr.data-collapsed]": "collapsed()"
3011
+ },
3012
+ template: `
3013
+ <span class="nav-text block truncate text-foreground">{{ title() }}</span>
3014
+ @if (subtitle(); as sub) {
3015
+ <span
3016
+ class="nav-subtitle block truncate text-muted-foreground"
3017
+ data-navigation-sidebar-subtitle
3018
+ >
3019
+ {{ sub }}
3020
+ </span>
3021
+ }
3022
+ `
3023
+ }]
3024
+ }],
3025
+ propDecorators: {
3026
+ title: [{
3027
+ type: i0.Input,
3028
+ args: [{
3029
+ isSignal: true,
3030
+ alias: "title",
3031
+ required: false
3032
+ }]
3033
+ }],
3034
+ subtitle: [{
3035
+ type: i0.Input,
3036
+ args: [{
3037
+ isSignal: true,
3038
+ alias: "subtitle",
3039
+ required: false
3040
+ }]
3041
+ }],
3042
+ class: [{
3043
+ type: i0.Input,
3044
+ args: [{
3045
+ isSignal: true,
3046
+ alias: "class",
3047
+ required: false
3048
+ }]
3049
+ }]
3050
+ }
3051
+ });
3052
+ export { NAVIGATION_DOCKBAR_FALLBACK_ICON, NavigationAsideFooterDirective, NavigationCollapseExpandedDirective, NavigationCollapseRootDirective, NavigationContainerComponent, NavigationContentComponent, NavigationDockbarComponent, NavigationFlyoutComponent, NavigationFooterActionComponent, NavigationFooterComponent, NavigationFooterInitialComponent, NavigationFooterTitleComponent, NavigationHeaderComponent, NavigationHeaderInitialComponent, NavigationHeaderTitleComponent, NavigationIconDirective, NavigationNavbarComponent, NavigationSidebarComponent, deriveNavigationInitials, formatNavigationBadgeCount, normalizeUiNavItems };