@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,115 +1,211 @@
1
- import * as i0 from '@angular/core';
2
- import { signal, Service, input, booleanAttribute, Component, output, computed, model, inject, viewChild, effect } from '@angular/core';
3
- import { NavigationHeaderInitialComponent, NavigationHeaderTitleComponent, NavigationFooterActionComponent, NavigationFooterInitialComponent, NavigationFooterTitleComponent, NavigationSidebarComponent, NavigationHeaderComponent, NavigationFooterComponent, NavigationAsideFooterDirective, NavigationDockbarComponent, NavigationNavbarComponent, NavigationFlyoutComponent, NavigationContainerComponent } from '@ojiepermana/angular/navigation';
4
- import { IconComponent } from '@ojiepermana/angular/component/icon';
5
- import { ThemeSettingsComponent } from '@ojiepermana/angular/theme/component/settings';
6
- import { DOCUMENT, NgTemplateOutlet } from '@angular/common';
7
- import { cn } from '@ojiepermana/angular/component/utils/core';
8
- import { LayoutComponent, LayoutVerticalComponent, LayoutHorizontalComponent, LayoutEmptyComponent, LayoutFluidComponent, LayoutNavigationComponent, LayoutContentComponent } from '@ojiepermana/angular/theme/layout';
9
- import { LAYOUT_DEFAULT_SURFACE, LAYOUT_DEFAULT_APPEARANCE, LAYOUT_DEFAULT_WIDTH, LAYOUT_DEFAULT_TYPE } from '@ojiepermana/angular/theme/layout/types';
10
- import { NAVIGATION_ADAPTER } from '@ojiepermana/angular/navigation/core';
11
-
12
- /**
13
- * The identity shape the layout wrappers consume. The library defines the structure
14
- * only; the concrete brand and user values come from the consumer as inputs.
15
- */
16
-
17
- /** Registry key used only while `LayoutWrapperDefault` renders its desktop nav. */
18
- const LAYOUT_DESKTOP_NAVIGATION_DATA_ID = '__layout-desktop-navigation';
19
- /**
20
- * Registry of the brand and user identity a shell publishes (`LayoutWrapperDefault`, for
21
- * one). Other surfaces — the apps launcher in `Page`, say — read it so they show the same
22
- * brand and user as the nav flyout without taking inputs of their own.
23
- */
24
- class LayoutIdentityService {
25
- brandState = signal(null, /* @ts-ignore */
26
- ...(ngDevMode ? [{ debugName: "brandState" }] : /* istanbul ignore next */ []));
27
- userState = signal(null, /* @ts-ignore */
28
- ...(ngDevMode ? [{ debugName: "userState" }] : /* istanbul ignore next */ []));
29
- brand = this.brandState.asReadonly();
30
- user = this.userState.asReadonly();
31
- setBrand(brand) {
32
- this.brandState.set(brand);
33
- }
34
- setUser(user) {
35
- this.userState.set(user);
36
- }
37
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutIdentityService, deps: [], target: i0.ɵɵFactoryTarget.Service });
38
- static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.4", ngImport: i0, type: LayoutIdentityService });
39
- }
40
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutIdentityService, decorators: [{
41
- type: Service
42
- }] });
43
-
44
- /**
45
- * The brand slot for `<NavigationHeader>`: initials or logo plus a title. Purely
46
- * input-driven.
47
- *
48
- * `compact` (dockbar, or an icon-only rail) hides the title. `host.class = 'contents'`
49
- * keeps `NavigationHeaderInitial` and `NavigationHeaderTitle` as direct flex children of
50
- * the header row; the title still auto-hides on a collapsed sidebar, because
51
- * `NAVIGATION_SHELL` reaches `<Navigation>` through the live injector tree.
52
- */
53
- class LayoutBrand {
54
- /** Identitas brand (nama, ikon, judul, subjudul). */
55
- brand = input.required(/* @ts-ignore */
56
- ...(ngDevMode ? [{ debugName: "brand" }] : /* istanbul ignore next */ []));
57
- /** Sembunyikan judul, sisakan inisial saja (dockbar / rail ikon-only). */
58
- compact = input(false, { ...(ngDevMode ? { debugName: "compact" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
59
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutBrand, deps: [], target: i0.ɵɵFactoryTarget.Component });
60
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: LayoutBrand, isStandalone: true, selector: "LayoutBrand", inputs: { brand: { classPropertyName: "brand", publicName: "brand", isSignal: true, isRequired: true, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "contents" }, ngImport: i0, template: `
1
+ import * as i0 from "@angular/core";
2
+ import { Component, Service, booleanAttribute, computed, effect, inject, input, model, output, signal, viewChild } from "@angular/core";
3
+ import { NavigationAsideFooterDirective, NavigationContainerComponent, NavigationDockbarComponent, NavigationFlyoutComponent, NavigationFooterActionComponent, NavigationFooterComponent, NavigationFooterInitialComponent, NavigationFooterTitleComponent, NavigationHeaderComponent, NavigationHeaderInitialComponent, NavigationHeaderTitleComponent, NavigationNavbarComponent, NavigationSidebarComponent } from "@ojiepermana/angular/navigation";
4
+ import { IconComponent } from "@ojiepermana/angular/component/icon";
5
+ import { ThemeSettingsComponent } from "@ojiepermana/angular/theme/component/settings";
6
+ import { DOCUMENT, NgTemplateOutlet } from "@angular/common";
7
+ import { cn } from "@ojiepermana/angular/component/utils/core";
8
+ import { LayoutComponent, LayoutContentComponent, LayoutEmptyComponent, LayoutFluidComponent, LayoutHorizontalComponent, LayoutNavigationComponent, LayoutVerticalComponent } from "@ojiepermana/angular/theme/layout";
9
+ import { LAYOUT_DEFAULT_APPEARANCE, LAYOUT_DEFAULT_SURFACE, LAYOUT_DEFAULT_TYPE, LAYOUT_DEFAULT_WIDTH } from "@ojiepermana/angular/theme/layout/types";
10
+ import { NAVIGATION_ADAPTER } from "@ojiepermana/angular/navigation/core";
11
+ const LAYOUT_DESKTOP_NAVIGATION_DATA_ID = "__layout-desktop-navigation";
12
+ var LayoutIdentityService = class LayoutIdentityService {
13
+ brandState = signal(null, ...ngDevMode ? [{ debugName: "brandState" }] : /* istanbul ignore next */ []);
14
+ userState = signal(null, ...ngDevMode ? [{ debugName: "userState" }] : /* istanbul ignore next */ []);
15
+ brand = this.brandState.asReadonly();
16
+ user = this.userState.asReadonly();
17
+ setBrand(brand) {
18
+ this.brandState.set(brand);
19
+ }
20
+ setUser(user) {
21
+ this.userState.set(user);
22
+ }
23
+ static ɵfac = i0.ɵɵngDeclareFactory({
24
+ minVersion: "12.0.0",
25
+ version: "22.2.0",
26
+ ngImport: i0,
27
+ type: LayoutIdentityService,
28
+ deps: [],
29
+ target: i0.ɵɵFactoryTarget.Service
30
+ });
31
+ static ɵprov = i0.ɵɵngDeclareService({
32
+ minVersion: "22.0.0",
33
+ version: "22.2.0",
34
+ ngImport: i0,
35
+ type: LayoutIdentityService
36
+ });
37
+ };
38
+ i0.ɵɵngDeclareClassMetadata({
39
+ minVersion: "12.0.0",
40
+ version: "22.2.0",
41
+ ngImport: i0,
42
+ type: LayoutIdentityService,
43
+ decorators: [{ type: Service }]
44
+ });
45
+ var LayoutBrand = class LayoutBrand {
46
+ brand = input.required(...ngDevMode ? [{ debugName: "brand" }] : /* istanbul ignore next */ []);
47
+ compact = input(false, {
48
+ ...ngDevMode ? { debugName: "compact" } : /* istanbul ignore next */ {},
49
+ transform: booleanAttribute
50
+ });
51
+ static ɵfac = i0.ɵɵngDeclareFactory({
52
+ minVersion: "12.0.0",
53
+ version: "22.2.0",
54
+ ngImport: i0,
55
+ type: LayoutBrand,
56
+ deps: [],
57
+ target: i0.ɵɵFactoryTarget.Component
58
+ });
59
+ static ɵcmp = i0.ɵɵngDeclareComponent({
60
+ minVersion: "17.0.0",
61
+ version: "22.2.0",
62
+ type: LayoutBrand,
63
+ isStandalone: true,
64
+ selector: "LayoutBrand",
65
+ inputs: {
66
+ brand: {
67
+ classPropertyName: "brand",
68
+ publicName: "brand",
69
+ isSignal: true,
70
+ isRequired: true,
71
+ transformFunction: null
72
+ },
73
+ compact: {
74
+ classPropertyName: "compact",
75
+ publicName: "compact",
76
+ isSignal: true,
77
+ isRequired: false,
78
+ transformFunction: null
79
+ }
80
+ },
81
+ host: { classAttribute: "contents" },
82
+ ngImport: i0,
83
+ template: `
61
84
  <NavigationHeaderInitial [name]="brand().name" [icon]="brand().icon" [compact]="compact()" />
62
85
  @if (!compact()) {
63
86
  <NavigationHeaderTitle [title]="brand().title" [subtitle]="brand().subtitle" />
64
87
  }
65
- `, isInline: true, dependencies: [{ kind: "component", type: NavigationHeaderInitialComponent, selector: "NavigationHeaderInitial", inputs: ["name", "src", "initials", "icon", "compact", "class"] }, { kind: "component", type: NavigationHeaderTitleComponent, selector: "NavigationHeaderTitle", inputs: ["title", "subtitle", "class"] }] });
66
- }
67
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutBrand, decorators: [{
68
- type: Component,
69
- args: [{
70
- selector: 'LayoutBrand',
71
- imports: [NavigationHeaderInitialComponent, NavigationHeaderTitleComponent],
72
- host: { class: 'contents' },
73
- template: `
88
+ `,
89
+ isInline: true,
90
+ dependencies: [{
91
+ kind: "component",
92
+ type: NavigationHeaderInitialComponent,
93
+ selector: "NavigationHeaderInitial",
94
+ inputs: [
95
+ "name",
96
+ "src",
97
+ "initials",
98
+ "icon",
99
+ "compact",
100
+ "class"
101
+ ]
102
+ }, {
103
+ kind: "component",
104
+ type: NavigationHeaderTitleComponent,
105
+ selector: "NavigationHeaderTitle",
106
+ inputs: [
107
+ "title",
108
+ "subtitle",
109
+ "class"
110
+ ]
111
+ }]
112
+ });
113
+ };
114
+ i0.ɵɵngDeclareClassMetadata({
115
+ minVersion: "12.0.0",
116
+ version: "22.2.0",
117
+ ngImport: i0,
118
+ type: LayoutBrand,
119
+ decorators: [{
120
+ type: Component,
121
+ args: [{
122
+ selector: "LayoutBrand",
123
+ imports: [NavigationHeaderInitialComponent, NavigationHeaderTitleComponent],
124
+ host: { class: "contents" },
125
+ template: `
74
126
  <NavigationHeaderInitial [name]="brand().name" [icon]="brand().icon" [compact]="compact()" />
75
127
  @if (!compact()) {
76
128
  <NavigationHeaderTitle [title]="brand().title" [subtitle]="brand().subtitle" />
77
129
  }
78
- `,
79
- }]
80
- }], propDecorators: { brand: [{ type: i0.Input, args: [{ isSignal: true, alias: "brand", required: true }] }], compact: [{ type: i0.Input, args: [{ isSignal: true, alias: "compact", required: false }] }] } });
81
-
82
- /**
83
- * The user slot for `<NavigationFooter>`: an optional identity plus the logout action.
84
- * Purely input-driven.
85
- *
86
- * `detailed` shows initials and name (a full sidebar); without it, only the logout
87
- * button. `host.class = 'contents'` makes the children direct flex children of the
88
- * footer, so `ml-auto` and the auto-hide on collapse (through `NAVIGATION_SHELL`) still
89
- * apply.
90
- *
91
- * The logout button only emits `(logout)`. Endpoint, cookie, and redirect target differ
92
- * per application, so the effect is entirely the consumer's — the library calls no
93
- * endpoint and performs no navigation. A consumer that never binds `(logout)` still
94
- * renders without error; the button simply does nothing, exactly as before this output
95
- * existed.
96
- */
97
- class LayoutUser {
98
- /** Identitas user (nama + email). */
99
- user = input.required(/* @ts-ignore */
100
- ...(ngDevMode ? [{ debugName: "user" }] : /* istanbul ignore next */ []));
101
- /** Show the user identity (initials and name), not only the logout button. */
102
- detailed = input(false, { ...(ngDevMode ? { debugName: "detailed" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
103
- /** Accessible name for the logout button. */
104
- logoutLabel = input('Logout', /* @ts-ignore */
105
- ...(ngDevMode ? [{ debugName: "logoutLabel" }] : /* istanbul ignore next */ []));
106
- /** Material symbol for the logout button. */
107
- logoutIcon = input('logout', /* @ts-ignore */
108
- ...(ngDevMode ? [{ debugName: "logoutIcon" }] : /* istanbul ignore next */ []));
109
- /** The user pressed logout. The effect is the consumer's; the library does not navigate. */
110
- logout = output();
111
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutUser, deps: [], target: i0.ɵɵFactoryTarget.Component });
112
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: LayoutUser, isStandalone: true, selector: "LayoutUser", inputs: { user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: true, transformFunction: null }, detailed: { classPropertyName: "detailed", publicName: "detailed", isSignal: true, isRequired: false, transformFunction: null }, logoutLabel: { classPropertyName: "logoutLabel", publicName: "logoutLabel", isSignal: true, isRequired: false, transformFunction: null }, logoutIcon: { classPropertyName: "logoutIcon", publicName: "logoutIcon", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { logout: "logout" }, host: { classAttribute: "contents" }, ngImport: i0, template: `
130
+ `
131
+ }]
132
+ }],
133
+ propDecorators: {
134
+ brand: [{
135
+ type: i0.Input,
136
+ args: [{
137
+ isSignal: true,
138
+ alias: "brand",
139
+ required: true
140
+ }]
141
+ }],
142
+ compact: [{
143
+ type: i0.Input,
144
+ args: [{
145
+ isSignal: true,
146
+ alias: "compact",
147
+ required: false
148
+ }]
149
+ }]
150
+ }
151
+ });
152
+ var LayoutUser = class LayoutUser {
153
+ user = input.required(...ngDevMode ? [{ debugName: "user" }] : /* istanbul ignore next */ []);
154
+ detailed = input(false, {
155
+ ...ngDevMode ? { debugName: "detailed" } : /* istanbul ignore next */ {},
156
+ transform: booleanAttribute
157
+ });
158
+ logoutLabel = input("Logout", ...ngDevMode ? [{ debugName: "logoutLabel" }] : /* istanbul ignore next */ []);
159
+ logoutIcon = input("logout", ...ngDevMode ? [{ debugName: "logoutIcon" }] : /* istanbul ignore next */ []);
160
+ logout = output();
161
+ static ɵfac = i0.ɵɵngDeclareFactory({
162
+ minVersion: "12.0.0",
163
+ version: "22.2.0",
164
+ ngImport: i0,
165
+ type: LayoutUser,
166
+ deps: [],
167
+ target: i0.ɵɵFactoryTarget.Component
168
+ });
169
+ static ɵcmp = i0.ɵɵngDeclareComponent({
170
+ minVersion: "17.0.0",
171
+ version: "22.2.0",
172
+ type: LayoutUser,
173
+ isStandalone: true,
174
+ selector: "LayoutUser",
175
+ inputs: {
176
+ user: {
177
+ classPropertyName: "user",
178
+ publicName: "user",
179
+ isSignal: true,
180
+ isRequired: true,
181
+ transformFunction: null
182
+ },
183
+ detailed: {
184
+ classPropertyName: "detailed",
185
+ publicName: "detailed",
186
+ isSignal: true,
187
+ isRequired: false,
188
+ transformFunction: null
189
+ },
190
+ logoutLabel: {
191
+ classPropertyName: "logoutLabel",
192
+ publicName: "logoutLabel",
193
+ isSignal: true,
194
+ isRequired: false,
195
+ transformFunction: null
196
+ },
197
+ logoutIcon: {
198
+ classPropertyName: "logoutIcon",
199
+ publicName: "logoutIcon",
200
+ isSignal: true,
201
+ isRequired: false,
202
+ transformFunction: null
203
+ }
204
+ },
205
+ outputs: { logout: "logout" },
206
+ host: { classAttribute: "contents" },
207
+ ngImport: i0,
208
+ template: `
113
209
  @if (detailed()) {
114
210
  <NavigationFooterInitial [name]="user().name" />
115
211
  <NavigationFooterTitle class="flex-1" [title]="user().name" [subtitle]="user().email" />
@@ -127,21 +223,87 @@ class LayoutUser {
127
223
  </button>
128
224
  <ThemeSettings [trigger-icon-only]="true" class="size-8! min-h-8!" />
129
225
  </NavigationFooterAction>
130
- `, isInline: true, dependencies: [{ kind: "component", type: IconComponent, selector: "Icon", inputs: ["name", "class", "size", "fill", "weight", "grade", "opticalSize"] }, { kind: "component", type: ThemeSettingsComponent, selector: "ThemeSettings", inputs: ["open", "trigger", "triggerLabel", "trigger-icon-only", "show-trigger", "side", "class"], outputs: ["openChange"] }, { kind: "component", type: NavigationFooterActionComponent, selector: "NavigationFooterAction", inputs: ["class"] }, { kind: "component", type: NavigationFooterInitialComponent, selector: "NavigationFooterInitial", inputs: ["name", "src", "initials", "icon", "class"] }, { kind: "component", type: NavigationFooterTitleComponent, selector: "NavigationFooterTitle", inputs: ["title", "subtitle", "class"] }] });
131
- }
132
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutUser, decorators: [{
133
- type: Component,
134
- args: [{
135
- selector: 'LayoutUser',
136
- imports: [
137
- IconComponent,
138
- ThemeSettingsComponent,
139
- NavigationFooterActionComponent,
140
- NavigationFooterInitialComponent,
141
- NavigationFooterTitleComponent,
142
- ],
143
- host: { class: 'contents' },
144
- template: `
226
+ `,
227
+ isInline: true,
228
+ dependencies: [
229
+ {
230
+ kind: "component",
231
+ type: IconComponent,
232
+ selector: "Icon",
233
+ inputs: [
234
+ "name",
235
+ "class",
236
+ "size",
237
+ "fill",
238
+ "weight",
239
+ "grade",
240
+ "opticalSize"
241
+ ]
242
+ },
243
+ {
244
+ kind: "component",
245
+ type: ThemeSettingsComponent,
246
+ selector: "ThemeSettings",
247
+ inputs: [
248
+ "open",
249
+ "trigger",
250
+ "triggerLabel",
251
+ "trigger-icon-only",
252
+ "show-trigger",
253
+ "side",
254
+ "class"
255
+ ],
256
+ outputs: ["openChange"]
257
+ },
258
+ {
259
+ kind: "component",
260
+ type: NavigationFooterActionComponent,
261
+ selector: "NavigationFooterAction",
262
+ inputs: ["class"]
263
+ },
264
+ {
265
+ kind: "component",
266
+ type: NavigationFooterInitialComponent,
267
+ selector: "NavigationFooterInitial",
268
+ inputs: [
269
+ "name",
270
+ "src",
271
+ "initials",
272
+ "icon",
273
+ "class"
274
+ ]
275
+ },
276
+ {
277
+ kind: "component",
278
+ type: NavigationFooterTitleComponent,
279
+ selector: "NavigationFooterTitle",
280
+ inputs: [
281
+ "title",
282
+ "subtitle",
283
+ "class"
284
+ ]
285
+ }
286
+ ]
287
+ });
288
+ };
289
+ i0.ɵɵngDeclareClassMetadata({
290
+ minVersion: "12.0.0",
291
+ version: "22.2.0",
292
+ ngImport: i0,
293
+ type: LayoutUser,
294
+ decorators: [{
295
+ type: Component,
296
+ args: [{
297
+ selector: "LayoutUser",
298
+ imports: [
299
+ IconComponent,
300
+ ThemeSettingsComponent,
301
+ NavigationFooterActionComponent,
302
+ NavigationFooterInitialComponent,
303
+ NavigationFooterTitleComponent
304
+ ],
305
+ host: { class: "contents" },
306
+ template: `
145
307
  @if (detailed()) {
146
308
  <NavigationFooterInitial [name]="user().name" />
147
309
  <NavigationFooterTitle class="flex-1" [title]="user().name" [subtitle]="user().email" />
@@ -159,48 +321,108 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
159
321
  </button>
160
322
  <ThemeSettings [trigger-icon-only]="true" class="size-8! min-h-8!" />
161
323
  </NavigationFooterAction>
162
- `,
163
- }]
164
- }], propDecorators: { user: [{ type: i0.Input, args: [{ isSignal: true, alias: "user", required: true }] }], detailed: [{ type: i0.Input, args: [{ isSignal: true, alias: "detailed", required: false }] }], logoutLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "logoutLabel", required: false }] }], logoutIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "logoutIcon", required: false }] }], logout: [{ type: i0.Output, args: ["logout"] }] } });
165
-
166
- /**
167
- * Nav type: a collapsible vertical sidebar (the default). Brand in the header, user
168
- * identity in the footer.
169
- *
170
- * Horizontal dividers: the sidebar ALWAYS uses the borders `NavigationHeader`
171
- * (`border-b`) and `NavigationFooter` (`border-t`) bring, `border-rail` included.
172
- * Layout's inset accent rail (`top-12`/`bottom-12`) sits behind a frame that is now
173
- * solid (`bg-background`) and is therefore invisible inside it; those explicit borders
174
- * are what keep the header and footer lines visible and running straight into the
175
- * content column (both `h-12`), consistent with {@link LayoutNavDockbar}.
176
- *
177
- * `host.class = 'contents'` makes `<NavigationSidebar>` an effective child of
178
- * `<Navigation>` (h-full, shell classes), while `NAVIGATION_SHELL` still reaches it
179
- * through the live injector tree and `<NavigationHeader>` stays a direct child for the
180
- * library's content projection.
181
- */
182
- class LayoutNavSidebar {
183
- brand = input.required(/* @ts-ignore */
184
- ...(ngDevMode ? [{ debugName: "brand" }] : /* istanbul ignore next */ []));
185
- user = input.required(/* @ts-ignore */
186
- ...(ngDevMode ? [{ debugName: "user" }] : /* istanbul ignore next */ []));
187
- /** Appearance from the shell (`[appearance]`); decides the separator border weight. */
188
- appearance = input('flat', /* @ts-ignore */
189
- ...(ngDevMode ? [{ debugName: "appearance" }] : /* istanbul ignore next */ []));
190
- navTypeMode = input('default', { ...(ngDevMode ? { debugName: "navTypeMode" } : /* istanbul ignore next */ {}), alias: 'nav-type-mode' });
191
- /** Forwarded from `<LayoutUser>`; the effect is the consumer's. */
192
- logout = output();
193
- isBorderRail = computed(() => this.appearance() === 'border-rail', /* @ts-ignore */
194
- ...(ngDevMode ? [{ debugName: "isBorderRail" }] : /* istanbul ignore next */ []));
195
- isCollapsed = computed(() => this.navTypeMode() === 'collapsed', /* @ts-ignore */
196
- ...(ngDevMode ? [{ debugName: "isCollapsed" }] : /* istanbul ignore next */ []));
197
- /** Border kanan pemisah; ketebalan ikut appearance: `border-rail` = `--layout-rail-width` (selaras rail layout), `flat` 1px. */
198
- shellClass = computed(() => this.isBorderRail()
199
- ? 'border-r-[length:var(--layout-rail-width)] border-border'
200
- : 'border-r border-border', /* @ts-ignore */
201
- ...(ngDevMode ? [{ debugName: "shellClass" }] : /* istanbul ignore next */ []));
202
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutNavSidebar, deps: [], target: i0.ɵɵFactoryTarget.Component });
203
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: LayoutNavSidebar, isStandalone: true, selector: "LayoutNavSidebar", inputs: { brand: { classPropertyName: "brand", publicName: "brand", isSignal: true, isRequired: true, transformFunction: null }, user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: true, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, navTypeMode: { classPropertyName: "navTypeMode", publicName: "nav-type-mode", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { logout: "logout" }, host: { classAttribute: "contents" }, ngImport: i0, template: `
324
+ `
325
+ }]
326
+ }],
327
+ propDecorators: {
328
+ user: [{
329
+ type: i0.Input,
330
+ args: [{
331
+ isSignal: true,
332
+ alias: "user",
333
+ required: true
334
+ }]
335
+ }],
336
+ detailed: [{
337
+ type: i0.Input,
338
+ args: [{
339
+ isSignal: true,
340
+ alias: "detailed",
341
+ required: false
342
+ }]
343
+ }],
344
+ logoutLabel: [{
345
+ type: i0.Input,
346
+ args: [{
347
+ isSignal: true,
348
+ alias: "logoutLabel",
349
+ required: false
350
+ }]
351
+ }],
352
+ logoutIcon: [{
353
+ type: i0.Input,
354
+ args: [{
355
+ isSignal: true,
356
+ alias: "logoutIcon",
357
+ required: false
358
+ }]
359
+ }],
360
+ logout: [{
361
+ type: i0.Output,
362
+ args: ["logout"]
363
+ }]
364
+ }
365
+ });
366
+ var LayoutNavSidebar = class LayoutNavSidebar {
367
+ brand = input.required(...ngDevMode ? [{ debugName: "brand" }] : /* istanbul ignore next */ []);
368
+ user = input.required(...ngDevMode ? [{ debugName: "user" }] : /* istanbul ignore next */ []);
369
+ appearance = input("flat", ...ngDevMode ? [{ debugName: "appearance" }] : /* istanbul ignore next */ []);
370
+ navTypeMode = input("default", {
371
+ ...ngDevMode ? { debugName: "navTypeMode" } : /* istanbul ignore next */ {},
372
+ alias: "nav-type-mode"
373
+ });
374
+ logout = output();
375
+ isBorderRail = computed(() => this.appearance() === "border-rail", ...ngDevMode ? [{ debugName: "isBorderRail" }] : /* istanbul ignore next */ []);
376
+ isCollapsed = computed(() => this.navTypeMode() === "collapsed", ...ngDevMode ? [{ debugName: "isCollapsed" }] : /* istanbul ignore next */ []);
377
+ shellClass = computed(() => this.isBorderRail() ? "border-r-[length:var(--layout-rail-width)] border-border" : "border-r border-border", ...ngDevMode ? [{ debugName: "shellClass" }] : /* istanbul ignore next */ []);
378
+ static ɵfac = i0.ɵɵngDeclareFactory({
379
+ minVersion: "12.0.0",
380
+ version: "22.2.0",
381
+ ngImport: i0,
382
+ type: LayoutNavSidebar,
383
+ deps: [],
384
+ target: i0.ɵɵFactoryTarget.Component
385
+ });
386
+ static ɵcmp = i0.ɵɵngDeclareComponent({
387
+ minVersion: "17.1.0",
388
+ version: "22.2.0",
389
+ type: LayoutNavSidebar,
390
+ isStandalone: true,
391
+ selector: "LayoutNavSidebar",
392
+ inputs: {
393
+ brand: {
394
+ classPropertyName: "brand",
395
+ publicName: "brand",
396
+ isSignal: true,
397
+ isRequired: true,
398
+ transformFunction: null
399
+ },
400
+ user: {
401
+ classPropertyName: "user",
402
+ publicName: "user",
403
+ isSignal: true,
404
+ isRequired: true,
405
+ transformFunction: null
406
+ },
407
+ appearance: {
408
+ classPropertyName: "appearance",
409
+ publicName: "appearance",
410
+ isSignal: true,
411
+ isRequired: false,
412
+ transformFunction: null
413
+ },
414
+ navTypeMode: {
415
+ classPropertyName: "navTypeMode",
416
+ publicName: "nav-type-mode",
417
+ isSignal: true,
418
+ isRequired: false,
419
+ transformFunction: null
420
+ }
421
+ },
422
+ outputs: { logout: "logout" },
423
+ host: { classAttribute: "contents" },
424
+ ngImport: i0,
425
+ template: `
204
426
  <NavigationSidebar nav-sidebar-collapse [collapsed]="isCollapsed()" [class]="shellClass()">
205
427
  <NavigationHeader>
206
428
  <LayoutBrand [brand]="brand()" />
@@ -209,21 +431,72 @@ class LayoutNavSidebar {
209
431
  <LayoutUser [user]="user()" detailed (logout)="logout.emit()" />
210
432
  </NavigationFooter>
211
433
  </NavigationSidebar>
212
- `, isInline: true, dependencies: [{ kind: "component", type: NavigationSidebarComponent, selector: "NavigationSidebar", inputs: ["position", "collapsed", "nav-sidebar-collapse", "previewExpanded", "class"] }, { kind: "component", type: NavigationHeaderComponent, selector: "NavigationHeader", inputs: ["toggle", "class"] }, { kind: "component", type: NavigationFooterComponent, selector: "NavigationFooter", inputs: ["class"] }, { kind: "component", type: LayoutBrand, selector: "LayoutBrand", inputs: ["brand", "compact"] }, { kind: "component", type: LayoutUser, selector: "LayoutUser", inputs: ["user", "detailed", "logoutLabel", "logoutIcon"], outputs: ["logout"] }] });
213
- }
214
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutNavSidebar, decorators: [{
215
- type: Component,
216
- args: [{
217
- selector: 'LayoutNavSidebar',
218
- imports: [
219
- NavigationSidebarComponent,
220
- NavigationHeaderComponent,
221
- NavigationFooterComponent,
222
- LayoutBrand,
223
- LayoutUser,
224
- ],
225
- host: { class: 'contents' },
226
- template: `
434
+ `,
435
+ isInline: true,
436
+ dependencies: [
437
+ {
438
+ kind: "component",
439
+ type: NavigationSidebarComponent,
440
+ selector: "NavigationSidebar",
441
+ inputs: [
442
+ "position",
443
+ "collapsed",
444
+ "nav-sidebar-collapse",
445
+ "previewExpanded",
446
+ "class"
447
+ ]
448
+ },
449
+ {
450
+ kind: "component",
451
+ type: NavigationHeaderComponent,
452
+ selector: "NavigationHeader",
453
+ inputs: ["toggle", "class"]
454
+ },
455
+ {
456
+ kind: "component",
457
+ type: NavigationFooterComponent,
458
+ selector: "NavigationFooter",
459
+ inputs: ["class"]
460
+ },
461
+ {
462
+ kind: "component",
463
+ type: LayoutBrand,
464
+ selector: "LayoutBrand",
465
+ inputs: ["brand", "compact"]
466
+ },
467
+ {
468
+ kind: "component",
469
+ type: LayoutUser,
470
+ selector: "LayoutUser",
471
+ inputs: [
472
+ "user",
473
+ "detailed",
474
+ "logoutLabel",
475
+ "logoutIcon"
476
+ ],
477
+ outputs: ["logout"]
478
+ }
479
+ ]
480
+ });
481
+ };
482
+ i0.ɵɵngDeclareClassMetadata({
483
+ minVersion: "12.0.0",
484
+ version: "22.2.0",
485
+ ngImport: i0,
486
+ type: LayoutNavSidebar,
487
+ decorators: [{
488
+ type: Component,
489
+ args: [{
490
+ selector: "LayoutNavSidebar",
491
+ imports: [
492
+ NavigationSidebarComponent,
493
+ NavigationHeaderComponent,
494
+ NavigationFooterComponent,
495
+ LayoutBrand,
496
+ LayoutUser
497
+ ],
498
+ host: { class: "contents" },
499
+ template: `
227
500
  <NavigationSidebar nav-sidebar-collapse [collapsed]="isCollapsed()" [class]="shellClass()">
228
501
  <NavigationHeader>
229
502
  <LayoutBrand [brand]="brand()" />
@@ -232,56 +505,135 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
232
505
  <LayoutUser [user]="user()" detailed (logout)="logout.emit()" />
233
506
  </NavigationFooter>
234
507
  </NavigationSidebar>
235
- `,
236
- }]
237
- }], propDecorators: { brand: [{ type: i0.Input, args: [{ isSignal: true, alias: "brand", required: true }] }], user: [{ type: i0.Input, args: [{ isSignal: true, alias: "user", required: true }] }], appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: false }] }], navTypeMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "nav-type-mode", required: false }] }], logout: [{ type: i0.Output, args: ["logout"] }] } });
238
-
508
+ `
509
+ }]
510
+ }],
511
+ propDecorators: {
512
+ brand: [{
513
+ type: i0.Input,
514
+ args: [{
515
+ isSignal: true,
516
+ alias: "brand",
517
+ required: true
518
+ }]
519
+ }],
520
+ user: [{
521
+ type: i0.Input,
522
+ args: [{
523
+ isSignal: true,
524
+ alias: "user",
525
+ required: true
526
+ }]
527
+ }],
528
+ appearance: [{
529
+ type: i0.Input,
530
+ args: [{
531
+ isSignal: true,
532
+ alias: "appearance",
533
+ required: false
534
+ }]
535
+ }],
536
+ navTypeMode: [{
537
+ type: i0.Input,
538
+ args: [{
539
+ isSignal: true,
540
+ alias: "nav-type-mode",
541
+ required: false
542
+ }]
543
+ }],
544
+ logout: [{
545
+ type: i0.Output,
546
+ args: ["logout"]
547
+ }]
548
+ }
549
+ });
239
550
  const EMPTY_NAVIGATION_BADGE_CONTEXT$1 = Object.freeze({});
240
- /**
241
- * Nav type: a vertical icon rail (dockbar). A compact brand (initials only) in the
242
- * header, the user's initials in the rail footer (title and actions auto-hide, because
243
- * the rail is always collapsed), and the full identity (name, email, logout) in the
244
- * aside footer — together with the rail initials they form one footer row, like an
245
- * expanded sidebar.
246
- *
247
- * Horizontal dividers: unlike the sidebar, which leaves the separator to Layout's inset
248
- * accent rail at `top-12`/`bottom-12` under `border-rail`, the dockbar ALWAYS uses the
249
- * borders `NavigationHeader`/`NavigationFooter` bring. The dockbar aside covers the inset
250
- * rail line with its own opaque background, so those explicit borders are what keep the
251
- * separator running straight from rail to aside (header and footer are both `h-12`).
252
- * See {@link LayoutNavSidebar} for why `host.class = 'contents'`.
253
- */
254
- class LayoutNavDockbar {
255
- brand = input.required(/* @ts-ignore */
256
- ...(ngDevMode ? [{ debugName: "brand" }] : /* istanbul ignore next */ []));
257
- user = input.required(/* @ts-ignore */
258
- ...(ngDevMode ? [{ debugName: "user" }] : /* istanbul ignore next */ []));
259
- /** Appearance from the shell (`[appearance]`); decides the separator border weight. */
260
- appearance = input('flat', /* @ts-ignore */
261
- ...(ngDevMode ? [{ debugName: "appearance" }] : /* istanbul ignore next */ []));
262
- navTypeMode = input('default', { ...(ngDevMode ? { debugName: "navTypeMode" } : /* istanbul ignore next */ {}), alias: 'nav-type-mode' });
263
- /** Opt-in route-aware header; ketika aktif, header route menggantikan compact brand. */
264
- dockbarRouteContext = input(null, { ...(ngDevMode ? { debugName: "dockbarRouteContext" } : /* istanbul ignore next */ {}), alias: 'dockbar-route-context' });
265
- /** The generic badge registry forwarded to `NavigationDockbar`. */
266
- dockbarBadgeContext = input(EMPTY_NAVIGATION_BADGE_CONTEXT$1, { ...(ngDevMode ? { debugName: "dockbarBadgeContext" } : /* istanbul ignore next */ {}), alias: 'dockbar-badge' });
267
- /** Forwarded from the rail and aside footer logout buttons; the effect is the consumer's. */
268
- logout = output();
269
- isBorderRail = computed(() => this.appearance() === 'border-rail', /* @ts-ignore */
270
- ...(ngDevMode ? [{ debugName: "isBorderRail" }] : /* istanbul ignore next */ []));
271
- dockbarMode = computed(() => this.navTypeMode() === 'drawer' ? 'drawer' : 'sticky', /* @ts-ignore */
272
- ...(ngDevMode ? [{ debugName: "dockbarMode" }] : /* istanbul ignore next */ []));
273
- routeContextEnabled = computed(() => {
274
- const context = this.dockbarRouteContext();
275
- return context !== null && context !== false;
276
- }, /* @ts-ignore */
277
- ...(ngDevMode ? [{ debugName: "routeContextEnabled" }] : /* istanbul ignore next */ []));
278
- /** Border kanan pemisah; ketebalan ikut appearance: `border-rail` = `--layout-rail-width` (selaras rail layout), `flat` 1px. */
279
- shellClass = computed(() => this.isBorderRail()
280
- ? 'border-r-[length:var(--layout-rail-width)] border-border'
281
- : 'border-r border-border', /* @ts-ignore */
282
- ...(ngDevMode ? [{ debugName: "shellClass" }] : /* istanbul ignore next */ []));
283
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutNavDockbar, deps: [], target: i0.ɵɵFactoryTarget.Component });
284
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: LayoutNavDockbar, isStandalone: true, selector: "LayoutNavDockbar", inputs: { brand: { classPropertyName: "brand", publicName: "brand", isSignal: true, isRequired: true, transformFunction: null }, user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: true, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, navTypeMode: { classPropertyName: "navTypeMode", publicName: "nav-type-mode", isSignal: true, isRequired: false, transformFunction: null }, dockbarRouteContext: { classPropertyName: "dockbarRouteContext", publicName: "dockbar-route-context", isSignal: true, isRequired: false, transformFunction: null }, dockbarBadgeContext: { classPropertyName: "dockbarBadgeContext", publicName: "dockbar-badge", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { logout: "logout" }, host: { classAttribute: "contents" }, ngImport: i0, template: `
551
+ var LayoutNavDockbar = class LayoutNavDockbar {
552
+ brand = input.required(...ngDevMode ? [{ debugName: "brand" }] : /* istanbul ignore next */ []);
553
+ user = input.required(...ngDevMode ? [{ debugName: "user" }] : /* istanbul ignore next */ []);
554
+ appearance = input("flat", ...ngDevMode ? [{ debugName: "appearance" }] : /* istanbul ignore next */ []);
555
+ navTypeMode = input("default", {
556
+ ...ngDevMode ? { debugName: "navTypeMode" } : /* istanbul ignore next */ {},
557
+ alias: "nav-type-mode"
558
+ });
559
+ dockbarRouteContext = input(null, {
560
+ ...ngDevMode ? { debugName: "dockbarRouteContext" } : /* istanbul ignore next */ {},
561
+ alias: "dockbar-route-context"
562
+ });
563
+ dockbarBadgeContext = input(EMPTY_NAVIGATION_BADGE_CONTEXT$1, {
564
+ ...ngDevMode ? { debugName: "dockbarBadgeContext" } : /* istanbul ignore next */ {},
565
+ alias: "dockbar-badge"
566
+ });
567
+ logout = output();
568
+ isBorderRail = computed(() => this.appearance() === "border-rail", ...ngDevMode ? [{ debugName: "isBorderRail" }] : /* istanbul ignore next */ []);
569
+ dockbarMode = computed(() => this.navTypeMode() === "drawer" ? "drawer" : "sticky", ...ngDevMode ? [{ debugName: "dockbarMode" }] : /* istanbul ignore next */ []);
570
+ routeContextEnabled = computed(() => {
571
+ const context = this.dockbarRouteContext();
572
+ return context !== null && context !== false;
573
+ }, ...ngDevMode ? [{ debugName: "routeContextEnabled" }] : /* istanbul ignore next */ []);
574
+ shellClass = computed(() => this.isBorderRail() ? "border-r-[length:var(--layout-rail-width)] border-border" : "border-r border-border", ...ngDevMode ? [{ debugName: "shellClass" }] : /* istanbul ignore next */ []);
575
+ static ɵfac = i0.ɵɵngDeclareFactory({
576
+ minVersion: "12.0.0",
577
+ version: "22.2.0",
578
+ ngImport: i0,
579
+ type: LayoutNavDockbar,
580
+ deps: [],
581
+ target: i0.ɵɵFactoryTarget.Component
582
+ });
583
+ static ɵcmp = i0.ɵɵngDeclareComponent({
584
+ minVersion: "17.0.0",
585
+ version: "22.2.0",
586
+ type: LayoutNavDockbar,
587
+ isStandalone: true,
588
+ selector: "LayoutNavDockbar",
589
+ inputs: {
590
+ brand: {
591
+ classPropertyName: "brand",
592
+ publicName: "brand",
593
+ isSignal: true,
594
+ isRequired: true,
595
+ transformFunction: null
596
+ },
597
+ user: {
598
+ classPropertyName: "user",
599
+ publicName: "user",
600
+ isSignal: true,
601
+ isRequired: true,
602
+ transformFunction: null
603
+ },
604
+ appearance: {
605
+ classPropertyName: "appearance",
606
+ publicName: "appearance",
607
+ isSignal: true,
608
+ isRequired: false,
609
+ transformFunction: null
610
+ },
611
+ navTypeMode: {
612
+ classPropertyName: "navTypeMode",
613
+ publicName: "nav-type-mode",
614
+ isSignal: true,
615
+ isRequired: false,
616
+ transformFunction: null
617
+ },
618
+ dockbarRouteContext: {
619
+ classPropertyName: "dockbarRouteContext",
620
+ publicName: "dockbar-route-context",
621
+ isSignal: true,
622
+ isRequired: false,
623
+ transformFunction: null
624
+ },
625
+ dockbarBadgeContext: {
626
+ classPropertyName: "dockbarBadgeContext",
627
+ publicName: "dockbar-badge",
628
+ isSignal: true,
629
+ isRequired: false,
630
+ transformFunction: null
631
+ }
632
+ },
633
+ outputs: { logout: "logout" },
634
+ host: { classAttribute: "contents" },
635
+ ngImport: i0,
636
+ template: `
285
637
  <NavigationDockbar
286
638
  [mode]="dockbarMode()"
287
639
  [dockbar-route-context]="dockbarRouteContext()"
@@ -318,23 +670,93 @@ class LayoutNavDockbar {
318
670
  </button>
319
671
  </ng-template>
320
672
  </NavigationDockbar>
321
- `, isInline: true, dependencies: [{ kind: "component", type: IconComponent, selector: "Icon", inputs: ["name", "class", "size", "fill", "weight", "grade", "opticalSize"] }, { kind: "directive", type: NavigationAsideFooterDirective, selector: "ng-template[NavigationAsideFooter]" }, { kind: "component", type: NavigationDockbarComponent, selector: "NavigationDockbar", inputs: ["mode", "position", "dockbar-route-context", "dockbar-badge", "class"] }, { kind: "component", type: NavigationHeaderComponent, selector: "NavigationHeader", inputs: ["toggle", "class"] }, { kind: "component", type: NavigationFooterComponent, selector: "NavigationFooter", inputs: ["class"] }, { kind: "component", type: LayoutBrand, selector: "LayoutBrand", inputs: ["brand", "compact"] }, { kind: "component", type: LayoutUser, selector: "LayoutUser", inputs: ["user", "detailed", "logoutLabel", "logoutIcon"], outputs: ["logout"] }] });
322
- }
323
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutNavDockbar, decorators: [{
324
- type: Component,
325
- args: [{
326
- selector: 'LayoutNavDockbar',
327
- imports: [
328
- IconComponent,
329
- NavigationAsideFooterDirective,
330
- NavigationDockbarComponent,
331
- NavigationHeaderComponent,
332
- NavigationFooterComponent,
333
- LayoutBrand,
334
- LayoutUser,
335
- ],
336
- host: { class: 'contents' },
337
- template: `
673
+ `,
674
+ isInline: true,
675
+ dependencies: [
676
+ {
677
+ kind: "component",
678
+ type: IconComponent,
679
+ selector: "Icon",
680
+ inputs: [
681
+ "name",
682
+ "class",
683
+ "size",
684
+ "fill",
685
+ "weight",
686
+ "grade",
687
+ "opticalSize"
688
+ ]
689
+ },
690
+ {
691
+ kind: "directive",
692
+ type: NavigationAsideFooterDirective,
693
+ selector: "ng-template[NavigationAsideFooter]"
694
+ },
695
+ {
696
+ kind: "component",
697
+ type: NavigationDockbarComponent,
698
+ selector: "NavigationDockbar",
699
+ inputs: [
700
+ "mode",
701
+ "position",
702
+ "dockbar-route-context",
703
+ "dockbar-badge",
704
+ "class"
705
+ ]
706
+ },
707
+ {
708
+ kind: "component",
709
+ type: NavigationHeaderComponent,
710
+ selector: "NavigationHeader",
711
+ inputs: ["toggle", "class"]
712
+ },
713
+ {
714
+ kind: "component",
715
+ type: NavigationFooterComponent,
716
+ selector: "NavigationFooter",
717
+ inputs: ["class"]
718
+ },
719
+ {
720
+ kind: "component",
721
+ type: LayoutBrand,
722
+ selector: "LayoutBrand",
723
+ inputs: ["brand", "compact"]
724
+ },
725
+ {
726
+ kind: "component",
727
+ type: LayoutUser,
728
+ selector: "LayoutUser",
729
+ inputs: [
730
+ "user",
731
+ "detailed",
732
+ "logoutLabel",
733
+ "logoutIcon"
734
+ ],
735
+ outputs: ["logout"]
736
+ }
737
+ ]
738
+ });
739
+ };
740
+ i0.ɵɵngDeclareClassMetadata({
741
+ minVersion: "12.0.0",
742
+ version: "22.2.0",
743
+ ngImport: i0,
744
+ type: LayoutNavDockbar,
745
+ decorators: [{
746
+ type: Component,
747
+ args: [{
748
+ selector: "LayoutNavDockbar",
749
+ imports: [
750
+ IconComponent,
751
+ NavigationAsideFooterDirective,
752
+ NavigationDockbarComponent,
753
+ NavigationHeaderComponent,
754
+ NavigationFooterComponent,
755
+ LayoutBrand,
756
+ LayoutUser
757
+ ],
758
+ host: { class: "contents" },
759
+ template: `
338
760
  <NavigationDockbar
339
761
  [mode]="dockbarMode()"
340
762
  [dockbar-route-context]="dockbarRouteContext()"
@@ -371,27 +793,110 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
371
793
  </button>
372
794
  </ng-template>
373
795
  </NavigationDockbar>
374
- `,
375
- }]
376
- }], propDecorators: { brand: [{ type: i0.Input, args: [{ isSignal: true, alias: "brand", required: true }] }], user: [{ type: i0.Input, args: [{ isSignal: true, alias: "user", required: true }] }], appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: false }] }], navTypeMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "nav-type-mode", required: false }] }], dockbarRouteContext: [{ type: i0.Input, args: [{ isSignal: true, alias: "dockbar-route-context", required: false }] }], dockbarBadgeContext: [{ type: i0.Input, args: [{ isSignal: true, alias: "dockbar-badge", required: false }] }], logout: [{ type: i0.Output, args: ["logout"] }] } });
377
-
378
- /**
379
- * Nav type: a top bar with inline items (navbar, horizontal). `appearance` follows the
380
- * shell (`flat | border-rail`). See {@link LayoutNavSidebar} for why
381
- * `host.class = 'contents'`.
382
- */
383
- class LayoutNavNavbar {
384
- brand = input.required(/* @ts-ignore */
385
- ...(ngDevMode ? [{ debugName: "brand" }] : /* istanbul ignore next */ []));
386
- user = input.required(/* @ts-ignore */
387
- ...(ngDevMode ? [{ debugName: "user" }] : /* istanbul ignore next */ []));
388
- /** Appearance from the shell (`[nav-type-style]`). */
389
- appearance = input('flat', /* @ts-ignore */
390
- ...(ngDevMode ? [{ debugName: "appearance" }] : /* istanbul ignore next */ []));
391
- /** Forwarded from `<LayoutUser>`; the effect is the consumer's. */
392
- logout = output();
393
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutNavNavbar, deps: [], target: i0.ɵɵFactoryTarget.Component });
394
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: LayoutNavNavbar, isStandalone: true, selector: "LayoutNavNavbar", inputs: { brand: { classPropertyName: "brand", publicName: "brand", isSignal: true, isRequired: true, transformFunction: null }, user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: true, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { logout: "logout" }, host: { classAttribute: "contents" }, ngImport: i0, template: `
796
+ `
797
+ }]
798
+ }],
799
+ propDecorators: {
800
+ brand: [{
801
+ type: i0.Input,
802
+ args: [{
803
+ isSignal: true,
804
+ alias: "brand",
805
+ required: true
806
+ }]
807
+ }],
808
+ user: [{
809
+ type: i0.Input,
810
+ args: [{
811
+ isSignal: true,
812
+ alias: "user",
813
+ required: true
814
+ }]
815
+ }],
816
+ appearance: [{
817
+ type: i0.Input,
818
+ args: [{
819
+ isSignal: true,
820
+ alias: "appearance",
821
+ required: false
822
+ }]
823
+ }],
824
+ navTypeMode: [{
825
+ type: i0.Input,
826
+ args: [{
827
+ isSignal: true,
828
+ alias: "nav-type-mode",
829
+ required: false
830
+ }]
831
+ }],
832
+ dockbarRouteContext: [{
833
+ type: i0.Input,
834
+ args: [{
835
+ isSignal: true,
836
+ alias: "dockbar-route-context",
837
+ required: false
838
+ }]
839
+ }],
840
+ dockbarBadgeContext: [{
841
+ type: i0.Input,
842
+ args: [{
843
+ isSignal: true,
844
+ alias: "dockbar-badge",
845
+ required: false
846
+ }]
847
+ }],
848
+ logout: [{
849
+ type: i0.Output,
850
+ args: ["logout"]
851
+ }]
852
+ }
853
+ });
854
+ var LayoutNavNavbar = class LayoutNavNavbar {
855
+ brand = input.required(...ngDevMode ? [{ debugName: "brand" }] : /* istanbul ignore next */ []);
856
+ user = input.required(...ngDevMode ? [{ debugName: "user" }] : /* istanbul ignore next */ []);
857
+ appearance = input("flat", ...ngDevMode ? [{ debugName: "appearance" }] : /* istanbul ignore next */ []);
858
+ logout = output();
859
+ static ɵfac = i0.ɵɵngDeclareFactory({
860
+ minVersion: "12.0.0",
861
+ version: "22.2.0",
862
+ ngImport: i0,
863
+ type: LayoutNavNavbar,
864
+ deps: [],
865
+ target: i0.ɵɵFactoryTarget.Component
866
+ });
867
+ static ɵcmp = i0.ɵɵngDeclareComponent({
868
+ minVersion: "17.1.0",
869
+ version: "22.2.0",
870
+ type: LayoutNavNavbar,
871
+ isStandalone: true,
872
+ selector: "LayoutNavNavbar",
873
+ inputs: {
874
+ brand: {
875
+ classPropertyName: "brand",
876
+ publicName: "brand",
877
+ isSignal: true,
878
+ isRequired: true,
879
+ transformFunction: null
880
+ },
881
+ user: {
882
+ classPropertyName: "user",
883
+ publicName: "user",
884
+ isSignal: true,
885
+ isRequired: true,
886
+ transformFunction: null
887
+ },
888
+ appearance: {
889
+ classPropertyName: "appearance",
890
+ publicName: "appearance",
891
+ isSignal: true,
892
+ isRequired: false,
893
+ transformFunction: null
894
+ }
895
+ },
896
+ outputs: { logout: "logout" },
897
+ host: { classAttribute: "contents" },
898
+ ngImport: i0,
899
+ template: `
395
900
  <NavigationNavbar [nav-type-style]="appearance()" class="border-b border-border">
396
901
  <NavigationHeader>
397
902
  <LayoutBrand [brand]="brand()" />
@@ -400,21 +905,70 @@ class LayoutNavNavbar {
400
905
  <LayoutUser [user]="user()" (logout)="logout.emit()" />
401
906
  </NavigationFooter>
402
907
  </NavigationNavbar>
403
- `, isInline: true, dependencies: [{ kind: "component", type: NavigationNavbarComponent, selector: "NavigationNavbar", inputs: ["nav-position", "nav-type-style", "class"] }, { kind: "component", type: NavigationHeaderComponent, selector: "NavigationHeader", inputs: ["toggle", "class"] }, { kind: "component", type: NavigationFooterComponent, selector: "NavigationFooter", inputs: ["class"] }, { kind: "component", type: LayoutBrand, selector: "LayoutBrand", inputs: ["brand", "compact"] }, { kind: "component", type: LayoutUser, selector: "LayoutUser", inputs: ["user", "detailed", "logoutLabel", "logoutIcon"], outputs: ["logout"] }] });
404
- }
405
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutNavNavbar, decorators: [{
406
- type: Component,
407
- args: [{
408
- selector: 'LayoutNavNavbar',
409
- imports: [
410
- NavigationNavbarComponent,
411
- NavigationHeaderComponent,
412
- NavigationFooterComponent,
413
- LayoutBrand,
414
- LayoutUser,
415
- ],
416
- host: { class: 'contents' },
417
- template: `
908
+ `,
909
+ isInline: true,
910
+ dependencies: [
911
+ {
912
+ kind: "component",
913
+ type: NavigationNavbarComponent,
914
+ selector: "NavigationNavbar",
915
+ inputs: [
916
+ "nav-position",
917
+ "nav-type-style",
918
+ "class"
919
+ ]
920
+ },
921
+ {
922
+ kind: "component",
923
+ type: NavigationHeaderComponent,
924
+ selector: "NavigationHeader",
925
+ inputs: ["toggle", "class"]
926
+ },
927
+ {
928
+ kind: "component",
929
+ type: NavigationFooterComponent,
930
+ selector: "NavigationFooter",
931
+ inputs: ["class"]
932
+ },
933
+ {
934
+ kind: "component",
935
+ type: LayoutBrand,
936
+ selector: "LayoutBrand",
937
+ inputs: ["brand", "compact"]
938
+ },
939
+ {
940
+ kind: "component",
941
+ type: LayoutUser,
942
+ selector: "LayoutUser",
943
+ inputs: [
944
+ "user",
945
+ "detailed",
946
+ "logoutLabel",
947
+ "logoutIcon"
948
+ ],
949
+ outputs: ["logout"]
950
+ }
951
+ ]
952
+ });
953
+ };
954
+ i0.ɵɵngDeclareClassMetadata({
955
+ minVersion: "12.0.0",
956
+ version: "22.2.0",
957
+ ngImport: i0,
958
+ type: LayoutNavNavbar,
959
+ decorators: [{
960
+ type: Component,
961
+ args: [{
962
+ selector: "LayoutNavNavbar",
963
+ imports: [
964
+ NavigationNavbarComponent,
965
+ NavigationHeaderComponent,
966
+ NavigationFooterComponent,
967
+ LayoutBrand,
968
+ LayoutUser
969
+ ],
970
+ host: { class: "contents" },
971
+ template: `
418
972
  <NavigationNavbar [nav-type-style]="appearance()" class="border-b border-border">
419
973
  <NavigationHeader>
420
974
  <LayoutBrand [brand]="brand()" />
@@ -423,26 +977,86 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
423
977
  <LayoutUser [user]="user()" (logout)="logout.emit()" />
424
978
  </NavigationFooter>
425
979
  </NavigationNavbar>
426
- `,
427
- }]
428
- }], propDecorators: { brand: [{ type: i0.Input, args: [{ isSignal: true, alias: "brand", required: true }] }], user: [{ type: i0.Input, args: [{ isSignal: true, alias: "user", required: true }] }], appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: false }] }], logout: [{ type: i0.Output, args: ["logout"] }] } });
429
-
430
- /**
431
- * Nav type: a top bar with a flyout trigger button (horizontal). `appearance` follows the
432
- * shell. See {@link LayoutNavSidebar} for why `host.class = 'contents'`.
433
- */
434
- class LayoutNavFlyout {
435
- brand = input.required(/* @ts-ignore */
436
- ...(ngDevMode ? [{ debugName: "brand" }] : /* istanbul ignore next */ []));
437
- user = input.required(/* @ts-ignore */
438
- ...(ngDevMode ? [{ debugName: "user" }] : /* istanbul ignore next */ []));
439
- /** Appearance from the shell (`[nav-type-style]`). */
440
- appearance = input('flat', /* @ts-ignore */
441
- ...(ngDevMode ? [{ debugName: "appearance" }] : /* istanbul ignore next */ []));
442
- /** Forwarded from `<LayoutUser>`; the effect is the consumer's. */
443
- logout = output();
444
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutNavFlyout, deps: [], target: i0.ɵɵFactoryTarget.Component });
445
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: LayoutNavFlyout, isStandalone: true, selector: "LayoutNavFlyout", inputs: { brand: { classPropertyName: "brand", publicName: "brand", isSignal: true, isRequired: true, transformFunction: null }, user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: true, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { logout: "logout" }, host: { classAttribute: "contents" }, ngImport: i0, template: `
980
+ `
981
+ }]
982
+ }],
983
+ propDecorators: {
984
+ brand: [{
985
+ type: i0.Input,
986
+ args: [{
987
+ isSignal: true,
988
+ alias: "brand",
989
+ required: true
990
+ }]
991
+ }],
992
+ user: [{
993
+ type: i0.Input,
994
+ args: [{
995
+ isSignal: true,
996
+ alias: "user",
997
+ required: true
998
+ }]
999
+ }],
1000
+ appearance: [{
1001
+ type: i0.Input,
1002
+ args: [{
1003
+ isSignal: true,
1004
+ alias: "appearance",
1005
+ required: false
1006
+ }]
1007
+ }],
1008
+ logout: [{
1009
+ type: i0.Output,
1010
+ args: ["logout"]
1011
+ }]
1012
+ }
1013
+ });
1014
+ var LayoutNavFlyout = class LayoutNavFlyout {
1015
+ brand = input.required(...ngDevMode ? [{ debugName: "brand" }] : /* istanbul ignore next */ []);
1016
+ user = input.required(...ngDevMode ? [{ debugName: "user" }] : /* istanbul ignore next */ []);
1017
+ appearance = input("flat", ...ngDevMode ? [{ debugName: "appearance" }] : /* istanbul ignore next */ []);
1018
+ logout = output();
1019
+ static ɵfac = i0.ɵɵngDeclareFactory({
1020
+ minVersion: "12.0.0",
1021
+ version: "22.2.0",
1022
+ ngImport: i0,
1023
+ type: LayoutNavFlyout,
1024
+ deps: [],
1025
+ target: i0.ɵɵFactoryTarget.Component
1026
+ });
1027
+ static ɵcmp = i0.ɵɵngDeclareComponent({
1028
+ minVersion: "17.1.0",
1029
+ version: "22.2.0",
1030
+ type: LayoutNavFlyout,
1031
+ isStandalone: true,
1032
+ selector: "LayoutNavFlyout",
1033
+ inputs: {
1034
+ brand: {
1035
+ classPropertyName: "brand",
1036
+ publicName: "brand",
1037
+ isSignal: true,
1038
+ isRequired: true,
1039
+ transformFunction: null
1040
+ },
1041
+ user: {
1042
+ classPropertyName: "user",
1043
+ publicName: "user",
1044
+ isSignal: true,
1045
+ isRequired: true,
1046
+ transformFunction: null
1047
+ },
1048
+ appearance: {
1049
+ classPropertyName: "appearance",
1050
+ publicName: "appearance",
1051
+ isSignal: true,
1052
+ isRequired: false,
1053
+ transformFunction: null
1054
+ }
1055
+ },
1056
+ outputs: { logout: "logout" },
1057
+ host: { classAttribute: "contents" },
1058
+ ngImport: i0,
1059
+ template: `
446
1060
  <NavigationFlyout
447
1061
  [nav-type-style]="appearance()"
448
1062
  label="Menu"
@@ -456,21 +1070,79 @@ class LayoutNavFlyout {
456
1070
  <LayoutUser [user]="user()" (logout)="logout.emit()" />
457
1071
  </NavigationFooter>
458
1072
  </NavigationFlyout>
459
- `, isInline: true, dependencies: [{ kind: "component", type: NavigationFlyoutComponent, selector: "NavigationFlyout", inputs: ["label", "icon", "icon-only", "icon-position", "trigger-variant", "trigger-floating", "panel-viewport", "trigger-class", "trigger-button-class", "nav-position", "nav-type-style", "class"] }, { kind: "component", type: NavigationHeaderComponent, selector: "NavigationHeader", inputs: ["toggle", "class"] }, { kind: "component", type: NavigationFooterComponent, selector: "NavigationFooter", inputs: ["class"] }, { kind: "component", type: LayoutBrand, selector: "LayoutBrand", inputs: ["brand", "compact"] }, { kind: "component", type: LayoutUser, selector: "LayoutUser", inputs: ["user", "detailed", "logoutLabel", "logoutIcon"], outputs: ["logout"] }] });
460
- }
461
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutNavFlyout, decorators: [{
462
- type: Component,
463
- args: [{
464
- selector: 'LayoutNavFlyout',
465
- imports: [
466
- NavigationFlyoutComponent,
467
- NavigationHeaderComponent,
468
- NavigationFooterComponent,
469
- LayoutBrand,
470
- LayoutUser,
471
- ],
472
- host: { class: 'contents' },
473
- template: `
1073
+ `,
1074
+ isInline: true,
1075
+ dependencies: [
1076
+ {
1077
+ kind: "component",
1078
+ type: NavigationFlyoutComponent,
1079
+ selector: "NavigationFlyout",
1080
+ inputs: [
1081
+ "label",
1082
+ "icon",
1083
+ "icon-only",
1084
+ "icon-position",
1085
+ "trigger-variant",
1086
+ "trigger-floating",
1087
+ "panel-viewport",
1088
+ "trigger-class",
1089
+ "trigger-button-class",
1090
+ "nav-position",
1091
+ "nav-type-style",
1092
+ "class"
1093
+ ]
1094
+ },
1095
+ {
1096
+ kind: "component",
1097
+ type: NavigationHeaderComponent,
1098
+ selector: "NavigationHeader",
1099
+ inputs: ["toggle", "class"]
1100
+ },
1101
+ {
1102
+ kind: "component",
1103
+ type: NavigationFooterComponent,
1104
+ selector: "NavigationFooter",
1105
+ inputs: ["class"]
1106
+ },
1107
+ {
1108
+ kind: "component",
1109
+ type: LayoutBrand,
1110
+ selector: "LayoutBrand",
1111
+ inputs: ["brand", "compact"]
1112
+ },
1113
+ {
1114
+ kind: "component",
1115
+ type: LayoutUser,
1116
+ selector: "LayoutUser",
1117
+ inputs: [
1118
+ "user",
1119
+ "detailed",
1120
+ "logoutLabel",
1121
+ "logoutIcon"
1122
+ ],
1123
+ outputs: ["logout"]
1124
+ }
1125
+ ]
1126
+ });
1127
+ };
1128
+ i0.ɵɵngDeclareClassMetadata({
1129
+ minVersion: "12.0.0",
1130
+ version: "22.2.0",
1131
+ ngImport: i0,
1132
+ type: LayoutNavFlyout,
1133
+ decorators: [{
1134
+ type: Component,
1135
+ args: [{
1136
+ selector: "LayoutNavFlyout",
1137
+ imports: [
1138
+ NavigationFlyoutComponent,
1139
+ NavigationHeaderComponent,
1140
+ NavigationFooterComponent,
1141
+ LayoutBrand,
1142
+ LayoutUser
1143
+ ],
1144
+ host: { class: "contents" },
1145
+ template: `
474
1146
  <NavigationFlyout
475
1147
  [nav-type-style]="appearance()"
476
1148
  label="Menu"
@@ -484,206 +1156,396 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
484
1156
  <LayoutUser [user]="user()" (logout)="logout.emit()" />
485
1157
  </NavigationFooter>
486
1158
  </NavigationFlyout>
487
- `,
488
- }]
489
- }], propDecorators: { brand: [{ type: i0.Input, args: [{ isSignal: true, alias: "brand", required: true }] }], user: [{ type: i0.Input, args: [{ isSignal: true, alias: "user", required: true }] }], appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: false }] }], logout: [{ type: i0.Output, args: ["logout"] }] } });
490
-
491
- /**
492
- * Nav type: a brand-only sidebar for the `empty` and `fluid` variants, where
493
- * `LayoutNavigation` hides the nav — so no collapse and no footer. See
494
- * {@link LayoutNavSidebar} for why `host.class = 'contents'`.
495
- */
496
- class LayoutNavMinimal {
497
- brand = input.required(/* @ts-ignore */
498
- ...(ngDevMode ? [{ debugName: "brand" }] : /* istanbul ignore next */ []));
499
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutNavMinimal, deps: [], target: i0.ɵɵFactoryTarget.Component });
500
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: LayoutNavMinimal, isStandalone: true, selector: "LayoutNavMinimal", inputs: { brand: { classPropertyName: "brand", publicName: "brand", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: "contents" }, ngImport: i0, template: `
1159
+ `
1160
+ }]
1161
+ }],
1162
+ propDecorators: {
1163
+ brand: [{
1164
+ type: i0.Input,
1165
+ args: [{
1166
+ isSignal: true,
1167
+ alias: "brand",
1168
+ required: true
1169
+ }]
1170
+ }],
1171
+ user: [{
1172
+ type: i0.Input,
1173
+ args: [{
1174
+ isSignal: true,
1175
+ alias: "user",
1176
+ required: true
1177
+ }]
1178
+ }],
1179
+ appearance: [{
1180
+ type: i0.Input,
1181
+ args: [{
1182
+ isSignal: true,
1183
+ alias: "appearance",
1184
+ required: false
1185
+ }]
1186
+ }],
1187
+ logout: [{
1188
+ type: i0.Output,
1189
+ args: ["logout"]
1190
+ }]
1191
+ }
1192
+ });
1193
+ var LayoutNavMinimal = class LayoutNavMinimal {
1194
+ brand = input.required(...ngDevMode ? [{ debugName: "brand" }] : /* istanbul ignore next */ []);
1195
+ static ɵfac = i0.ɵɵngDeclareFactory({
1196
+ minVersion: "12.0.0",
1197
+ version: "22.2.0",
1198
+ ngImport: i0,
1199
+ type: LayoutNavMinimal,
1200
+ deps: [],
1201
+ target: i0.ɵɵFactoryTarget.Component
1202
+ });
1203
+ static ɵcmp = i0.ɵɵngDeclareComponent({
1204
+ minVersion: "17.1.0",
1205
+ version: "22.2.0",
1206
+ type: LayoutNavMinimal,
1207
+ isStandalone: true,
1208
+ selector: "LayoutNavMinimal",
1209
+ inputs: { brand: {
1210
+ classPropertyName: "brand",
1211
+ publicName: "brand",
1212
+ isSignal: true,
1213
+ isRequired: true,
1214
+ transformFunction: null
1215
+ } },
1216
+ host: { classAttribute: "contents" },
1217
+ ngImport: i0,
1218
+ template: `
501
1219
  <NavigationSidebar>
502
1220
  <NavigationHeader>
503
1221
  <LayoutBrand [brand]="brand()" />
504
1222
  </NavigationHeader>
505
1223
  </NavigationSidebar>
506
- `, isInline: true, dependencies: [{ kind: "component", type: NavigationSidebarComponent, selector: "NavigationSidebar", inputs: ["position", "collapsed", "nav-sidebar-collapse", "previewExpanded", "class"] }, { kind: "component", type: NavigationHeaderComponent, selector: "NavigationHeader", inputs: ["toggle", "class"] }, { kind: "component", type: LayoutBrand, selector: "LayoutBrand", inputs: ["brand", "compact"] }] });
507
- }
508
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutNavMinimal, decorators: [{
509
- type: Component,
510
- args: [{
511
- selector: 'LayoutNavMinimal',
512
- imports: [NavigationSidebarComponent, NavigationHeaderComponent, LayoutBrand],
513
- host: { class: 'contents' },
514
- template: `
1224
+ `,
1225
+ isInline: true,
1226
+ dependencies: [
1227
+ {
1228
+ kind: "component",
1229
+ type: NavigationSidebarComponent,
1230
+ selector: "NavigationSidebar",
1231
+ inputs: [
1232
+ "position",
1233
+ "collapsed",
1234
+ "nav-sidebar-collapse",
1235
+ "previewExpanded",
1236
+ "class"
1237
+ ]
1238
+ },
1239
+ {
1240
+ kind: "component",
1241
+ type: NavigationHeaderComponent,
1242
+ selector: "NavigationHeader",
1243
+ inputs: ["toggle", "class"]
1244
+ },
1245
+ {
1246
+ kind: "component",
1247
+ type: LayoutBrand,
1248
+ selector: "LayoutBrand",
1249
+ inputs: ["brand", "compact"]
1250
+ }
1251
+ ]
1252
+ });
1253
+ };
1254
+ i0.ɵɵngDeclareClassMetadata({
1255
+ minVersion: "12.0.0",
1256
+ version: "22.2.0",
1257
+ ngImport: i0,
1258
+ type: LayoutNavMinimal,
1259
+ decorators: [{
1260
+ type: Component,
1261
+ args: [{
1262
+ selector: "LayoutNavMinimal",
1263
+ imports: [
1264
+ NavigationSidebarComponent,
1265
+ NavigationHeaderComponent,
1266
+ LayoutBrand
1267
+ ],
1268
+ host: { class: "contents" },
1269
+ template: `
515
1270
  <NavigationSidebar>
516
1271
  <NavigationHeader>
517
1272
  <LayoutBrand [brand]="brand()" />
518
1273
  </NavigationHeader>
519
1274
  </NavigationSidebar>
520
- `,
521
- }]
522
- }], propDecorators: { brand: [{ type: i0.Input, args: [{ isSignal: true, alias: "brand", required: true }] }] } });
523
-
1275
+ `
1276
+ }]
1277
+ }],
1278
+ propDecorators: { brand: [{
1279
+ type: i0.Input,
1280
+ args: [{
1281
+ isSignal: true,
1282
+ alias: "brand",
1283
+ required: true
1284
+ }]
1285
+ }] }
1286
+ });
524
1287
  const EMPTY_NAVIGATION_BADGE_CONTEXT = Object.freeze({});
