@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
@@ -0,0 +1,650 @@
1
+ import { r as NavigationItemContentComponent, t as NavigationItemComponent } from "./ojiepermana-angular-navigation-navigation-item.component-Basp5SIk.mjs";
2
+ import { t as NavigationEntryGridComponent } from "./ojiepermana-angular-navigation-navigation-entry-grid.component-mpK9Ar08.mjs";
3
+ import * as i0 from "@angular/core";
4
+ import { Component, ElementRef, Injector, afterNextRender, computed, effect, inject, input, output, signal } from "@angular/core";
5
+ import { cn } from "@ojiepermana/angular/component/utils/core";
6
+ import { NAVIGATION_ADAPTER } from "@ojiepermana/angular/navigation/core";
7
+ import { DOCUMENT } from "@angular/common";
8
+ import { IconComponent } from "@ojiepermana/angular/component/icon";
9
+ var NavigationFlyoutMenuComponent = class NavigationFlyoutMenuComponent {
10
+ nav = inject(NAVIGATION_ADAPTER);
11
+ host = inject(ElementRef);
12
+ injector = inject(Injector);
13
+ document = inject(DOCUMENT);
14
+ navId = input("default", ...ngDevMode ? [{ debugName: "navId" }] : /* istanbul ignore next */ []);
15
+ items = input([], ...ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []);
16
+ label = input("Menu", ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
17
+ icon = input(null, ...ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []);
18
+ iconOnly = input(false, ...ngDevMode ? [{ debugName: "iconOnly" }] : /* istanbul ignore next */ []);
19
+ iconPosition = input("start", ...ngDevMode ? [{ debugName: "iconPosition" }] : /* istanbul ignore next */ []);
20
+ variant = input("button", ...ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []);
21
+ floating = input(false, ...ngDevMode ? [{ debugName: "floating" }] : /* istanbul ignore next */ []);
22
+ viewport = input(false, ...ngDevMode ? [{ debugName: "viewport" }] : /* istanbul ignore next */ []);
23
+ triggerClass = input("", ...ngDevMode ? [{ debugName: "triggerClass" }] : /* istanbul ignore next */ []);
24
+ triggerButtonClass = input("", ...ngDevMode ? [{ debugName: "triggerButtonClass" }] : /* istanbul ignore next */ []);
25
+ position = input("top", ...ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []);
26
+ typeStyle = input("flat", ...ngDevMode ? [{ debugName: "typeStyle" }] : /* istanbul ignore next */ []);
27
+ compact = input(false, ...ngDevMode ? [{ debugName: "compact" }] : /* istanbul ignore next */ []);
28
+ itemClass = input("", ...ngDevMode ? [{ debugName: "itemClass" }] : /* istanbul ignore next */ []);
29
+ groupClass = input("", ...ngDevMode ? [{ debugName: "groupClass" }] : /* istanbul ignore next */ []);
30
+ activeIds = input(/* @__PURE__ */ new Set(), ...ngDevMode ? [{ debugName: "activeIds" }] : /* istanbul ignore next */ []);
31
+ activeUrl = input(null, ...ngDevMode ? [{ debugName: "activeUrl" }] : /* istanbul ignore next */ []);
32
+ iconTemplate = input(void 0, ...ngDevMode ? [{ debugName: "iconTemplate" }] : /* istanbul ignore next */ []);
33
+ collapseTree = input("stairs", ...ngDevMode ? [{ debugName: "collapseTree" }] : /* istanbul ignore next */ []);
34
+ openedIds = input([], ...ngDevMode ? [{ debugName: "openedIds" }] : /* istanbul ignore next */ []);
35
+ openedIdsChange = output();
36
+ itemSelected = output();
37
+ panelId = computed(() => `nav-flyout-${this.navId()}`, ...ngDevMode ? [{ debugName: "panelId" }] : /* istanbul ignore next */ []);
38
+ panelContentId = computed(() => `${this.panelId()}-content`, ...ngDevMode ? [{ debugName: "panelContentId" }] : /* istanbul ignore next */ []);
39
+ isBorderRail = computed(() => this.typeStyle() === "border-rail", ...ngDevMode ? [{ debugName: "isBorderRail" }] : /* istanbul ignore next */ []);
40
+ isBottom = computed(() => this.position() === "bottom", ...ngDevMode ? [{ debugName: "isBottom" }] : /* istanbul ignore next */ []);
41
+ showIconOnly = computed(() => this.compact() || this.iconOnly(), ...ngDevMode ? [{ debugName: "showIconOnly" }] : /* istanbul ignore next */ []);
42
+ triggerIcon = computed(() => this.icon() ?? (this.showIconOnly() ? "menu" : null), ...ngDevMode ? [{ debugName: "triggerIcon" }] : /* istanbul ignore next */ []);
43
+ navItemClass = computed(() => cn(this.itemClass(), this.isBorderRail() && "h-(--nav-item-height) rounded-none hover:bg-transparent hover:text-primary"), ...ngDevMode ? [{ debugName: "navItemClass" }] : /* istanbul ignore next */ []);
44
+ branches = computed(() => this.items().filter((item) => item.children.length > 0), ...ngDevMode ? [{ debugName: "branches" }] : /* istanbul ignore next */ []);
45
+ activeBranch = computed(() => {
46
+ const key = this.nav.currentPanelKey(this.navId());
47
+ return this.branches().find((branch) => branch.key === key) ?? null;
48
+ }, ...ngDevMode ? [{ debugName: "activeBranch" }] : /* istanbul ignore next */ []);
49
+ floatingAlignEnd = signal(true, ...ngDevMode ? [{ debugName: "floatingAlignEnd" }] : /* istanbul ignore next */ []);
50
+ panelPlacement = signal(null, ...ngDevMode ? [{ debugName: "panelPlacement" }] : /* istanbul ignore next */ []);
51
+ panelWrapperClasses = computed(() => {
52
+ if (this.floating()) {
53
+ if (this.viewport()) return "fixed inset-x-0 top-0 z-50 m-0";
54
+ return cn("absolute z-50", this.floatingAlignEnd() ? "right-0" : "left-0", this.isBottom() ? "bottom-full mb-2" : "top-full mt-2");
55
+ }
56
+ return cn("absolute z-50", !this.panelPlacement() && cn("inset-x-0", this.isBottom() ? "bottom-0" : "top-0"));
57
+ }, ...ngDevMode ? [{ debugName: "panelWrapperClasses" }] : /* istanbul ignore next */ []);
58
+ menuClasses = computed(() => cn("flex min-h-0 flex-1", this.isBottom() ? "flex-col-reverse" : "flex-col"), ...ngDevMode ? [{ debugName: "menuClasses" }] : /* istanbul ignore next */ []);
59
+ barRowClasses = computed(() => cn("flex min-h-(--layout-topbar-height) shrink-0 items-center gap-2 bg-popover px-2 md:px-3", this.isBottom() ? "border-t" : "border-b", this.isBorderRail() ? "border-border" : "border-[hsl(var(--border)/var(--section-border-opacity))]"), ...ngDevMode ? [{ debugName: "barRowClasses" }] : /* istanbul ignore next */ []);
60
+ scrollRegionClasses = computed(() => cn("min-h-0 flex-1 overflow-x-hidden overflow-y-auto overscroll-contain"), ...ngDevMode ? [{ debugName: "scrollRegionClasses" }] : /* istanbul ignore next */ []);
61
+ drawerOpen = computed(() => this.nav.isDrawerOpen(this.navId()), ...ngDevMode ? [{ debugName: "drawerOpen" }] : /* istanbul ignore next */ []);
62
+ isOpen() {
63
+ return this.drawerOpen();
64
+ }
65
+ constructor() {
66
+ effect((onCleanup) => {
67
+ if (!this.drawerOpen()) return;
68
+ const view = this.document.defaultView;
69
+ const onDocumentClick = (event) => this.closeOnOutsideClick(event);
70
+ const onResize = () => this.measurePanelPlacement();
71
+ this.document.addEventListener("click", onDocumentClick);
72
+ view?.addEventListener("resize", onResize);
73
+ onCleanup(() => {
74
+ this.document.removeEventListener("click", onDocumentClick);
75
+ view?.removeEventListener("resize", onResize);
76
+ });
77
+ });
78
+ }
79
+ measurePanelPlacement() {
80
+ if (this.floating()) {
81
+ const rect = this.host.nativeElement.querySelector("[data-navigation-flyout-trigger=\"true\"]")?.getBoundingClientRect();
82
+ if (rect && typeof window !== "undefined" && window.innerWidth > 0) this.floatingAlignEnd.set(rect.left + rect.width / 2 > window.innerWidth / 2);
83
+ this.panelPlacement.set(null);
84
+ return;
85
+ }
86
+ const hostEl = this.host.nativeElement;
87
+ let container = hostEl.closest("[data-navigation-id]")?.parentElement ?? hostEl.parentElement;
88
+ while (container && container.getBoundingClientRect().width <= 0 && container.parentElement) container = container.parentElement;
89
+ const containerRect = (container ?? hostEl).getBoundingClientRect();
90
+ const hostRect = hostEl.getBoundingClientRect();
91
+ if (containerRect.width <= 0) {
92
+ this.panelPlacement.set(null);
93
+ return;
94
+ }
95
+ this.panelPlacement.set({
96
+ left: containerRect.left - hostRect.left,
97
+ top: containerRect.top - hostRect.top,
98
+ bottom: hostRect.bottom - containerRect.bottom,
99
+ width: containerRect.width
100
+ });
101
+ }
102
+ toggleFlyout() {
103
+ if (this.isOpen()) {
104
+ this.closeFlyout(false);
105
+ return;
106
+ }
107
+ this.measurePanelPlacement();
108
+ this.nav.openDrawer(this.navId());
109
+ const current = this.nav.currentPanelKey(this.navId());
110
+ const branches = this.branches();
111
+ if (!branches.some((branch) => branch.key === current)) {
112
+ const first = branches.find((branch) => !branch.disabled) ?? branches[0];
113
+ if (first) this.nav.openPanel(this.navId(), first);
114
+ }
115
+ afterNextRender({ read: () => this.focusFirstPanelItem() }, { injector: this.injector });
116
+ }
117
+ closeFlyout(restoreFocus) {
118
+ this.nav.closeDrawer(this.navId());
119
+ if (restoreFocus) queueMicrotask(() => this.focusTrigger());
120
+ }
121
+ onEscape(event) {
122
+ if (!this.isOpen()) return;
123
+ event.preventDefault();
124
+ this.closeFlyout(true);
125
+ }
126
+ closeOnOutsideClick(event) {
127
+ const target = event.target;
128
+ if (target && !this.host.nativeElement.contains(target)) this.closeFlyout(false);
129
+ }
130
+ itemState = computed(() => {
131
+ const activeIds = this.activeIds();
132
+ const activeUrl = this.activeUrl();
133
+ const openKey = this.nav.currentPanelKey(this.navId());
134
+ return new Map(this.items().map((item) => {
135
+ const active = this.nav.isItemActive(item, activeIds, activeUrl);
136
+ const open = openKey === item.key;
137
+ return [item, {
138
+ active,
139
+ open,
140
+ tabClasses: this.computeTabClasses(item, active, open)
141
+ }];
142
+ }));
143
+ }, ...ngDevMode ? [{ debugName: "itemState" }] : /* istanbul ignore next */ []);
144
+ isItemActive(item) {
145
+ return this.itemState().get(item)?.active ?? false;
146
+ }
147
+ isBranchOpen(item) {
148
+ return this.itemState().get(item)?.open ?? false;
149
+ }
150
+ openBranch(item) {
151
+ this.nav.openPanel(this.navId(), item);
152
+ }
153
+ hostClasses = computed(() => this.floating() ? cn("fixed z-50 block w-max", this.triggerClass() || "right-6 top-6") : cn("relative block w-full", this.triggerClass()), ...ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []);
154
+ triggerClasses() {
155
+ const iconOnly = this.showIconOnly();
156
+ const base = "nav-trigger group/nav inline-flex min-w-0 items-center transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring";
157
+ if (this.variant() === "link") return cn(base, "nav-text underline-offset-4 hover:underline", iconOnly ? "h-(--nav-item-height) w-(--nav-item-height) justify-center gap-0" : "gap-1.5", this.isOpen() ? "text-primary underline" : "text-primary/90 hover:text-primary", this.itemClass(), this.triggerButtonClass());
158
+ if (this.variant() === "plain") return cn(base, "gap-(--nav-item-gap) rounded-md nav-text", iconOnly ? "h-(--nav-item-height) w-(--nav-item-height) justify-center" : "h-(--nav-item-height) px-(--nav-item-padding-x)", this.isOpen() ? "bg-accent text-foreground" : "text-foreground/80 hover:bg-accent hover:text-accent-foreground", this.itemClass(), this.triggerButtonClass());
159
+ return cn(base, "h-(--nav-item-height) gap-(--nav-item-gap) rounded-full border border-[hsl(var(--border)/var(--section-border-opacity))] bg-background px-4 nav-text shadow-sm", iconOnly && "w-(--nav-item-height) justify-center gap-0 px-0", this.isBorderRail() ? this.isOpen() ? "text-primary" : "text-foreground/80 hover:text-primary" : this.isOpen() ? "bg-accent text-foreground" : "text-foreground/80 hover:bg-accent hover:text-accent-foreground", this.itemClass(), this.triggerButtonClass());
160
+ }
161
+ panelCardClasses() {
162
+ if (this.floating()) return cn("relative flex flex-col rounded-xl border border-[hsl(var(--border)/var(--section-border-opacity))] bg-popover text-popover-foreground shadow-2xl", "max-h-[min(28rem,70vh)] overflow-hidden");
163
+ return cn("relative flex flex-col bg-popover text-popover-foreground shadow-2xl", "max-h-[calc(100dvh-5rem)] overflow-hidden", this.isBorderRail() ? cn("rounded-none border-border", this.isBottom() ? "border-t" : "border-b") : "rounded-[var(--layout-frame-radius)] border border-[hsl(var(--border)/var(--section-border-opacity))]");
164
+ }
165
+ rowClasses() {
166
+ return cn("m-0 flex min-w-0 flex-1 list-none items-center justify-center gap-1 overflow-x-auto overscroll-x-contain py-2");
167
+ }
168
+ groupContainerClasses(item) {
169
+ return cn("flex -my-2 self-stretch", this.groupClass(), item.classes?.container);
170
+ }
171
+ tabClasses(item) {
172
+ return this.itemState().get(item)?.tabClasses ?? "";
173
+ }
174
+ computeTabClasses(item, active, open) {
175
+ return cn("nav-trigger nav-text group/nav inline-flex h-full min-h-(--nav-item-height) min-w-0 items-center gap-(--nav-item-gap) rounded-md px-(--nav-item-padding-x) transition-colors", this.isBottom() ? "rounded-t-none" : "rounded-b-none", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50", this.isBorderRail() ? open || active ? "rounded-none text-primary" : "rounded-none text-foreground/80 hover:text-primary" : open ? "bg-accent text-foreground" : active ? "text-foreground hover:bg-accent hover:text-accent-foreground" : "text-foreground/80 hover:bg-accent hover:text-accent-foreground", item.classes?.wrapper, this.itemClass());
176
+ }
177
+ tabChevronClasses(item) {
178
+ return cn("shrink-0 self-center text-(length:--nav-icon-size-sub) text-current transition-transform duration-200", this.isBranchOpen(item) && "rotate-90");
179
+ }
180
+ onRowKeydown(event) {
181
+ if (event.key !== "ArrowRight" && event.key !== "ArrowLeft" && event.key !== "ArrowDown") return;
182
+ const rowItems = Array.from(this.host.nativeElement.querySelectorAll("[data-navigation-flyout-row=\"true\"] [role=\"menuitem\"]"));
183
+ const currentIndex = rowItems.indexOf(document.activeElement);
184
+ if (currentIndex === -1) return;
185
+ event.preventDefault();
186
+ if (event.key === "ArrowDown") {
187
+ this.host.nativeElement.querySelector("[data-navigation-flyout-content] [role=\"menuitem\"]")?.focus();
188
+ return;
189
+ }
190
+ rowItems[(currentIndex + (event.key === "ArrowRight" ? 1 : -1) + rowItems.length) % rowItems.length]?.focus();
191
+ }
192
+ focusFirstPanelItem() {
193
+ const panel = this.host.nativeElement.querySelector("[data-navigation-flyout-panel=\"true\"]");
194
+ if (!panel) return;
195
+ (panel.querySelector("[data-navigation-flyout-row=\"true\"] [role=\"menuitem\"], [data-navigation-flyout-row=\"true\"] a[href]") ?? panel.querySelector("[role=\"menuitem\"], a[href]"))?.focus();
196
+ }
197
+ focusTrigger() {
198
+ this.host.nativeElement.querySelector("[data-navigation-flyout-trigger=\"true\"]")?.focus();
199
+ }
200
+ static ɵfac = i0.ɵɵngDeclareFactory({
201
+ minVersion: "12.0.0",
202
+ version: "22.2.0",
203
+ ngImport: i0,
204
+ type: NavigationFlyoutMenuComponent,
205
+ deps: [],
206
+ target: i0.ɵɵFactoryTarget.Component
207
+ });
208
+ static ɵcmp = i0.ɵɵngDeclareComponent({
209
+ minVersion: "17.0.0",
210
+ version: "22.2.0",
211
+ type: NavigationFlyoutMenuComponent,
212
+ isStandalone: true,
213
+ selector: "NavigationFlyoutMenu",
214
+ inputs: {
215
+ navId: {
216
+ classPropertyName: "navId",
217
+ publicName: "navId",
218
+ isSignal: true,
219
+ isRequired: false,
220
+ transformFunction: null
221
+ },
222
+ items: {
223
+ classPropertyName: "items",
224
+ publicName: "items",
225
+ isSignal: true,
226
+ isRequired: false,
227
+ transformFunction: null
228
+ },
229
+ label: {
230
+ classPropertyName: "label",
231
+ publicName: "label",
232
+ isSignal: true,
233
+ isRequired: false,
234
+ transformFunction: null
235
+ },
236
+ icon: {
237
+ classPropertyName: "icon",
238
+ publicName: "icon",
239
+ isSignal: true,
240
+ isRequired: false,
241
+ transformFunction: null
242
+ },
243
+ iconOnly: {
244
+ classPropertyName: "iconOnly",
245
+ publicName: "iconOnly",
246
+ isSignal: true,
247
+ isRequired: false,
248
+ transformFunction: null
249
+ },
250
+ iconPosition: {
251
+ classPropertyName: "iconPosition",
252
+ publicName: "iconPosition",
253
+ isSignal: true,
254
+ isRequired: false,
255
+ transformFunction: null
256
+ },
257
+ variant: {
258
+ classPropertyName: "variant",
259
+ publicName: "variant",
260
+ isSignal: true,
261
+ isRequired: false,
262
+ transformFunction: null
263
+ },
264
+ floating: {
265
+ classPropertyName: "floating",
266
+ publicName: "floating",
267
+ isSignal: true,
268
+ isRequired: false,
269
+ transformFunction: null
270
+ },
271
+ viewport: {
272
+ classPropertyName: "viewport",
273
+ publicName: "viewport",
274
+ isSignal: true,
275
+ isRequired: false,
276
+ transformFunction: null
277
+ },
278
+ triggerClass: {
279
+ classPropertyName: "triggerClass",
280
+ publicName: "triggerClass",
281
+ isSignal: true,
282
+ isRequired: false,
283
+ transformFunction: null
284
+ },
285
+ triggerButtonClass: {
286
+ classPropertyName: "triggerButtonClass",
287
+ publicName: "triggerButtonClass",
288
+ isSignal: true,
289
+ isRequired: false,
290
+ transformFunction: null
291
+ },
292
+ position: {
293
+ classPropertyName: "position",
294
+ publicName: "position",
295
+ isSignal: true,
296
+ isRequired: false,
297
+ transformFunction: null
298
+ },
299
+ typeStyle: {
300
+ classPropertyName: "typeStyle",
301
+ publicName: "typeStyle",
302
+ isSignal: true,
303
+ isRequired: false,
304
+ transformFunction: null
305
+ },
306
+ compact: {
307
+ classPropertyName: "compact",
308
+ publicName: "compact",
309
+ isSignal: true,
310
+ isRequired: false,
311
+ transformFunction: null
312
+ },
313
+ itemClass: {
314
+ classPropertyName: "itemClass",
315
+ publicName: "itemClass",
316
+ isSignal: true,
317
+ isRequired: false,
318
+ transformFunction: null
319
+ },
320
+ groupClass: {
321
+ classPropertyName: "groupClass",
322
+ publicName: "groupClass",
323
+ isSignal: true,
324
+ isRequired: false,
325
+ transformFunction: null
326
+ },
327
+ activeIds: {
328
+ classPropertyName: "activeIds",
329
+ publicName: "activeIds",
330
+ isSignal: true,
331
+ isRequired: false,
332
+ transformFunction: null
333
+ },
334
+ activeUrl: {
335
+ classPropertyName: "activeUrl",
336
+ publicName: "activeUrl",
337
+ isSignal: true,
338
+ isRequired: false,
339
+ transformFunction: null
340
+ },
341
+ iconTemplate: {
342
+ classPropertyName: "iconTemplate",
343
+ publicName: "iconTemplate",
344
+ isSignal: true,
345
+ isRequired: false,
346
+ transformFunction: null
347
+ },
348
+ collapseTree: {
349
+ classPropertyName: "collapseTree",
350
+ publicName: "collapseTree",
351
+ isSignal: true,
352
+ isRequired: false,
353
+ transformFunction: null
354
+ },
355
+ openedIds: {
356
+ classPropertyName: "openedIds",
357
+ publicName: "openedIds",
358
+ isSignal: true,
359
+ isRequired: false,
360
+ transformFunction: null
361
+ }
362
+ },
363
+ outputs: {
364
+ openedIdsChange: "openedIdsChange",
365
+ itemSelected: "itemSelected"
366
+ },
367
+ host: {
368
+ listeners: { "keydown.escape": "onEscape($event)" },
369
+ properties: { "class": "hostClasses()" }
370
+ },
371
+ ngImport: i0,
372
+ template: "<button\n type=\"button\"\n data-navigation-flyout-trigger=\"true\"\n [class]=\"triggerClasses()\"\n aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"isOpen() ? panelId() : null\"\n [attr.aria-label]=\"showIconOnly() ? label() : null\"\n [attr.title]=\"showIconOnly() ? label() : null\"\n (click)=\"toggleFlyout()\"\n>\n @if (showIconOnly()) {\n <Icon\n [name]=\"triggerIcon() ?? 'menu'\"\n size=\"inherit\"\n [fill]=\"1\"\n class=\"text-(length:--nav-icon-size) text-current\"\n />\n } @else {\n @if (iconPosition() === 'start' && triggerIcon(); as iconName) {\n <Icon\n [name]=\"iconName\"\n size=\"inherit\"\n [fill]=\"1\"\n class=\"shrink-0 text-(length:--nav-icon-size) text-current\"\n />\n }\n\n <span class=\"truncate\">{{ label() }}</span>\n\n @if (iconPosition() === 'end' && triggerIcon(); as iconName) {\n <Icon\n [name]=\"iconName\"\n size=\"inherit\"\n [fill]=\"1\"\n class=\"shrink-0 text-(length:--nav-icon-size) text-current\"\n />\n }\n }\n</button>\n\n@if (isOpen()) {\n <div\n [id]=\"panelId()\"\n data-navigation-flyout-panel=\"true\"\n [attr.data-navigation-flyout-floating]=\"floating() ? 'true' : null\"\n [class]=\"panelWrapperClasses()\"\n [style.left.px]=\"floating() ? null : panelPlacement()?.left\"\n [style.top.px]=\"floating() || isBottom() ? null : panelPlacement()?.top\"\n [style.bottom.px]=\"!floating() && isBottom() ? panelPlacement()?.bottom : null\"\n [style.width.px]=\"floating() ? null : panelPlacement()?.width\"\n >\n <div\n [attr.data-navigation-flyout-floating-card]=\"floating() ? 'true' : null\"\n [class]=\"panelCardClasses()\"\n >\n <div data-navigation-flyout-menu-layout=\"true\" [class]=\"menuClasses()\">\n <!-- ROW 1 = bar (sticky, menutup bar trigger), struktur seperti bar navbar:\n Header (kiri) | menu item (tengah) | Footer (kanan). Hanya ROW 2 (grid child)\n di bawah bar yang ikut scroll. -->\n <div data-navigation-flyout-bar=\"true\" [class]=\"barRowClasses()\">\n <ng-content select=\"NavigationHeader\" />\n\n <ul\n role=\"menu\"\n tabindex=\"-1\"\n data-navigation-flyout-row=\"true\"\n [class]=\"rowClasses()\"\n [attr.aria-label]=\"label()\"\n (keydown)=\"onRowKeydown($event)\"\n >\n @for (item of items(); track item.key) {\n @switch (item.type) {\n @case ('divider') {\n <li role=\"separator\" class=\"mx-1 h-5 w-px bg-border\"></li>\n }\n @case ('spacer') {\n <li role=\"none\" aria-hidden=\"true\" class=\"flex-1\"></li>\n }\n @default {\n @if (item.children.length > 0) {\n <li\n role=\"none\"\n [class]=\"groupContainerClasses(item)\"\n [attr.data-navigation-item-key]=\"item.key\"\n >\n <button\n type=\"button\"\n role=\"menuitem\"\n data-navigation-flyout-tab=\"true\"\n [class]=\"tabClasses(item)\"\n [attr.aria-expanded]=\"isBranchOpen(item)\"\n [attr.aria-controls]=\"isBranchOpen(item) ? panelContentId() : null\"\n [disabled]=\"item.disabled || null\"\n (click)=\"openBranch(item)\"\n >\n <NavigationItemContent\n [item]=\"item\"\n [active]=\"isItemActive(item)\"\n [compact]=\"false\"\n [orientation]=\"'horizontal'\"\n [level]=\"0\"\n [iconTemplate]=\"iconTemplate()\"\n />\n <Icon\n name=\"chevron_right\"\n size=\"inherit\"\n [class]=\"tabChevronClasses(item)\"\n />\n </button>\n </li>\n } @else {\n <li\n NavigationItem\n [navId]=\"navId()\"\n [item]=\"item\"\n [level]=\"0\"\n [orientation]=\"'horizontal'\"\n [compact]=\"false\"\n [itemClass]=\"navItemClass()\"\n [activeIds]=\"activeIds()\"\n [activeUrl]=\"activeUrl()\"\n [iconTemplate]=\"iconTemplate()\"\n [collapseTree]=\"collapseTree()\"\n [openedIds]=\"openedIds()\"\n (openedIdsChange)=\"openedIdsChange.emit($event)\"\n (itemSelected)=\"itemSelected.emit($event)\"\n ></li>\n }\n }\n }\n }\n </ul>\n\n <ng-content select=\"NavigationFooter\" />\n </div>\n\n <!-- ROW 2 = child dari menu item aktif; HANYA area ini yang men-scroll. -->\n <div\n [id]=\"panelContentId()\"\n data-navigation-flyout-scroll=\"true\"\n [attr.role]=\"activeBranch() ? 'menu' : null\"\n [attr.aria-label]=\"activeBranch()?.title || null\"\n [class]=\"scrollRegionClasses()\"\n >\n @if (activeBranch(); as branch) {\n <NavigationEntryGrid\n [navId]=\"navId()\"\n [branch]=\"branch\"\n [typeStyle]=\"typeStyle()\"\n [itemClass]=\"itemClass()\"\n [activeIds]=\"activeIds()\"\n [activeUrl]=\"activeUrl()\"\n [iconTemplate]=\"iconTemplate()\"\n [collapseTree]=\"collapseTree()\"\n [openedIds]=\"openedIds()\"\n (openedIdsChange)=\"openedIdsChange.emit($event)\"\n (itemSelected)=\"itemSelected.emit($event)\"\n />\n }\n </div>\n </div>\n </div>\n </div>\n}\n",
373
+ styles: ["[data-navigation-flyout-floating=true]{width:var(--nav-flyout-floating-width, min(22rem, 85vw));max-width:var(--nav-flyout-floating-max-width, 85vw)}[data-navigation-flyout-floating-card=true]{border-radius:var(--nav-flyout-floating-radius, var(--radius-xl))}[data-navigation-flyout-panel=true]{-webkit-app-region:no-drag;app-region:no-drag}\n"],
374
+ dependencies: [
375
+ {
376
+ kind: "component",
377
+ type: IconComponent,
378
+ selector: "Icon",
379
+ inputs: [
380
+ "name",
381
+ "class",
382
+ "size",
383
+ "fill",
384
+ "weight",
385
+ "grade",
386
+ "opticalSize"
387
+ ]
388
+ },
389
+ {
390
+ kind: "component",
391
+ type: NavigationEntryGridComponent,
392
+ selector: "NavigationEntryGrid",
393
+ inputs: [
394
+ "navId",
395
+ "branch",
396
+ "typeStyle",
397
+ "itemClass",
398
+ "activeIds",
399
+ "activeUrl",
400
+ "iconTemplate",
401
+ "collapseTree",
402
+ "openedIds"
403
+ ],
404
+ outputs: ["openedIdsChange", "itemSelected"]
405
+ },
406
+ {
407
+ kind: "component",
408
+ type: NavigationItemComponent,
409
+ selector: "li[NavigationItem]",
410
+ inputs: [
411
+ "navId",
412
+ "item",
413
+ "level",
414
+ "orientation",
415
+ "compact",
416
+ "itemClass",
417
+ "activeIds",
418
+ "activeUrl",
419
+ "iconTemplate",
420
+ "tooltip-position",
421
+ "collapseTree",
422
+ "straightRail",
423
+ "stairsRail",
424
+ "straightRailActive",
425
+ "firstInBranch",
426
+ "lastInBranch",
427
+ "openedIds"
428
+ ],
429
+ outputs: ["openedIdsChange", "itemSelected"]
430
+ },
431
+ {
432
+ kind: "component",
433
+ type: NavigationItemContentComponent,
434
+ selector: "NavigationItemContent",
435
+ inputs: [
436
+ "item",
437
+ "active",
438
+ "compact",
439
+ "orientation",
440
+ "level",
441
+ "iconTemplate"
442
+ ]
443
+ }
444
+ ]
445
+ });
446
+ };
447
+ i0.ɵɵngDeclareClassMetadata({
448
+ minVersion: "12.0.0",
449
+ version: "22.2.0",
450
+ ngImport: i0,
451
+ type: NavigationFlyoutMenuComponent,
452
+ decorators: [{
453
+ type: Component,
454
+ args: [{
455
+ selector: "NavigationFlyoutMenu",
456
+ imports: [
457
+ IconComponent,
458
+ NavigationEntryGridComponent,
459
+ NavigationItemComponent,
460
+ NavigationItemContentComponent
461
+ ],
462
+ host: {
463
+ "[class]": "hostClasses()",
464
+ "(keydown.escape)": "onEscape($event)"
465
+ },
466
+ template: "<button\n type=\"button\"\n data-navigation-flyout-trigger=\"true\"\n [class]=\"triggerClasses()\"\n aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-controls]=\"isOpen() ? panelId() : null\"\n [attr.aria-label]=\"showIconOnly() ? label() : null\"\n [attr.title]=\"showIconOnly() ? label() : null\"\n (click)=\"toggleFlyout()\"\n>\n @if (showIconOnly()) {\n <Icon\n [name]=\"triggerIcon() ?? 'menu'\"\n size=\"inherit\"\n [fill]=\"1\"\n class=\"text-(length:--nav-icon-size) text-current\"\n />\n } @else {\n @if (iconPosition() === 'start' && triggerIcon(); as iconName) {\n <Icon\n [name]=\"iconName\"\n size=\"inherit\"\n [fill]=\"1\"\n class=\"shrink-0 text-(length:--nav-icon-size) text-current\"\n />\n }\n\n <span class=\"truncate\">{{ label() }}</span>\n\n @if (iconPosition() === 'end' && triggerIcon(); as iconName) {\n <Icon\n [name]=\"iconName\"\n size=\"inherit\"\n [fill]=\"1\"\n class=\"shrink-0 text-(length:--nav-icon-size) text-current\"\n />\n }\n }\n</button>\n\n@if (isOpen()) {\n <div\n [id]=\"panelId()\"\n data-navigation-flyout-panel=\"true\"\n [attr.data-navigation-flyout-floating]=\"floating() ? 'true' : null\"\n [class]=\"panelWrapperClasses()\"\n [style.left.px]=\"floating() ? null : panelPlacement()?.left\"\n [style.top.px]=\"floating() || isBottom() ? null : panelPlacement()?.top\"\n [style.bottom.px]=\"!floating() && isBottom() ? panelPlacement()?.bottom : null\"\n [style.width.px]=\"floating() ? null : panelPlacement()?.width\"\n >\n <div\n [attr.data-navigation-flyout-floating-card]=\"floating() ? 'true' : null\"\n [class]=\"panelCardClasses()\"\n >\n <div data-navigation-flyout-menu-layout=\"true\" [class]=\"menuClasses()\">\n <!-- ROW 1 = bar (sticky, menutup bar trigger), struktur seperti bar navbar:\n Header (kiri) | menu item (tengah) | Footer (kanan). Hanya ROW 2 (grid child)\n di bawah bar yang ikut scroll. -->\n <div data-navigation-flyout-bar=\"true\" [class]=\"barRowClasses()\">\n <ng-content select=\"NavigationHeader\" />\n\n <ul\n role=\"menu\"\n tabindex=\"-1\"\n data-navigation-flyout-row=\"true\"\n [class]=\"rowClasses()\"\n [attr.aria-label]=\"label()\"\n (keydown)=\"onRowKeydown($event)\"\n >\n @for (item of items(); track item.key) {\n @switch (item.type) {\n @case ('divider') {\n <li role=\"separator\" class=\"mx-1 h-5 w-px bg-border\"></li>\n }\n @case ('spacer') {\n <li role=\"none\" aria-hidden=\"true\" class=\"flex-1\"></li>\n }\n @default {\n @if (item.children.length > 0) {\n <li\n role=\"none\"\n [class]=\"groupContainerClasses(item)\"\n [attr.data-navigation-item-key]=\"item.key\"\n >\n <button\n type=\"button\"\n role=\"menuitem\"\n data-navigation-flyout-tab=\"true\"\n [class]=\"tabClasses(item)\"\n [attr.aria-expanded]=\"isBranchOpen(item)\"\n [attr.aria-controls]=\"isBranchOpen(item) ? panelContentId() : null\"\n [disabled]=\"item.disabled || null\"\n (click)=\"openBranch(item)\"\n >\n <NavigationItemContent\n [item]=\"item\"\n [active]=\"isItemActive(item)\"\n [compact]=\"false\"\n [orientation]=\"'horizontal'\"\n [level]=\"0\"\n [iconTemplate]=\"iconTemplate()\"\n />\n <Icon\n name=\"chevron_right\"\n size=\"inherit\"\n [class]=\"tabChevronClasses(item)\"\n />\n </button>\n </li>\n } @else {\n <li\n NavigationItem\n [navId]=\"navId()\"\n [item]=\"item\"\n [level]=\"0\"\n [orientation]=\"'horizontal'\"\n [compact]=\"false\"\n [itemClass]=\"navItemClass()\"\n [activeIds]=\"activeIds()\"\n [activeUrl]=\"activeUrl()\"\n [iconTemplate]=\"iconTemplate()\"\n [collapseTree]=\"collapseTree()\"\n [openedIds]=\"openedIds()\"\n (openedIdsChange)=\"openedIdsChange.emit($event)\"\n (itemSelected)=\"itemSelected.emit($event)\"\n ></li>\n }\n }\n }\n }\n </ul>\n\n <ng-content select=\"NavigationFooter\" />\n </div>\n\n <!-- ROW 2 = child dari menu item aktif; HANYA area ini yang men-scroll. -->\n <div\n [id]=\"panelContentId()\"\n data-navigation-flyout-scroll=\"true\"\n [attr.role]=\"activeBranch() ? 'menu' : null\"\n [attr.aria-label]=\"activeBranch()?.title || null\"\n [class]=\"scrollRegionClasses()\"\n >\n @if (activeBranch(); as branch) {\n <NavigationEntryGrid\n [navId]=\"navId()\"\n [branch]=\"branch\"\n [typeStyle]=\"typeStyle()\"\n [itemClass]=\"itemClass()\"\n [activeIds]=\"activeIds()\"\n [activeUrl]=\"activeUrl()\"\n [iconTemplate]=\"iconTemplate()\"\n [collapseTree]=\"collapseTree()\"\n [openedIds]=\"openedIds()\"\n (openedIdsChange)=\"openedIdsChange.emit($event)\"\n (itemSelected)=\"itemSelected.emit($event)\"\n />\n }\n </div>\n </div>\n </div>\n </div>\n}\n",
467
+ styles: ["[data-navigation-flyout-floating=true]{width:var(--nav-flyout-floating-width, min(22rem, 85vw));max-width:var(--nav-flyout-floating-max-width, 85vw)}[data-navigation-flyout-floating-card=true]{border-radius:var(--nav-flyout-floating-radius, var(--radius-xl))}[data-navigation-flyout-panel=true]{-webkit-app-region:no-drag;app-region:no-drag}\n"]
468
+ }]
469
+ }],
470
+ ctorParameters: () => [],
471
+ propDecorators: {
472
+ navId: [{
473
+ type: i0.Input,
474
+ args: [{
475
+ isSignal: true,
476
+ alias: "navId",
477
+ required: false
478
+ }]
479
+ }],
480
+ items: [{
481
+ type: i0.Input,
482
+ args: [{
483
+ isSignal: true,
484
+ alias: "items",
485
+ required: false
486
+ }]
487
+ }],
488
+ label: [{
489
+ type: i0.Input,
490
+ args: [{
491
+ isSignal: true,
492
+ alias: "label",
493
+ required: false
494
+ }]
495
+ }],
496
+ icon: [{
497
+ type: i0.Input,
498
+ args: [{
499
+ isSignal: true,
500
+ alias: "icon",
501
+ required: false
502
+ }]
503
+ }],
504
+ iconOnly: [{
505
+ type: i0.Input,
506
+ args: [{
507
+ isSignal: true,
508
+ alias: "iconOnly",
509
+ required: false
510
+ }]
511
+ }],
512
+ iconPosition: [{
513
+ type: i0.Input,
514
+ args: [{
515
+ isSignal: true,
516
+ alias: "iconPosition",
517
+ required: false
518
+ }]
519
+ }],
520
+ variant: [{
521
+ type: i0.Input,
522
+ args: [{
523
+ isSignal: true,
524
+ alias: "variant",
525
+ required: false
526
+ }]
527
+ }],
528
+ floating: [{
529
+ type: i0.Input,
530
+ args: [{
531
+ isSignal: true,
532
+ alias: "floating",
533
+ required: false
534
+ }]
535
+ }],
536
+ viewport: [{
537
+ type: i0.Input,
538
+ args: [{
539
+ isSignal: true,
540
+ alias: "viewport",
541
+ required: false
542
+ }]
543
+ }],
544
+ triggerClass: [{
545
+ type: i0.Input,
546
+ args: [{
547
+ isSignal: true,
548
+ alias: "triggerClass",
549
+ required: false
550
+ }]
551
+ }],
552
+ triggerButtonClass: [{
553
+ type: i0.Input,
554
+ args: [{
555
+ isSignal: true,
556
+ alias: "triggerButtonClass",
557
+ required: false
558
+ }]
559
+ }],
560
+ position: [{
561
+ type: i0.Input,
562
+ args: [{
563
+ isSignal: true,
564
+ alias: "position",
565
+ required: false
566
+ }]
567
+ }],
568
+ typeStyle: [{
569
+ type: i0.Input,
570
+ args: [{
571
+ isSignal: true,
572
+ alias: "typeStyle",
573
+ required: false
574
+ }]
575
+ }],
576
+ compact: [{
577
+ type: i0.Input,
578
+ args: [{
579
+ isSignal: true,
580
+ alias: "compact",
581
+ required: false
582
+ }]
583
+ }],
584
+ itemClass: [{
585
+ type: i0.Input,
586
+ args: [{
587
+ isSignal: true,
588
+ alias: "itemClass",
589
+ required: false
590
+ }]
591
+ }],
592
+ groupClass: [{
593
+ type: i0.Input,
594
+ args: [{
595
+ isSignal: true,
596
+ alias: "groupClass",
597
+ required: false
598
+ }]
599
+ }],
600
+ activeIds: [{
601
+ type: i0.Input,
602
+ args: [{
603
+ isSignal: true,
604
+ alias: "activeIds",
605
+ required: false
606
+ }]
607
+ }],
608
+ activeUrl: [{
609
+ type: i0.Input,
610
+ args: [{
611
+ isSignal: true,
612
+ alias: "activeUrl",
613
+ required: false
614
+ }]
615
+ }],
616
+ iconTemplate: [{
617
+ type: i0.Input,
618
+ args: [{
619
+ isSignal: true,
620
+ alias: "iconTemplate",
621
+ required: false
622
+ }]
623
+ }],
624
+ collapseTree: [{
625
+ type: i0.Input,
626
+ args: [{
627
+ isSignal: true,
628
+ alias: "collapseTree",
629
+ required: false
630
+ }]
631
+ }],
632
+ openedIds: [{
633
+ type: i0.Input,
634
+ args: [{
635
+ isSignal: true,
636
+ alias: "openedIds",
637
+ required: false
638
+ }]
639
+ }],
640
+ openedIdsChange: [{
641
+ type: i0.Output,
642
+ args: ["openedIdsChange"]
643
+ }],
644
+ itemSelected: [{
645
+ type: i0.Output,
646
+ args: ["itemSelected"]
647
+ }]
648
+ }
649
+ });
650
+ export { NavigationFlyoutMenuComponent };