525
- /**
526
- * A ready-made layout shell — the consumer supplies data through inputs instead of
527
- * assembling `Layout > LayoutVertical/Horizontal/Empty/Fluid > LayoutNavigation >
528
- * Navigation > nav type` by hand.
529
- *
530
- * ```html
531
- * <LayoutWrapperDefault
532
- * [surface]="surface" [layout-appearance]="appearance" [width]="width"
533
- * [layout-type]="layoutType" [nav-type]="navType"
534
- * [data]="navItems" [brand]="brand" [user]="user"
535
- * (logout)="signOut()"
536
- * >
537
- * <router-outlet /> <!-- page content is projected into LayoutContent -->
538
- * </LayoutWrapperDefault>
539
- * ```
540
- *
541
- * The `register*` defaults (LayoutService) stay the consumer's job; this wrapper is purely
542
- * presentational — two axes (`effectiveLayoutType` → wrapper, `navKind` → nav type) over one
543
- * shared skeleton. Injection stays sound: `<Navigation>` provides `NAVIGATION_SHELL` inside
544
- * `#body`, and each nav type is `display:contents`, so `<NavigationXxx>` is an effective child
545
- * of `<Navigation>`.
546
- */
547
- class LayoutWrapperDefault {
548
- /** Surface latar shell (mis. `grid`, `flat`). */
549
- surface = input(LAYOUT_DEFAULT_SURFACE, /* @ts-ignore */
550
- ...(ngDevMode ? [{ debugName: "surface" }] : /* istanbul ignore next */ []));
551
- /** Appearance shell & nav (`flat | border-rail`). */
552
- appearance = input(LAYOUT_DEFAULT_APPEARANCE, { ...(ngDevMode ? { debugName: "appearance" } : /* istanbul ignore next */ {}), alias: 'layout-appearance' });
553
- /** Frame width (`full`, `container`, and so on). */
554
- width = input(LAYOUT_DEFAULT_WIDTH, /* @ts-ignore */
555
- ...(ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []));
556
- /** Tipe layout dasar (`vertical | horizontal | empty | fluid`); `empty`/`fluid` override nav. */
557
- layoutType = input(LAYOUT_DEFAULT_TYPE, { ...(ngDevMode ? { debugName: "layoutType" } : /* istanbul ignore next */ {}), alias: 'layout-type' });
558
- /**
559
- * The shell's navigation type. `desktop` only means anything on a horizontal frame:
560
- * the titlebar becomes the primary chrome and the navigation area follows the
561
- * content-focused `empty` behaviour.
562
- */
563
- navType = input('sidebar', { ...(ngDevMode ? { debugName: "navType" } : /* istanbul ignore next */ {}), alias: 'nav-type' });
564
- /** Presentation mode for the active nav type (`collapsed` sidebar / `drawer` dockbar). */
565
- navTypeMode = input('default', { ...(ngDevMode ? { debugName: "navTypeMode" } : /* istanbul ignore next */ {}), alias: 'nav-type-mode' });
566
- /** Opt-in route-aware dockbar state; ignored by other navigation types. */
567
- dockbarRouteContext = input(null, { ...(ngDevMode ? { debugName: "dockbarRouteContext" } : /* istanbul ignore next */ {}), alias: 'dockbar-route-context' });
568
- /** Generic dockbar badge registry; ignored by sidebar/navbar/flyout. */
569
- dockbarBadgeContext = input(EMPTY_NAVIGATION_BADGE_CONTEXT, { ...(ngDevMode ? { debugName: "dockbarBadgeContext" } : /* istanbul ignore next */ {}), alias: 'dockbar-badge' });
570
- /** Item navigasi. */
571
- data = input.required(/* @ts-ignore */
572
- ...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
573
- /** Identitas brand. */
574
- brand = input.required(/* @ts-ignore */
575
- ...(ngDevMode ? [{ debugName: "brand" }] : /* istanbul ignore next */ []));
576
- /** Identitas user. */
577
- user = input.required(/* @ts-ignore */
578
- ...(ngDevMode ? [{ debugName: "user" }] : /* istanbul ignore next */ []));
579
- /** Id landmark konten utama sekaligus target skip link. */
580
- contentId = input('main-content', { ...(ngDevMode ? { debugName: "contentId" } : /* istanbul ignore next */ {}), alias: 'content-id' });
581
- /** Skip-link label; the consumer can localise it. */
582
- skipLinkLabel = input('Skip to main content', { ...(ngDevMode ? { debugName: "skipLinkLabel" } : /* istanbul ignore next */ {}), alias: 'skip-link-label' });
583
- /** Fokuskan landmark utama setelah route selesai berubah. */
584
- focusOnNavigation = input(false, { ...(ngDevMode ? { debugName: "focusOnNavigation" } : /* istanbul ignore next */ {}), alias: 'focus-on-navigation' });
585
- /** Controlled/uncontrolled state drawer navigasi mobile. */
586
- mobileNavOpen = model(false, { ...(ngDevMode ? { debugName: "mobileNavOpen" } : /* istanbul ignore next */ {}), alias: 'mobile-nav-open' });
587
- mobileNavLabel = input('Open navigation', { ...(ngDevMode ? { debugName: "mobileNavLabel" } : /* istanbul ignore next */ {}), alias: 'mobile-nav-label' });
588
- closeMobileNavLabel = input('Close navigation', { ...(ngDevMode ? { debugName: "closeMobileNavLabel" } : /* istanbul ignore next */ {}), alias: 'close-mobile-nav-label' });
589
- /**
590
- * The user pressed logout in the navigation footer. Forwarded from every nav type that
591
- * shows the user identity (`sidebar`, `dockbar`, `navbar`, `flyout`), the mobile drawer
592
- * included, so one binding covers all of them. The library calls no endpoint and performs
593
- * no navigation; what happens next is entirely the consumer's.
594
- */
595
- logout = output();
596
- identity = inject(LayoutIdentityService);
597
- navigation = inject(NAVIGATION_ADAPTER);
598
- desktopNavigationDataOwner = {};
599
- document = inject(DOCUMENT, { optional: true });
600
- mobileNavTriggerRef = viewChild('mobileNavTrigger', /* @ts-ignore */
601
- ...(ngDevMode ? [{ debugName: "mobileNavTriggerRef" }] : /* istanbul ignore next */ []));
602
- constructor() {
603
- // Publikasikan identitas ke registry agar surface lain (mis. apps-launcher di `Page`)
604
- // menampilkan brand/user yang sama dengan flyout nav.
605
- effect(() => this.identity.setBrand(this.brand()));
606
- effect(() => this.identity.setUser(this.user()));
607
- // Desktop navigation has no in-layout <Navigation> node: its trigger belongs
608
- // to the window titlebar. Publish the same data through a dedicated key so
609
- // <Shell> can surface it without duplicating navbar/dockbar configurations.
610
- effect((onCleanup) => {
611
- if (this.navType() !== 'desktop') {
612
- return;
613
- }
614
- this.navigation.publishData(LAYOUT_DESKTOP_NAVIGATION_DATA_ID, this.data(), this.desktopNavigationDataOwner);
615
- onCleanup(() => this.navigation.clearData(LAYOUT_DESKTOP_NAVIGATION_DATA_ID, this.desktopNavigationDataOwner));
616
- });
617
- // Drawer tidak boleh tetap modal ketika viewport kembali ke desktop.
618
- effect((onCleanup) => {
619
- const media = this.document?.defaultView?.matchMedia?.('(min-width: 640px)');
620
- if (!media) {
621
- return;
622
- }
623
- const closeOnDesktop = (event) => {
624
- if (event.matches) {
625
- this.mobileNavOpen.set(false);
626
- }
627
- };
628
- closeOnDesktop(media);
629
- media.addEventListener('change', closeOnDesktop);
630
- onCleanup(() => media.removeEventListener('change', closeOnDesktop));
631
- });
632
- }
633
- /**
634
- * Classes for `<LayoutContent>`, chosen by the consumer (padding, say). Empty by
635
- * default: the library no longer forces `p-6`; the consumer or `<Page>` decides spacing.
636
- */
637
- contentClassInput = input('', { ...(ngDevMode ? { debugName: "contentClassInput" } : /* istanbul ignore next */ {}), alias: 'content-class' });
638
- /** Wrapper layout & nilai `<Layout [layout-type]>`: navbar/flyout = horizontal, sisanya vertical. */
639
- effectiveLayoutType = computed(() => {
640
- const layoutType = this.layoutType();
641
- if (layoutType === 'empty' || layoutType === 'fluid') {
642
- return layoutType;
643
- }
644
- return this.navType() === 'navbar' ||
645
- this.navType() === 'flyout' ||
646
- this.navType() === 'desktop'
647
- ? 'horizontal'
648
- : 'vertical';
649
- }, /* @ts-ignore */
650
- ...(ngDevMode ? [{ debugName: "effectiveLayoutType" }] : /* istanbul ignore next */ []));
651
- /** Tipe nav di dalam `#body`: `empty`/`fluid` → `brand` (header-only); selain itu `nav-type`. */
652
- navKind = computed(() => {
653
- const layoutType = this.layoutType();
654
- const navType = this.navType();
655
- return layoutType === 'empty' || layoutType === 'fluid' || navType === 'desktop'
656
- ? 'brand'
657
- : navType;
658
- }, /* @ts-ignore */
659
- ...(ngDevMode ? [{ debugName: "navKind" }] : /* istanbul ignore next */ []));
660
- /** Lebar host `<Navigation>`: penuh-tinggi (vertical) atau penuh-lebar (horizontal). */
661
- navClass = computed(() => this.effectiveLayoutType() === 'horizontal' ? 'w-full' : 'h-full', /* @ts-ignore */
662
- ...(ngDevMode ? [{ debugName: "navClass" }] : /* istanbul ignore next */ []));
663
- showsMobileNavigation = computed(() => {
664
- if (this.navType() === 'desktop') {
665
- return false;
666
- }
667
- const type = this.effectiveLayoutType();
668
- return type === 'vertical' || type === 'horizontal';
669
- }, /* @ts-ignore */
670
- ...(ngDevMode ? [{ debugName: "showsMobileNavigation" }] : /* istanbul ignore next */ []));
671
- /** Internal shell owns responsive placement while primitives remain composition-safe. */
672
- defaultShellClasses = computed(() => {
673
- const type = this.effectiveLayoutType();
674
- if (type === 'empty' || type === 'fluid' || this.navType() === 'desktop') {
675
- return 'contents';
676
- }
677
- return cn('relative grid h-full min-h-0 w-full min-w-0 grid-cols-1 grid-rows-[3rem_minmax(0,1fr)]', type === 'horizontal'
678
- ? 'sm:flex sm:flex-col'
679
- : 'col-span-2 sm:grid-cols-[auto_minmax(0,1fr)] sm:grid-rows-1');
680
- }, /* @ts-ignore */
681
- ...(ngDevMode ? [{ debugName: "defaultShellClasses" }] : /* istanbul ignore next */ []));
682
- /** Kelas `<LayoutContent>`: `fluid` membatasi lebar & memusatkan; padding diserahkan ke consumer. */
683
- contentClass = computed(() => cn(this.effectiveLayoutType() === 'fluid' ? 'w-full max-w-3xl' : '', this.contentClassInput()), /* @ts-ignore */
684
- ...(ngDevMode ? [{ debugName: "contentClass" }] : /* istanbul ignore next */ []));
685
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutWrapperDefault, deps: [], target: i0.ɵɵFactoryTarget.Component });
686
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: LayoutWrapperDefault, isStandalone: true, selector: "LayoutWrapperDefault", inputs: { surface: { classPropertyName: "surface", publicName: "surface", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "layout-appearance", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, layoutType: { classPropertyName: "layoutType", publicName: "layout-type", isSignal: true, isRequired: false, transformFunction: null }, navType: { classPropertyName: "navType", publicName: "nav-type", isSignal: true, isRequired: false, transformFunction: null }, navTypeMode: { classPropertyName: "navTypeMode", publicName: "nav-type-mode", isSignal: true, isRequired: false, transformFunction: null }, dockbarRouteContext: { classPropertyName: "dockbarRouteContext", publicName: "dockbar-route-context", isSignal: true, isRequired: false, transformFunction: null }, dockbarBadgeContext: { classPropertyName: "dockbarBadgeContext", publicName: "dockbar-badge", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, brand: { classPropertyName: "brand", publicName: "brand", isSignal: true, isRequired: true, transformFunction: null }, user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: true, transformFunction: null }, contentId: { classPropertyName: "contentId", publicName: "content-id", isSignal: true, isRequired: false, transformFunction: null }, skipLinkLabel: { classPropertyName: "skipLinkLabel", publicName: "skip-link-label", isSignal: true, isRequired: false, transformFunction: null }, focusOnNavigation: { classPropertyName: "focusOnNavigation", publicName: "focus-on-navigation", isSignal: true, isRequired: false, transformFunction: null }, mobileNavOpen: { classPropertyName: "mobileNavOpen", publicName: "mobile-nav-open", isSignal: true, isRequired: false, transformFunction: null }, mobileNavLabel: { classPropertyName: "mobileNavLabel", publicName: "mobile-nav-label", isSignal: true, isRequired: false, transformFunction: null }, closeMobileNavLabel: { classPropertyName: "closeMobileNavLabel", publicName: "close-mobile-nav-label", isSignal: true, isRequired: false, transformFunction: null }, contentClassInput: { classPropertyName: "contentClassInput", publicName: "content-class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { mobileNavOpen: "mobile-nav-openChange", logout: "logout" }, host: { classAttribute: "contents" }, viewQueries: [{ propertyName: "mobileNavTriggerRef", first: true, predicate: ["mobileNavTrigger"], descendants: true, isSignal: true }], ngImport: i0, template: `
1288
+ var LayoutWrapperDefault = class LayoutWrapperDefault {
1289
+ surface = input(LAYOUT_DEFAULT_SURFACE, ...ngDevMode ? [{ debugName: "surface" }] : /* istanbul ignore next */ []);
1290
+ appearance = input(LAYOUT_DEFAULT_APPEARANCE, {
1291
+ ...ngDevMode ? { debugName: "appearance" } : /* istanbul ignore next */ {},
1292
+ alias: "layout-appearance"
1293
+ });
1294
+ width = input(LAYOUT_DEFAULT_WIDTH, ...ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []);
1295
+ layoutType = input(LAYOUT_DEFAULT_TYPE, {
1296
+ ...ngDevMode ? { debugName: "layoutType" } : /* istanbul ignore next */ {},
1297
+ alias: "layout-type"
1298
+ });
1299
+ navType = input("sidebar", {
1300
+ ...ngDevMode ? { debugName: "navType" } : /* istanbul ignore next */ {},
1301
+ alias: "nav-type"
1302
+ });
1303
+ navTypeMode = input("default", {
1304
+ ...ngDevMode ? { debugName: "navTypeMode" } : /* istanbul ignore next */ {},
1305
+ alias: "nav-type-mode"
1306
+ });
1307
+ dockbarRouteContext = input(null, {
1308
+ ...ngDevMode ? { debugName: "dockbarRouteContext" } : /* istanbul ignore next */ {},
1309
+ alias: "dockbar-route-context"
1310
+ });
1311
+ dockbarBadgeContext = input(EMPTY_NAVIGATION_BADGE_CONTEXT, {
1312
+ ...ngDevMode ? { debugName: "dockbarBadgeContext" } : /* istanbul ignore next */ {},
1313
+ alias: "dockbar-badge"
1314
+ });
1315
+ data = input.required(...ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []);
1316
+ brand = input.required(...ngDevMode ? [{ debugName: "brand" }] : /* istanbul ignore next */ []);
1317
+ user = input.required(...ngDevMode ? [{ debugName: "user" }] : /* istanbul ignore next */ []);
1318
+ contentId = input("main-content", {
1319
+ ...ngDevMode ? { debugName: "contentId" } : /* istanbul ignore next */ {},
1320
+ alias: "content-id"
1321
+ });
1322
+ skipLinkLabel = input("Skip to main content", {
1323
+ ...ngDevMode ? { debugName: "skipLinkLabel" } : /* istanbul ignore next */ {},
1324
+ alias: "skip-link-label"
1325
+ });
1326
+ focusOnNavigation = input(false, {
1327
+ ...ngDevMode ? { debugName: "focusOnNavigation" } : /* istanbul ignore next */ {},
1328
+ alias: "focus-on-navigation"
1329
+ });
1330
+ mobileNavOpen = model(false, {
1331
+ ...ngDevMode ? { debugName: "mobileNavOpen" } : /* istanbul ignore next */ {},
1332
+ alias: "mobile-nav-open"
1333
+ });
1334
+ mobileNavLabel = input("Open navigation", {
1335
+ ...ngDevMode ? { debugName: "mobileNavLabel" } : /* istanbul ignore next */ {},
1336
+ alias: "mobile-nav-label"
1337
+ });
1338
+ closeMobileNavLabel = input("Close navigation", {
1339
+ ...ngDevMode ? { debugName: "closeMobileNavLabel" } : /* istanbul ignore next */ {},
1340
+ alias: "close-mobile-nav-label"
1341
+ });
1342
+ logout = output();
1343
+ identity = inject(LayoutIdentityService);
1344
+ navigation = inject(NAVIGATION_ADAPTER);
1345
+ desktopNavigationDataOwner = {};
1346
+ document = inject(DOCUMENT, { optional: true });
1347
+ mobileNavTriggerRef = viewChild("mobileNavTrigger", ...ngDevMode ? [{ debugName: "mobileNavTriggerRef" }] : /* istanbul ignore next */ []);
1348
+ constructor() {
1349
+ effect(() => this.identity.setBrand(this.brand()));
1350
+ effect(() => this.identity.setUser(this.user()));
1351
+ effect((onCleanup) => {
1352
+ if (this.navType() !== "desktop") return;
1353
+ this.navigation.publishData(LAYOUT_DESKTOP_NAVIGATION_DATA_ID, this.data(), this.desktopNavigationDataOwner);
1354
+ onCleanup(() => this.navigation.clearData(LAYOUT_DESKTOP_NAVIGATION_DATA_ID, this.desktopNavigationDataOwner));
1355
+ });
1356
+ effect((onCleanup) => {
1357
+ const media = this.document?.defaultView?.matchMedia?.("(min-width: 640px)");
1358
+ if (!media) return;
1359
+ const closeOnDesktop = (event) => {
1360
+ if (event.matches) this.mobileNavOpen.set(false);
1361
+ };
1362
+ closeOnDesktop(media);
1363
+ media.addEventListener("change", closeOnDesktop);
1364
+ onCleanup(() => media.removeEventListener("change", closeOnDesktop));
1365
+ });
1366
+ }
1367
+ contentClassInput = input("", {
1368
+ ...ngDevMode ? { debugName: "contentClassInput" } : /* istanbul ignore next */ {},
1369
+ alias: "content-class"
1370
+ });
1371
+ effectiveLayoutType = computed(() => {
1372
+ const layoutType = this.layoutType();
1373
+ if (layoutType === "empty" || layoutType === "fluid") return layoutType;
1374
+ return this.navType() === "navbar" || this.navType() === "flyout" || this.navType() === "desktop" ? "horizontal" : "vertical";
1375
+ }, ...ngDevMode ? [{ debugName: "effectiveLayoutType" }] : /* istanbul ignore next */ []);
1376
+ navKind = computed(() => {
1377
+ const layoutType = this.layoutType();
1378
+ const navType = this.navType();
1379
+ return layoutType === "empty" || layoutType === "fluid" || navType === "desktop" ? "brand" : navType;
1380
+ }, ...ngDevMode ? [{ debugName: "navKind" }] : /* istanbul ignore next */ []);
1381
+ navClass = computed(() => this.effectiveLayoutType() === "horizontal" ? "w-full" : "h-full", ...ngDevMode ? [{ debugName: "navClass" }] : /* istanbul ignore next */ []);
1382
+ showsMobileNavigation = computed(() => {
1383
+ if (this.navType() === "desktop") return false;
1384
+ const type = this.effectiveLayoutType();
1385
+ return type === "vertical" || type === "horizontal";
1386
+ }, ...ngDevMode ? [{ debugName: "showsMobileNavigation" }] : /* istanbul ignore next */ []);
1387
+ defaultShellClasses = computed(() => {
1388
+ const type = this.effectiveLayoutType();
1389
+ if (type === "empty" || type === "fluid" || this.navType() === "desktop") return "contents";
1390
+ return cn("relative grid h-full min-h-0 w-full min-w-0 grid-cols-1 grid-rows-[3rem_minmax(0,1fr)]", type === "horizontal" ? "sm:flex sm:flex-col" : "col-span-2 sm:grid-cols-[auto_minmax(0,1fr)] sm:grid-rows-1");
1391
+ }, ...ngDevMode ? [{ debugName: "defaultShellClasses" }] : /* istanbul ignore next */ []);
1392
+ contentClass = computed(() => cn(this.effectiveLayoutType() === "fluid" ? "w-full max-w-3xl" : "", this.contentClassInput()), ...ngDevMode ? [{ debugName: "contentClass" }] : /* istanbul ignore next */ []);
1393
+ static ɵfac = i0.ɵɵngDeclareFactory({
1394
+ minVersion: "12.0.0",
1395
+ version: "22.2.0",
1396
+ ngImport: i0,
1397
+ type: LayoutWrapperDefault,
1398
+ deps: [],
1399
+ target: i0.ɵɵFactoryTarget.Component
1400
+ });
1401
+ static ɵcmp = i0.ɵɵngDeclareComponent({
1402
+ minVersion: "17.0.0",
1403
+ version: "22.2.0",
1404
+ type: LayoutWrapperDefault,
1405
+ isStandalone: true,
1406
+ selector: "LayoutWrapperDefault",
1407
+ inputs: {
1408
+ surface: {
1409
+ classPropertyName: "surface",
1410
+ publicName: "surface",
1411
+ isSignal: true,
1412
+ isRequired: false,
1413
+ transformFunction: null
1414
+ },
1415
+ appearance: {
1416
+ classPropertyName: "appearance",
1417
+ publicName: "layout-appearance",
1418
+ isSignal: true,
1419
+ isRequired: false,
1420
+ transformFunction: null
1421
+ },
1422
+ width: {
1423
+ classPropertyName: "width",
1424
+ publicName: "width",
1425
+ isSignal: true,
1426
+ isRequired: false,
1427
+ transformFunction: null
1428
+ },
1429
+ layoutType: {
1430
+ classPropertyName: "layoutType",
1431
+ publicName: "layout-type",
1432
+ isSignal: true,
1433
+ isRequired: false,
1434
+ transformFunction: null
1435
+ },
1436
+ navType: {
1437
+ classPropertyName: "navType",
1438
+ publicName: "nav-type",
1439
+ isSignal: true,
1440
+ isRequired: false,
1441
+ transformFunction: null
1442
+ },
1443
+ navTypeMode: {
1444
+ classPropertyName: "navTypeMode",
1445
+ publicName: "nav-type-mode",
1446
+ isSignal: true,
1447
+ isRequired: false,
1448
+ transformFunction: null
1449
+ },
1450
+ dockbarRouteContext: {
1451
+ classPropertyName: "dockbarRouteContext",
1452
+ publicName: "dockbar-route-context",
1453
+ isSignal: true,
1454
+ isRequired: false,
1455
+ transformFunction: null
1456
+ },
1457
+ dockbarBadgeContext: {
1458
+ classPropertyName: "dockbarBadgeContext",
1459
+ publicName: "dockbar-badge",
1460
+ isSignal: true,
1461
+ isRequired: false,
1462
+ transformFunction: null
1463
+ },
1464
+ data: {
1465
+ classPropertyName: "data",
1466
+ publicName: "data",
1467
+ isSignal: true,
1468
+ isRequired: true,
1469
+ transformFunction: null
1470
+ },
1471
+ brand: {
1472
+ classPropertyName: "brand",
1473
+ publicName: "brand",
1474
+ isSignal: true,
1475
+ isRequired: true,
1476
+ transformFunction: null
1477
+ },
1478
+ user: {
1479
+ classPropertyName: "user",
1480
+ publicName: "user",
1481
+ isSignal: true,
1482
+ isRequired: true,
1483
+ transformFunction: null
1484
+ },
1485
+ contentId: {
1486
+ classPropertyName: "contentId",
1487
+ publicName: "content-id",
1488
+ isSignal: true,
1489
+ isRequired: false,
1490
+ transformFunction: null
1491
+ },
1492
+ skipLinkLabel: {
1493
+ classPropertyName: "skipLinkLabel",
1494
+ publicName: "skip-link-label",
1495
+ isSignal: true,
1496
+ isRequired: false,
1497
+ transformFunction: null
1498
+ },
1499
+ focusOnNavigation: {
1500
+ classPropertyName: "focusOnNavigation",
1501
+ publicName: "focus-on-navigation",
1502
+ isSignal: true,
1503
+ isRequired: false,
1504
+ transformFunction: null
1505
+ },
1506
+ mobileNavOpen: {
1507
+ classPropertyName: "mobileNavOpen",
1508
+ publicName: "mobile-nav-open",
1509
+ isSignal: true,
1510
+ isRequired: false,
1511
+ transformFunction: null
1512
+ },
1513
+ mobileNavLabel: {
1514
+ classPropertyName: "mobileNavLabel",
1515
+ publicName: "mobile-nav-label",
1516
+ isSignal: true,
1517
+ isRequired: false,
1518
+ transformFunction: null
1519
+ },
1520
+ closeMobileNavLabel: {
1521
+ classPropertyName: "closeMobileNavLabel",
1522
+ publicName: "close-mobile-nav-label",
1523
+ isSignal: true,
1524
+ isRequired: false,
1525
+ transformFunction: null
1526
+ },
1527
+ contentClassInput: {
1528
+ classPropertyName: "contentClassInput",
1529
+ publicName: "content-class",
1530
+ isSignal: true,
1531
+ isRequired: false,
1532
+ transformFunction: null
1533
+ }
1534
+ },
1535
+ outputs: {
1536
+ mobileNavOpen: "mobile-nav-openChange",
1537
+ logout: "logout"
1538
+ },
1539
+ host: { classAttribute: "contents" },
1540
+ viewQueries: [{
1541
+ propertyName: "mobileNavTriggerRef",
1542
+ first: true,
1543
+ predicate: ["mobileNavTrigger"],
1544
+ descendants: true,
1545
+ isSignal: true
1546
+ }],
1547
+ ngImport: i0,
1548
+ template: `
687
1549
  <Layout
688
1550
  [surface]="surface()"
689
1551
  [layout-appearance]="appearance()"
@@ -840,38 +1702,197 @@ class LayoutWrapperDefault {
840
1702
  }
841
1703
  }
842
1704
  </Layout>
843
- `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: LayoutComponent, selector: "Layout", inputs: ["surface", "appearance", "layout-appearance", "width", "layout-type", "class"] }, { kind: "component", type: LayoutVerticalComponent, selector: "LayoutVertical", inputs: ["class"] }, { kind: "component", type: LayoutHorizontalComponent, selector: "LayoutHorizontal", inputs: ["class"] }, { kind: "component", type: LayoutEmptyComponent, selector: "LayoutEmpty", inputs: ["class"] }, { kind: "component", type: LayoutFluidComponent, selector: "LayoutFluid", inputs: ["class"] }, { kind: "component", type: LayoutNavigationComponent, selector: "LayoutNavigation", inputs: ["ariaLabel", "landmark", "class"] }, { kind: "component", type: LayoutContentComponent, selector: "LayoutContent", inputs: ["class", "content-id", "focus-on-navigation"] }, { kind: "component", type: NavigationContainerComponent, selector: "Navigation", inputs: ["id", "data-id", "data", "ariaLabel", "compact", "collapse-tree", "class", "itemClass", "nav-group-class", "activeIds", "activeUrl", "openedIds"], outputs: ["openedIdsChange", "itemSelected"] }, { kind: "component", type: LayoutBrand, selector: "LayoutBrand", inputs: ["brand", "compact"] }, { kind: "component", type: LayoutNavSidebar, selector: "LayoutNavSidebar", inputs: ["brand", "user", "appearance", "nav-type-mode"], outputs: ["logout"] }, { kind: "component", type: LayoutNavDockbar, selector: "LayoutNavDockbar", inputs: ["brand", "user", "appearance", "nav-type-mode", "dockbar-route-context", "dockbar-badge"], outputs: ["logout"] }, { kind: "component", type: LayoutNavNavbar, selector: "LayoutNavNavbar", inputs: ["brand", "user", "appearance"], outputs: ["logout"] }, { kind: "component", type: LayoutNavFlyout, selector: "LayoutNavFlyout", inputs: ["brand", "user", "appearance"], outputs: ["logout"] }, { kind: "component", type: LayoutNavMinimal, selector: "LayoutNavMinimal", inputs: ["brand"] }], deferBlockDependencies: [() => [/* @ts-ignore */
844
- import('@ojiepermana/angular/component/sheet').then(m => m.SheetComponent), /* @ts-ignore */
845
- import('@ojiepermana/angular/component/sheet').then(m => m.SheetTitleComponent), NavigationContainerComponent,
846
- LayoutNavSidebar]] });
847
- }
848
- i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "22.1.4", ngImport: i0, type: LayoutWrapperDefault, resolveDeferredDeps: () => [/* @ts-ignore */
849
- import('@ojiepermana/angular/component/sheet').then(m => m.SheetComponent), /* @ts-ignore */
850
- import('@ojiepermana/angular/component/sheet').then(m => m.SheetTitleComponent)], resolveMetadata: (SheetComponent, SheetTitleComponent) => ({ decorators: [{
851
- type: Component,
852
- args: [{
853
- selector: 'LayoutWrapperDefault',
854
- host: { class: 'contents' },
855
- imports: [
856
- NgTemplateOutlet,
857
- LayoutComponent,
858
- LayoutVerticalComponent,
859
- LayoutHorizontalComponent,
860
- LayoutEmptyComponent,
861
- LayoutFluidComponent,
862
- LayoutNavigationComponent,
863
- LayoutContentComponent,
864
- SheetComponent,
865
- SheetTitleComponent,
866
- NavigationContainerComponent,
867
- LayoutBrand,
868
- LayoutNavSidebar,
869
- LayoutNavDockbar,
870
- LayoutNavNavbar,
871
- LayoutNavFlyout,
872
- LayoutNavMinimal,
873
- ],
874
- template: `
1705
+ `,
1706
+ isInline: true,
1707
+ dependencies: [
1708
+ {
1709
+ kind: "directive",
1710
+ type: NgTemplateOutlet,
1711
+ selector: "[ngTemplateOutlet]",
1712
+ inputs: [
1713
+ "ngTemplateOutletContext",
1714
+ "ngTemplateOutlet",
1715
+ "ngTemplateOutletInjector"
1716
+ ]
1717
+ },
1718
+ {
1719
+ kind: "component",
1720
+ type: LayoutComponent,
1721
+ selector: "Layout",
1722
+ inputs: [
1723
+ "surface",
1724
+ "appearance",
1725
+ "layout-appearance",
1726
+ "width",
1727
+ "layout-type",
1728
+ "class"
1729
+ ]
1730
+ },
1731
+ {
1732
+ kind: "component",
1733
+ type: LayoutVerticalComponent,
1734
+ selector: "LayoutVertical",
1735
+ inputs: ["class"]
1736
+ },
1737
+ {
1738
+ kind: "component",
1739
+ type: LayoutHorizontalComponent,
1740
+ selector: "LayoutHorizontal",
1741
+ inputs: ["class"]
1742
+ },
1743
+ {
1744
+ kind: "component",
1745
+ type: LayoutEmptyComponent,
1746
+ selector: "LayoutEmpty",
1747
+ inputs: ["class"]
1748
+ },
1749
+ {
1750
+ kind: "component",
1751
+ type: LayoutFluidComponent,
1752
+ selector: "LayoutFluid",
1753
+ inputs: ["class"]
1754
+ },
1755
+ {
1756
+ kind: "component",
1757
+ type: LayoutNavigationComponent,
1758
+ selector: "LayoutNavigation",
1759
+ inputs: [
1760
+ "ariaLabel",
1761
+ "landmark",
1762
+ "class"
1763
+ ]
1764
+ },
1765
+ {
1766
+ kind: "component",
1767
+ type: LayoutContentComponent,
1768
+ selector: "LayoutContent",
1769
+ inputs: [
1770
+ "class",
1771
+ "content-id",
1772
+ "focus-on-navigation"
1773
+ ]
1774
+ },
1775
+ {
1776
+ kind: "component",
1777
+ type: NavigationContainerComponent,
1778
+ selector: "Navigation",
1779
+ inputs: [
1780
+ "id",
1781
+ "data-id",
1782
+ "data",
1783
+ "ariaLabel",
1784
+ "compact",
1785
+ "collapse-tree",
1786
+ "class",
1787
+ "itemClass",
1788
+ "nav-group-class",
1789
+ "activeIds",
1790
+ "activeUrl",
1791
+ "openedIds"
1792
+ ],
1793
+ outputs: ["openedIdsChange", "itemSelected"]
1794
+ },
1795
+ {
1796
+ kind: "component",
1797
+ type: LayoutBrand,
1798
+ selector: "LayoutBrand",
1799
+ inputs: ["brand", "compact"]
1800
+ },
1801
+ {
1802
+ kind: "component",
1803
+ type: LayoutNavSidebar,
1804
+ selector: "LayoutNavSidebar",
1805
+ inputs: [
1806
+ "brand",
1807
+ "user",
1808
+ "appearance",
1809
+ "nav-type-mode"
1810
+ ],
1811
+ outputs: ["logout"]
1812
+ },
1813
+ {
1814
+ kind: "component",
1815
+ type: LayoutNavDockbar,
1816
+ selector: "LayoutNavDockbar",
1817
+ inputs: [
1818
+ "brand",
1819
+ "user",
1820
+ "appearance",
1821
+ "nav-type-mode",
1822
+ "dockbar-route-context",
1823
+ "dockbar-badge"
1824
+ ],
1825
+ outputs: ["logout"]
1826
+ },
1827
+ {
1828
+ kind: "component",
1829
+ type: LayoutNavNavbar,
1830
+ selector: "LayoutNavNavbar",
1831
+ inputs: [
1832
+ "brand",
1833
+ "user",
1834
+ "appearance"
1835
+ ],
1836
+ outputs: ["logout"]
1837
+ },
1838
+ {
1839
+ kind: "component",
1840
+ type: LayoutNavFlyout,
1841
+ selector: "LayoutNavFlyout",
1842
+ inputs: [
1843
+ "brand",
1844
+ "user",
1845
+ "appearance"
1846
+ ],
1847
+ outputs: ["logout"]
1848
+ },
1849
+ {
1850
+ kind: "component",
1851
+ type: LayoutNavMinimal,
1852
+ selector: "LayoutNavMinimal",
1853
+ inputs: ["brand"]
1854
+ }
1855
+ ],
1856
+ deferBlockDependencies: [() => [
1857
+ import("@ojiepermana/angular/component/sheet").then((m) => m.SheetComponent),
1858
+ import("@ojiepermana/angular/component/sheet").then((m) => m.SheetTitleComponent),
1859
+ NavigationContainerComponent,
1860
+ LayoutNavSidebar
1861
+ ]]
1862
+ });
1863
+ };
1864
+ i0.ɵɵngDeclareClassMetadataAsync({
1865
+ minVersion: "18.0.0",
1866
+ version: "22.2.0",
1867
+ ngImport: i0,
1868
+ type: LayoutWrapperDefault,
1869
+ resolveDeferredDeps: () => [import("@ojiepermana/angular/component/sheet").then((m) => m.SheetComponent), import("@ojiepermana/angular/component/sheet").then((m) => m.SheetTitleComponent)],
1870
+ resolveMetadata: (SheetComponent, SheetTitleComponent) => ({
1871
+ decorators: [{
1872
+ type: Component,
1873
+ args: [{
1874
+ selector: "LayoutWrapperDefault",
1875
+ host: { class: "contents" },
1876
+ imports: [
1877
+ NgTemplateOutlet,
1878
+ LayoutComponent,
1879
+ LayoutVerticalComponent,
1880
+ LayoutHorizontalComponent,
1881
+ LayoutEmptyComponent,
1882
+ LayoutFluidComponent,
1883
+ LayoutNavigationComponent,
1884
+ LayoutContentComponent,
1885
+ SheetComponent,
1886
+ SheetTitleComponent,
1887
+ NavigationContainerComponent,
1888
+ LayoutBrand,
1889
+ LayoutNavSidebar,
1890
+ LayoutNavDockbar,
1891
+ LayoutNavNavbar,
1892
+ LayoutNavFlyout,
1893
+ LayoutNavMinimal
1894
+ ],
1895
+ template: `
875
1896
  <Layout
876
1897
  [surface]="surface()"
877
1898
  [layout-appearance]="appearance()"
@@ -1028,21 +2049,167 @@ i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "22.1.4", ng
1028
2049
  }
1029
2050
  }
1030
2051
  </Layout>
1031
- `,
1032
- }]
1033
- }], ctorParameters: () => [], propDecorators: { surface: [{ type: i0.Input, args: [{ isSignal: true, alias: "surface", required: false }] }], appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "layout-appearance", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], layoutType: [{ type: i0.Input, args: [{ isSignal: true, alias: "layout-type", required: false }] }], navType: [{ type: i0.Input, args: [{ isSignal: true, alias: "nav-type", required: false }] }], navTypeMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "nav-type-mode", required: false }] }], dockbarRouteContext: [{ type: i0.Input, args: [{ isSignal: true, alias: "dockbar-route-context", required: false }] }], dockbarBadgeContext: [{ type: i0.Input, args: [{ isSignal: true, alias: "dockbar-badge", required: false }] }], data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: true }] }], brand: [{ type: i0.Input, args: [{ isSignal: true, alias: "brand", required: true }] }], user: [{ type: i0.Input, args: [{ isSignal: true, alias: "user", required: true }] }], contentId: [{ type: i0.Input, args: [{ isSignal: true, alias: "content-id", required: false }] }], skipLinkLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "skip-link-label", required: false }] }], focusOnNavigation: [{ type: i0.Input, args: [{ isSignal: true, alias: "focus-on-navigation", required: false }] }], mobileNavOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "mobile-nav-open", required: false }] }, { type: i0.Output, args: ["mobile-nav-openChange"] }], mobileNavLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "mobile-nav-label", required: false }] }], closeMobileNavLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "close-mobile-nav-label", required: false }] }], logout: [{ type: i0.Output, args: ["logout"] }], mobileNavTriggerRef: [{ type: i0.ViewChild, args: ['mobileNavTrigger', { isSignal: true }] }], contentClassInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "content-class", required: false }] }] } }) });
1034
-
1035
- /*
1036
- * Public API of @ojiepermana/angular/theme/layout/wrapper
1037
- *
1038
- * Wrapper blok-jadi untuk layout shell: consumer cukup menyediakan data input
1039
- * (surface, appearance, width, layout-type, nav-type, navigation data, brand, user)
1040
- * tanpa merakit komponen bersarang. `register*` default tetap di consumer.
1041
- */
1042
- // Identitas (bentuk data yang disediakan consumer)
1043
-
1044
- /**
1045
- * Generated bundle index. Do not edit.
1046
- */
1047
-
1048
- export { LAYOUT_DESKTOP_NAVIGATION_DATA_ID, LayoutBrand, LayoutIdentityService, LayoutNavDockbar, LayoutNavFlyout, LayoutNavMinimal, LayoutNavNavbar, LayoutNavSidebar, LayoutUser, LayoutWrapperDefault };
2052
+ `
2053
+ }]
2054
+ }],
2055
+ ctorParameters: () => [],
2056
+ propDecorators: {
2057
+ surface: [{
2058
+ type: i0.Input,
2059
+ args: [{
2060
+ isSignal: true,
2061
+ alias: "surface",
2062
+ required: false
2063
+ }]
2064
+ }],
2065
+ appearance: [{
2066
+ type: i0.Input,
2067
+ args: [{
2068
+ isSignal: true,
2069
+ alias: "layout-appearance",
2070
+ required: false
2071
+ }]
2072
+ }],
2073
+ width: [{
2074
+ type: i0.Input,
2075
+ args: [{
2076
+ isSignal: true,
2077
+ alias: "width",
2078
+ required: false
2079
+ }]
2080
+ }],
2081
+ layoutType: [{
2082
+ type: i0.Input,
2083
+ args: [{
2084
+ isSignal: true,
2085
+ alias: "layout-type",
2086
+ required: false
2087
+ }]
2088
+ }],
2089
+ navType: [{
2090
+ type: i0.Input,
2091
+ args: [{
2092
+ isSignal: true,
2093
+ alias: "nav-type",
2094
+ required: false
2095
+ }]
2096
+ }],
2097
+ navTypeMode: [{
2098
+ type: i0.Input,
2099
+ args: [{
2100
+ isSignal: true,
2101
+ alias: "nav-type-mode",
2102
+ required: false
2103
+ }]
2104
+ }],
2105
+ dockbarRouteContext: [{
2106
+ type: i0.Input,
2107
+ args: [{
2108
+ isSignal: true,
2109
+ alias: "dockbar-route-context",
2110
+ required: false
2111
+ }]
2112
+ }],
2113
+ dockbarBadgeContext: [{
2114
+ type: i0.Input,
2115
+ args: [{
2116
+ isSignal: true,
2117
+ alias: "dockbar-badge",
2118
+ required: false
2119
+ }]
2120
+ }],
2121
+ data: [{
2122
+ type: i0.Input,
2123
+ args: [{
2124
+ isSignal: true,
2125
+ alias: "data",
2126
+ required: true
2127
+ }]
2128
+ }],
2129
+ brand: [{
2130
+ type: i0.Input,
2131
+ args: [{
2132
+ isSignal: true,
2133
+ alias: "brand",
2134
+ required: true
2135
+ }]
2136
+ }],
2137
+ user: [{
2138
+ type: i0.Input,
2139
+ args: [{
2140
+ isSignal: true,
2141
+ alias: "user",
2142
+ required: true
2143
+ }]
2144
+ }],
2145
+ contentId: [{
2146
+ type: i0.Input,
2147
+ args: [{
2148
+ isSignal: true,
2149
+ alias: "content-id",
2150
+ required: false
2151
+ }]
2152
+ }],
2153
+ skipLinkLabel: [{
2154
+ type: i0.Input,
2155
+ args: [{
2156
+ isSignal: true,
2157
+ alias: "skip-link-label",
2158
+ required: false
2159
+ }]
2160
+ }],
2161
+ focusOnNavigation: [{
2162
+ type: i0.Input,
2163
+ args: [{
2164
+ isSignal: true,
2165
+ alias: "focus-on-navigation",
2166
+ required: false
2167
+ }]
2168
+ }],
2169
+ mobileNavOpen: [{
2170
+ type: i0.Input,
2171
+ args: [{
2172
+ isSignal: true,
2173
+ alias: "mobile-nav-open",
2174
+ required: false
2175
+ }]
2176
+ }, {
2177
+ type: i0.Output,
2178
+ args: ["mobile-nav-openChange"]
2179
+ }],
2180
+ mobileNavLabel: [{
2181
+ type: i0.Input,
2182
+ args: [{
2183
+ isSignal: true,
2184
+ alias: "mobile-nav-label",
2185
+ required: false
2186
+ }]
2187
+ }],
2188
+ closeMobileNavLabel: [{
2189
+ type: i0.Input,
2190
+ args: [{
2191
+ isSignal: true,
2192
+ alias: "close-mobile-nav-label",
2193
+ required: false
2194
+ }]
2195
+ }],
2196
+ logout: [{
2197
+ type: i0.Output,
2198
+ args: ["logout"]
2199
+ }],
2200
+ mobileNavTriggerRef: [{
2201
+ type: i0.ViewChild,
2202
+ args: ["mobileNavTrigger", { isSignal: true }]
2203
+ }],
2204
+ contentClassInput: [{
2205
+ type: i0.Input,
2206
+ args: [{
2207
+ isSignal: true,
2208
+ alias: "content-class",
2209
+ required: false
2210
+ }]
2211
+ }]
2212
+ }
2213
+ })
2214
+ });
2215
+ export { LAYOUT_DESKTOP_NAVIGATION_DATA_ID, LayoutBrand, LayoutIdentityService, LayoutNavDockbar, LayoutNavFlyout, LayoutNavMinimal, LayoutNavNavbar, LayoutNavSidebar, LayoutUser, LayoutWrapperDefault };