@ojiepermana/angular 21.3.0 → 21.3.3

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 (441) hide show
  1. package/README.md +76 -12
  2. package/component/accordion/package.json +4 -0
  3. package/component/alert/package.json +4 -0
  4. package/component/alert-dialog/package.json +4 -0
  5. package/component/aspect-ratio/package.json +4 -0
  6. package/component/avatar/package.json +4 -0
  7. package/component/badge/package.json +4 -0
  8. package/component/breadcrumb/package.json +4 -0
  9. package/component/button/package.json +4 -0
  10. package/component/button-group/package.json +4 -0
  11. package/component/calendar/package.json +4 -0
  12. package/component/card/package.json +4 -0
  13. package/component/carousel/package.json +4 -0
  14. package/component/chart/area/package.json +4 -0
  15. package/component/chart/bar/package.json +4 -0
  16. package/component/chart/line/package.json +4 -0
  17. package/component/chart/package.json +4 -0
  18. package/component/chart/pie/package.json +4 -0
  19. package/component/chart/radar/package.json +4 -0
  20. package/component/chart/radial/package.json +4 -0
  21. package/component/chart/scatter/package.json +4 -0
  22. package/component/checkbox/package.json +4 -0
  23. package/component/collapsible/package.json +4 -0
  24. package/component/combobox/package.json +4 -0
  25. package/component/command/package.json +4 -0
  26. package/component/context-menu/package.json +4 -0
  27. package/component/date-picker/package.json +4 -0
  28. package/component/dialog/package.json +4 -0
  29. package/component/drawer/package.json +4 -0
  30. package/component/dropdown-menu/package.json +4 -0
  31. package/component/form/package.json +4 -0
  32. package/component/input/package.json +4 -0
  33. package/component/input-group/package.json +4 -0
  34. package/component/item/package.json +4 -0
  35. package/component/label/package.json +4 -0
  36. package/component/pagination/package.json +4 -0
  37. package/component/popover/package.json +4 -0
  38. package/component/progress/package.json +4 -0
  39. package/component/radio/package.json +4 -0
  40. package/component/scroll-area/package.json +4 -0
  41. package/component/select/package.json +4 -0
  42. package/component/separator/package.json +4 -0
  43. package/component/sheet/package.json +4 -0
  44. package/component/skeleton/package.json +4 -0
  45. package/component/slider/package.json +4 -0
  46. package/component/switch/package.json +4 -0
  47. package/component/table/package.json +4 -0
  48. package/component/tabs/package.json +4 -0
  49. package/component/textarea/package.json +4 -0
  50. package/component/toast/package.json +4 -0
  51. package/component/tooltip/package.json +4 -0
  52. package/component/utils/package.json +4 -0
  53. package/fesm2022/{ojiepermana-angular-ui-component-accordion.mjs → ojiepermana-angular-component-accordion.mjs} +1 -1
  54. package/fesm2022/ojiepermana-angular-component-accordion.mjs.map +1 -0
  55. package/fesm2022/{ojiepermana-angular-ui-component-alert-dialog.mjs → ojiepermana-angular-component-alert-dialog.mjs} +1 -1
  56. package/fesm2022/ojiepermana-angular-component-alert-dialog.mjs.map +1 -0
  57. package/fesm2022/{ojiepermana-angular-ui-component-alert.mjs → ojiepermana-angular-component-alert.mjs} +1 -1
  58. package/fesm2022/ojiepermana-angular-component-alert.mjs.map +1 -0
  59. package/fesm2022/{ojiepermana-angular-ui-component-aspect-ratio.mjs → ojiepermana-angular-component-aspect-ratio.mjs} +1 -1
  60. package/fesm2022/ojiepermana-angular-component-aspect-ratio.mjs.map +1 -0
  61. package/fesm2022/{ojiepermana-angular-ui-component-avatar.mjs → ojiepermana-angular-component-avatar.mjs} +1 -1
  62. package/fesm2022/ojiepermana-angular-component-avatar.mjs.map +1 -0
  63. package/fesm2022/{ojiepermana-angular-ui-component-badge.mjs → ojiepermana-angular-component-badge.mjs} +1 -1
  64. package/fesm2022/ojiepermana-angular-component-badge.mjs.map +1 -0
  65. package/fesm2022/{ojiepermana-angular-ui-component-breadcrumb.mjs → ojiepermana-angular-component-breadcrumb.mjs} +1 -1
  66. package/fesm2022/ojiepermana-angular-component-breadcrumb.mjs.map +1 -0
  67. package/fesm2022/{ojiepermana-angular-ui-component-button-group.mjs → ojiepermana-angular-component-button-group.mjs} +1 -1
  68. package/fesm2022/ojiepermana-angular-component-button-group.mjs.map +1 -0
  69. package/fesm2022/{ojiepermana-angular-ui-component-button.mjs → ojiepermana-angular-component-button.mjs} +1 -1
  70. package/fesm2022/ojiepermana-angular-component-button.mjs.map +1 -0
  71. package/fesm2022/{ojiepermana-angular-ui-component-calendar.mjs → ojiepermana-angular-component-calendar.mjs} +1 -1
  72. package/fesm2022/ojiepermana-angular-component-calendar.mjs.map +1 -0
  73. package/fesm2022/{ojiepermana-angular-ui-component-card.mjs → ojiepermana-angular-component-card.mjs} +1 -1
  74. package/fesm2022/ojiepermana-angular-component-card.mjs.map +1 -0
  75. package/fesm2022/{ojiepermana-angular-ui-component-carousel.mjs → ojiepermana-angular-component-carousel.mjs} +1 -1
  76. package/fesm2022/ojiepermana-angular-component-carousel.mjs.map +1 -0
  77. package/fesm2022/{ojiepermana-angular-ui-component-chart-area.mjs → ojiepermana-angular-component-chart-area.mjs} +1 -1
  78. package/fesm2022/ojiepermana-angular-component-chart-area.mjs.map +1 -0
  79. package/fesm2022/{ojiepermana-angular-ui-component-chart-bar.mjs → ojiepermana-angular-component-chart-bar.mjs} +1 -1
  80. package/fesm2022/ojiepermana-angular-component-chart-bar.mjs.map +1 -0
  81. package/fesm2022/{ojiepermana-angular-ui-component-chart-line.mjs → ojiepermana-angular-component-chart-line.mjs} +1 -1
  82. package/fesm2022/ojiepermana-angular-component-chart-line.mjs.map +1 -0
  83. package/fesm2022/{ojiepermana-angular-ui-component-chart-pie.mjs → ojiepermana-angular-component-chart-pie.mjs} +1 -1
  84. package/fesm2022/ojiepermana-angular-component-chart-pie.mjs.map +1 -0
  85. package/fesm2022/{ojiepermana-angular-ui-component-chart-radar.mjs → ojiepermana-angular-component-chart-radar.mjs} +1 -1
  86. package/fesm2022/ojiepermana-angular-component-chart-radar.mjs.map +1 -0
  87. package/fesm2022/{ojiepermana-angular-ui-component-chart-radial.mjs → ojiepermana-angular-component-chart-radial.mjs} +1 -1
  88. package/fesm2022/ojiepermana-angular-component-chart-radial.mjs.map +1 -0
  89. package/fesm2022/{ojiepermana-angular-ui-component-chart-scatter.mjs → ojiepermana-angular-component-chart-scatter.mjs} +1 -1
  90. package/fesm2022/ojiepermana-angular-component-chart-scatter.mjs.map +1 -0
  91. package/fesm2022/{ojiepermana-angular-ui-component-chart.mjs → ojiepermana-angular-component-chart.mjs} +1 -1
  92. package/fesm2022/ojiepermana-angular-component-chart.mjs.map +1 -0
  93. package/fesm2022/{ojiepermana-angular-ui-component-checkbox.mjs → ojiepermana-angular-component-checkbox.mjs} +1 -1
  94. package/fesm2022/ojiepermana-angular-component-checkbox.mjs.map +1 -0
  95. package/fesm2022/{ojiepermana-angular-ui-component-collapsible.mjs → ojiepermana-angular-component-collapsible.mjs} +1 -1
  96. package/fesm2022/ojiepermana-angular-component-collapsible.mjs.map +1 -0
  97. package/fesm2022/{ojiepermana-angular-ui-component-combobox.mjs → ojiepermana-angular-component-combobox.mjs} +1 -1
  98. package/fesm2022/ojiepermana-angular-component-combobox.mjs.map +1 -0
  99. package/fesm2022/{ojiepermana-angular-ui-component-command.mjs → ojiepermana-angular-component-command.mjs} +1 -1
  100. package/fesm2022/ojiepermana-angular-component-command.mjs.map +1 -0
  101. package/fesm2022/{ojiepermana-angular-ui-component-context-menu.mjs → ojiepermana-angular-component-context-menu.mjs} +1 -1
  102. package/fesm2022/ojiepermana-angular-component-context-menu.mjs.map +1 -0
  103. package/fesm2022/{ojiepermana-angular-ui-component-date-picker.mjs → ojiepermana-angular-component-date-picker.mjs} +1 -1
  104. package/fesm2022/ojiepermana-angular-component-date-picker.mjs.map +1 -0
  105. package/fesm2022/{ojiepermana-angular-ui-component-dialog.mjs → ojiepermana-angular-component-dialog.mjs} +1 -1
  106. package/fesm2022/ojiepermana-angular-component-dialog.mjs.map +1 -0
  107. package/fesm2022/{ojiepermana-angular-ui-component-drawer.mjs → ojiepermana-angular-component-drawer.mjs} +1 -1
  108. package/fesm2022/ojiepermana-angular-component-drawer.mjs.map +1 -0
  109. package/fesm2022/{ojiepermana-angular-ui-component-dropdown-menu.mjs → ojiepermana-angular-component-dropdown-menu.mjs} +1 -1
  110. package/fesm2022/ojiepermana-angular-component-dropdown-menu.mjs.map +1 -0
  111. package/fesm2022/{ojiepermana-angular-ui-component-form.mjs → ojiepermana-angular-component-form.mjs} +1 -1
  112. package/fesm2022/ojiepermana-angular-component-form.mjs.map +1 -0
  113. package/fesm2022/{ojiepermana-angular-ui-component-input-group.mjs → ojiepermana-angular-component-input-group.mjs} +1 -1
  114. package/fesm2022/ojiepermana-angular-component-input-group.mjs.map +1 -0
  115. package/fesm2022/{ojiepermana-angular-ui-component-input.mjs → ojiepermana-angular-component-input.mjs} +1 -1
  116. package/fesm2022/ojiepermana-angular-component-input.mjs.map +1 -0
  117. package/fesm2022/{ojiepermana-angular-ui-component-item.mjs → ojiepermana-angular-component-item.mjs} +1 -1
  118. package/fesm2022/ojiepermana-angular-component-item.mjs.map +1 -0
  119. package/fesm2022/{ojiepermana-angular-ui-component-label.mjs → ojiepermana-angular-component-label.mjs} +1 -1
  120. package/fesm2022/ojiepermana-angular-component-label.mjs.map +1 -0
  121. package/fesm2022/{ojiepermana-angular-ui-component-pagination.mjs → ojiepermana-angular-component-pagination.mjs} +1 -1
  122. package/fesm2022/ojiepermana-angular-component-pagination.mjs.map +1 -0
  123. package/fesm2022/{ojiepermana-angular-ui-component-popover.mjs → ojiepermana-angular-component-popover.mjs} +1 -1
  124. package/fesm2022/ojiepermana-angular-component-popover.mjs.map +1 -0
  125. package/fesm2022/{ojiepermana-angular-ui-component-progress.mjs → ojiepermana-angular-component-progress.mjs} +1 -1
  126. package/fesm2022/ojiepermana-angular-component-progress.mjs.map +1 -0
  127. package/fesm2022/{ojiepermana-angular-ui-component-radio.mjs → ojiepermana-angular-component-radio.mjs} +1 -1
  128. package/fesm2022/ojiepermana-angular-component-radio.mjs.map +1 -0
  129. package/fesm2022/{ojiepermana-angular-ui-component-scroll-area.mjs → ojiepermana-angular-component-scroll-area.mjs} +1 -1
  130. package/fesm2022/ojiepermana-angular-component-scroll-area.mjs.map +1 -0
  131. package/fesm2022/{ojiepermana-angular-ui-component-select.mjs → ojiepermana-angular-component-select.mjs} +1 -1
  132. package/fesm2022/ojiepermana-angular-component-select.mjs.map +1 -0
  133. package/fesm2022/{ojiepermana-angular-ui-component-separator.mjs → ojiepermana-angular-component-separator.mjs} +1 -1
  134. package/fesm2022/ojiepermana-angular-component-separator.mjs.map +1 -0
  135. package/fesm2022/{ojiepermana-angular-ui-component-sheet.mjs → ojiepermana-angular-component-sheet.mjs} +1 -1
  136. package/fesm2022/ojiepermana-angular-component-sheet.mjs.map +1 -0
  137. package/fesm2022/{ojiepermana-angular-ui-component-skeleton.mjs → ojiepermana-angular-component-skeleton.mjs} +1 -1
  138. package/fesm2022/ojiepermana-angular-component-skeleton.mjs.map +1 -0
  139. package/fesm2022/{ojiepermana-angular-ui-component-slider.mjs → ojiepermana-angular-component-slider.mjs} +1 -1
  140. package/fesm2022/ojiepermana-angular-component-slider.mjs.map +1 -0
  141. package/fesm2022/{ojiepermana-angular-ui-component-switch.mjs → ojiepermana-angular-component-switch.mjs} +1 -1
  142. package/fesm2022/ojiepermana-angular-component-switch.mjs.map +1 -0
  143. package/fesm2022/{ojiepermana-angular-ui-component-table.mjs → ojiepermana-angular-component-table.mjs} +1 -1
  144. package/fesm2022/ojiepermana-angular-component-table.mjs.map +1 -0
  145. package/fesm2022/{ojiepermana-angular-ui-component-tabs.mjs → ojiepermana-angular-component-tabs.mjs} +1 -1
  146. package/fesm2022/ojiepermana-angular-component-tabs.mjs.map +1 -0
  147. package/fesm2022/{ojiepermana-angular-ui-component-textarea.mjs → ojiepermana-angular-component-textarea.mjs} +1 -1
  148. package/fesm2022/ojiepermana-angular-component-textarea.mjs.map +1 -0
  149. package/fesm2022/{ojiepermana-angular-ui-component-toast.mjs → ojiepermana-angular-component-toast.mjs} +1 -1
  150. package/fesm2022/ojiepermana-angular-component-toast.mjs.map +1 -0
  151. package/fesm2022/{ojiepermana-angular-ui-component-tooltip.mjs → ojiepermana-angular-component-tooltip.mjs} +1 -1
  152. package/fesm2022/ojiepermana-angular-component-tooltip.mjs.map +1 -0
  153. package/fesm2022/{ojiepermana-angular-ui-component-utils.mjs → ojiepermana-angular-component-utils.mjs} +1 -1
  154. package/fesm2022/ojiepermana-angular-component-utils.mjs.map +1 -0
  155. package/fesm2022/ojiepermana-angular-generator-api.mjs +2 -1
  156. package/fesm2022/ojiepermana-angular-generator-api.mjs.map +1 -1
  157. package/fesm2022/{ojiepermana-angular-layout-theme.mjs → ojiepermana-angular-layout-component.mjs} +1 -1
  158. package/fesm2022/ojiepermana-angular-layout-component.mjs.map +1 -0
  159. package/fesm2022/ojiepermana-angular-layout-empty.mjs +49 -0
  160. package/fesm2022/ojiepermana-angular-layout-empty.mjs.map +1 -0
  161. package/fesm2022/ojiepermana-angular-layout-horizontal.mjs +119 -0
  162. package/fesm2022/ojiepermana-angular-layout-horizontal.mjs.map +1 -0
  163. package/fesm2022/ojiepermana-angular-layout-provider.mjs +21 -0
  164. package/fesm2022/ojiepermana-angular-layout-provider.mjs.map +1 -0
  165. package/fesm2022/ojiepermana-angular-layout-services.mjs +114 -0
  166. package/fesm2022/ojiepermana-angular-layout-services.mjs.map +1 -0
  167. package/fesm2022/ojiepermana-angular-layout-shell.mjs +48 -0
  168. package/fesm2022/ojiepermana-angular-layout-shell.mjs.map +1 -0
  169. package/fesm2022/ojiepermana-angular-layout-token-directive.mjs +27 -0
  170. package/fesm2022/ojiepermana-angular-layout-token-directive.mjs.map +1 -0
  171. package/fesm2022/ojiepermana-angular-layout-token.mjs +33 -0
  172. package/fesm2022/ojiepermana-angular-layout-token.mjs.map +1 -0
  173. package/fesm2022/ojiepermana-angular-layout-vertical.mjs +113 -0
  174. package/fesm2022/ojiepermana-angular-layout-vertical.mjs.map +1 -0
  175. package/fesm2022/ojiepermana-angular-layout.mjs +140 -137
  176. package/fesm2022/ojiepermana-angular-layout.mjs.map +1 -1
  177. package/fesm2022/ojiepermana-angular-navigation-demo-data.mjs +334 -0
  178. package/fesm2022/ojiepermana-angular-navigation-demo-data.mjs.map +1 -0
  179. package/fesm2022/ojiepermana-angular-navigation-icon.mjs.map +1 -1
  180. package/fesm2022/ojiepermana-angular-navigation-item.mjs +548 -0
  181. package/fesm2022/ojiepermana-angular-navigation-item.mjs.map +1 -0
  182. package/fesm2022/ojiepermana-angular-navigation-service.mjs +204 -0
  183. package/fesm2022/ojiepermana-angular-navigation-service.mjs.map +1 -0
  184. package/fesm2022/ojiepermana-angular-navigation-sidebar.mjs +373 -0
  185. package/fesm2022/ojiepermana-angular-navigation-sidebar.mjs.map +1 -0
  186. package/fesm2022/ojiepermana-angular-navigation-topbar.mjs +433 -0
  187. package/fesm2022/ojiepermana-angular-navigation-topbar.mjs.map +1 -0
  188. package/fesm2022/ojiepermana-angular-navigation-types.mjs +4 -0
  189. package/fesm2022/ojiepermana-angular-navigation-types.mjs.map +1 -0
  190. package/fesm2022/ojiepermana-angular-theme-provider.mjs +35 -0
  191. package/fesm2022/ojiepermana-angular-theme-provider.mjs.map +1 -0
  192. package/fesm2022/ojiepermana-angular-theme-services.mjs +286 -0
  193. package/fesm2022/ojiepermana-angular-theme-services.mjs.map +1 -0
  194. package/fesm2022/ojiepermana-angular-theme-token.mjs +56 -0
  195. package/fesm2022/ojiepermana-angular-theme-token.mjs.map +1 -0
  196. package/fesm2022/ojiepermana-angular-theme.mjs +31 -56
  197. package/fesm2022/ojiepermana-angular-theme.mjs.map +1 -1
  198. package/fesm2022/ojiepermana-angular.mjs +3 -4
  199. package/fesm2022/ojiepermana-angular.mjs.map +1 -1
  200. package/generator/api/README.md +18 -15
  201. package/generator/api/bin/schematics/init/index.js +4 -2
  202. package/generator/api/bin/src/config/schema.js +2 -1
  203. package/generator/api/bin/src/emit/navigation.js +1 -1
  204. package/generator/api/bin/src/layout/per-domain.js +7 -3
  205. package/generator/api/sdk.config.example.json +4 -2
  206. package/layout/component/package.json +4 -0
  207. package/layout/empty/package.json +4 -0
  208. package/layout/horizontal/package.json +4 -0
  209. package/layout/provider/package.json +4 -0
  210. package/layout/services/package.json +4 -0
  211. package/layout/shell/package.json +4 -0
  212. package/layout/token/directive/package.json +4 -0
  213. package/layout/token/package.json +4 -0
  214. package/layout/vertical/package.json +4 -0
  215. package/navigation/demo-data/package.json +4 -0
  216. package/navigation/icon/package.json +4 -0
  217. package/navigation/item/package.json +4 -0
  218. package/navigation/service/package.json +4 -0
  219. package/navigation/sidebar/package.json +4 -0
  220. package/navigation/topbar/package.json +4 -0
  221. package/navigation/types/package.json +4 -0
  222. package/package.json +196 -128
  223. package/theme/README.md +67 -0
  224. package/theme/provider/package.json +4 -0
  225. package/theme/services/package.json +4 -0
  226. package/theme/styles/index.css +12 -7
  227. package/theme/token/package.json +4 -0
  228. package/types/{ojiepermana-angular-ui-component-chart.d.ts → ojiepermana-angular-component-chart.d.ts} +15 -15
  229. package/types/ojiepermana-angular-generator-api.d.ts +2 -1
  230. package/types/ojiepermana-angular-layout-empty.d.ts +22 -0
  231. package/types/ojiepermana-angular-layout-horizontal.d.ts +36 -0
  232. package/types/ojiepermana-angular-layout-provider.d.ts +6 -0
  233. package/types/ojiepermana-angular-layout-services.d.ts +25 -0
  234. package/types/ojiepermana-angular-layout-shell.d.ts +8 -0
  235. package/types/ojiepermana-angular-layout-token-directive.d.ts +13 -0
  236. package/types/ojiepermana-angular-layout-token.d.ts +36 -0
  237. package/types/ojiepermana-angular-layout-vertical.d.ts +38 -0
  238. package/types/ojiepermana-angular-layout.d.ts +26 -25
  239. package/types/ojiepermana-angular-navigation-demo-data.d.ts +5 -0
  240. package/types/ojiepermana-angular-navigation-item.d.ts +54 -0
  241. package/types/ojiepermana-angular-navigation-service.d.ts +77 -0
  242. package/types/ojiepermana-angular-navigation-sidebar.d.ts +75 -0
  243. package/types/ojiepermana-angular-navigation-topbar.d.ts +54 -0
  244. package/types/ojiepermana-angular-navigation-types.d.ts +129 -0
  245. package/types/ojiepermana-angular-theme-provider.d.ts +11 -0
  246. package/types/ojiepermana-angular-theme-services.d.ts +55 -0
  247. package/types/ojiepermana-angular-theme-token.d.ts +57 -0
  248. package/types/ojiepermana-angular-theme.d.ts +11 -66
  249. package/fesm2022/ojiepermana-angular-layout-theme.mjs.map +0 -1
  250. package/fesm2022/ojiepermana-angular-navigation.mjs +0 -2317
  251. package/fesm2022/ojiepermana-angular-navigation.mjs.map +0 -1
  252. package/fesm2022/ojiepermana-angular-ui-component-accordion.mjs.map +0 -1
  253. package/fesm2022/ojiepermana-angular-ui-component-alert-dialog.mjs.map +0 -1
  254. package/fesm2022/ojiepermana-angular-ui-component-alert.mjs.map +0 -1
  255. package/fesm2022/ojiepermana-angular-ui-component-aspect-ratio.mjs.map +0 -1
  256. package/fesm2022/ojiepermana-angular-ui-component-avatar.mjs.map +0 -1
  257. package/fesm2022/ojiepermana-angular-ui-component-badge.mjs.map +0 -1
  258. package/fesm2022/ojiepermana-angular-ui-component-breadcrumb.mjs.map +0 -1
  259. package/fesm2022/ojiepermana-angular-ui-component-button-group.mjs.map +0 -1
  260. package/fesm2022/ojiepermana-angular-ui-component-button.mjs.map +0 -1
  261. package/fesm2022/ojiepermana-angular-ui-component-calendar.mjs.map +0 -1
  262. package/fesm2022/ojiepermana-angular-ui-component-card.mjs.map +0 -1
  263. package/fesm2022/ojiepermana-angular-ui-component-carousel.mjs.map +0 -1
  264. package/fesm2022/ojiepermana-angular-ui-component-chart-area.mjs.map +0 -1
  265. package/fesm2022/ojiepermana-angular-ui-component-chart-bar.mjs.map +0 -1
  266. package/fesm2022/ojiepermana-angular-ui-component-chart-line.mjs.map +0 -1
  267. package/fesm2022/ojiepermana-angular-ui-component-chart-pie.mjs.map +0 -1
  268. package/fesm2022/ojiepermana-angular-ui-component-chart-radar.mjs.map +0 -1
  269. package/fesm2022/ojiepermana-angular-ui-component-chart-radial.mjs.map +0 -1
  270. package/fesm2022/ojiepermana-angular-ui-component-chart-scatter.mjs.map +0 -1
  271. package/fesm2022/ojiepermana-angular-ui-component-chart.mjs.map +0 -1
  272. package/fesm2022/ojiepermana-angular-ui-component-checkbox.mjs.map +0 -1
  273. package/fesm2022/ojiepermana-angular-ui-component-collapsible.mjs.map +0 -1
  274. package/fesm2022/ojiepermana-angular-ui-component-combobox.mjs.map +0 -1
  275. package/fesm2022/ojiepermana-angular-ui-component-command.mjs.map +0 -1
  276. package/fesm2022/ojiepermana-angular-ui-component-context-menu.mjs.map +0 -1
  277. package/fesm2022/ojiepermana-angular-ui-component-date-picker.mjs.map +0 -1
  278. package/fesm2022/ojiepermana-angular-ui-component-dialog.mjs.map +0 -1
  279. package/fesm2022/ojiepermana-angular-ui-component-drawer.mjs.map +0 -1
  280. package/fesm2022/ojiepermana-angular-ui-component-dropdown-menu.mjs.map +0 -1
  281. package/fesm2022/ojiepermana-angular-ui-component-form.mjs.map +0 -1
  282. package/fesm2022/ojiepermana-angular-ui-component-input-group.mjs.map +0 -1
  283. package/fesm2022/ojiepermana-angular-ui-component-input.mjs.map +0 -1
  284. package/fesm2022/ojiepermana-angular-ui-component-item.mjs.map +0 -1
  285. package/fesm2022/ojiepermana-angular-ui-component-label.mjs.map +0 -1
  286. package/fesm2022/ojiepermana-angular-ui-component-pagination.mjs.map +0 -1
  287. package/fesm2022/ojiepermana-angular-ui-component-popover.mjs.map +0 -1
  288. package/fesm2022/ojiepermana-angular-ui-component-progress.mjs.map +0 -1
  289. package/fesm2022/ojiepermana-angular-ui-component-radio.mjs.map +0 -1
  290. package/fesm2022/ojiepermana-angular-ui-component-scroll-area.mjs.map +0 -1
  291. package/fesm2022/ojiepermana-angular-ui-component-select.mjs.map +0 -1
  292. package/fesm2022/ojiepermana-angular-ui-component-separator.mjs.map +0 -1
  293. package/fesm2022/ojiepermana-angular-ui-component-sheet.mjs.map +0 -1
  294. package/fesm2022/ojiepermana-angular-ui-component-skeleton.mjs.map +0 -1
  295. package/fesm2022/ojiepermana-angular-ui-component-slider.mjs.map +0 -1
  296. package/fesm2022/ojiepermana-angular-ui-component-switch.mjs.map +0 -1
  297. package/fesm2022/ojiepermana-angular-ui-component-table.mjs.map +0 -1
  298. package/fesm2022/ojiepermana-angular-ui-component-tabs.mjs.map +0 -1
  299. package/fesm2022/ojiepermana-angular-ui-component-textarea.mjs.map +0 -1
  300. package/fesm2022/ojiepermana-angular-ui-component-toast.mjs.map +0 -1
  301. package/fesm2022/ojiepermana-angular-ui-component-tooltip.mjs.map +0 -1
  302. package/fesm2022/ojiepermana-angular-ui-component-utils.mjs.map +0 -1
  303. package/layout/theme/package.json +0 -4
  304. package/navigation/package.json +0 -4
  305. package/navigation-icon/package.json +0 -4
  306. package/types/ojiepermana-angular-navigation.d.ts +0 -375
  307. package/ui/component/accordion/package.json +0 -4
  308. package/ui/component/alert/package.json +0 -4
  309. package/ui/component/alert-dialog/package.json +0 -4
  310. package/ui/component/aspect-ratio/package.json +0 -4
  311. package/ui/component/avatar/package.json +0 -4
  312. package/ui/component/badge/package.json +0 -4
  313. package/ui/component/breadcrumb/package.json +0 -4
  314. package/ui/component/button/package.json +0 -4
  315. package/ui/component/button-group/package.json +0 -4
  316. package/ui/component/calendar/package.json +0 -4
  317. package/ui/component/card/package.json +0 -4
  318. package/ui/component/carousel/package.json +0 -4
  319. package/ui/component/chart/area/package.json +0 -4
  320. package/ui/component/chart/bar/package.json +0 -4
  321. package/ui/component/chart/line/package.json +0 -4
  322. package/ui/component/chart/package.json +0 -4
  323. package/ui/component/chart/pie/package.json +0 -4
  324. package/ui/component/chart/radar/package.json +0 -4
  325. package/ui/component/chart/radial/package.json +0 -4
  326. package/ui/component/chart/scatter/package.json +0 -4
  327. package/ui/component/checkbox/package.json +0 -4
  328. package/ui/component/collapsible/package.json +0 -4
  329. package/ui/component/combobox/package.json +0 -4
  330. package/ui/component/command/package.json +0 -4
  331. package/ui/component/context-menu/package.json +0 -4
  332. package/ui/component/date-picker/package.json +0 -4
  333. package/ui/component/dialog/package.json +0 -4
  334. package/ui/component/drawer/package.json +0 -4
  335. package/ui/component/dropdown-menu/package.json +0 -4
  336. package/ui/component/form/package.json +0 -4
  337. package/ui/component/input/package.json +0 -4
  338. package/ui/component/input-group/package.json +0 -4
  339. package/ui/component/item/package.json +0 -4
  340. package/ui/component/label/package.json +0 -4
  341. package/ui/component/pagination/package.json +0 -4
  342. package/ui/component/popover/package.json +0 -4
  343. package/ui/component/progress/package.json +0 -4
  344. package/ui/component/radio/package.json +0 -4
  345. package/ui/component/scroll-area/package.json +0 -4
  346. package/ui/component/select/package.json +0 -4
  347. package/ui/component/separator/package.json +0 -4
  348. package/ui/component/sheet/package.json +0 -4
  349. package/ui/component/skeleton/package.json +0 -4
  350. package/ui/component/slider/package.json +0 -4
  351. package/ui/component/switch/package.json +0 -4
  352. package/ui/component/table/package.json +0 -4
  353. package/ui/component/tabs/package.json +0 -4
  354. package/ui/component/textarea/package.json +0 -4
  355. package/ui/component/toast/package.json +0 -4
  356. package/ui/component/tooltip/package.json +0 -4
  357. package/ui/component/utils/package.json +0 -4
  358. /package/{ui/component → component}/chart/README.md +0 -0
  359. /package/theme/styles/{themes/library/_components.css → foundation/components.css} +0 -0
  360. /package/theme/styles/{themes/library/_layers.css → foundation/layers.css} +0 -0
  361. /package/theme/styles/{themes/library/_tokens.css → foundation/tokens.css} +0 -0
  362. /package/theme/styles/{themes/library/_material-overrides.css → integrations/material.css} +0 -0
  363. /package/theme/styles/{themes → integrations}/tailwind.css +0 -0
  364. /package/theme/styles/{themes/library → variants}/color/amber.css +0 -0
  365. /package/theme/styles/{themes/library → variants}/color/base.css +0 -0
  366. /package/theme/styles/{themes/library → variants}/color/blue.css +0 -0
  367. /package/theme/styles/{themes/library → variants}/color/cyan.css +0 -0
  368. /package/theme/styles/{themes/library → variants}/color/emerald.css +0 -0
  369. /package/theme/styles/{themes/library → variants}/color/fuchsia.css +0 -0
  370. /package/theme/styles/{themes/library → variants}/color/green.css +0 -0
  371. /package/theme/styles/{themes/library → variants}/color/index.css +0 -0
  372. /package/theme/styles/{themes/library → variants}/color/indigo.css +0 -0
  373. /package/theme/styles/{themes/library → variants}/color/lime.css +0 -0
  374. /package/theme/styles/{themes/library → variants}/color/orange.css +0 -0
  375. /package/theme/styles/{themes/library → variants}/color/pink.css +0 -0
  376. /package/theme/styles/{themes/library → variants}/color/purple.css +0 -0
  377. /package/theme/styles/{themes/library → variants}/color/red.css +0 -0
  378. /package/theme/styles/{themes/library → variants}/color/rose.css +0 -0
  379. /package/theme/styles/{themes/library → variants}/color/sky.css +0 -0
  380. /package/theme/styles/{themes/library → variants}/color/teal.css +0 -0
  381. /package/theme/styles/{themes/library → variants}/color/violet.css +0 -0
  382. /package/theme/styles/{themes/library → variants}/color/yellow.css +0 -0
  383. /package/theme/styles/{themes → variants}/mode/dark.css +0 -0
  384. /package/theme/styles/{themes → variants}/mode/index.css +0 -0
  385. /package/theme/styles/{themes → variants}/mode/light.css +0 -0
  386. /package/theme/styles/{themes/library → variants}/style/brutal.css +0 -0
  387. /package/theme/styles/{themes/library → variants}/style/default.css +0 -0
  388. /package/theme/styles/{themes/library → variants}/style/index.css +0 -0
  389. /package/theme/styles/{themes/library → variants}/style/sharp.css +0 -0
  390. /package/theme/styles/{themes/library → variants}/style/soft.css +0 -0
  391. /package/types/{ojiepermana-angular-ui-component-accordion.d.ts → ojiepermana-angular-component-accordion.d.ts} +0 -0
  392. /package/types/{ojiepermana-angular-ui-component-alert-dialog.d.ts → ojiepermana-angular-component-alert-dialog.d.ts} +0 -0
  393. /package/types/{ojiepermana-angular-ui-component-alert.d.ts → ojiepermana-angular-component-alert.d.ts} +0 -0
  394. /package/types/{ojiepermana-angular-ui-component-aspect-ratio.d.ts → ojiepermana-angular-component-aspect-ratio.d.ts} +0 -0
  395. /package/types/{ojiepermana-angular-ui-component-avatar.d.ts → ojiepermana-angular-component-avatar.d.ts} +0 -0
  396. /package/types/{ojiepermana-angular-ui-component-badge.d.ts → ojiepermana-angular-component-badge.d.ts} +0 -0
  397. /package/types/{ojiepermana-angular-ui-component-breadcrumb.d.ts → ojiepermana-angular-component-breadcrumb.d.ts} +0 -0
  398. /package/types/{ojiepermana-angular-ui-component-button-group.d.ts → ojiepermana-angular-component-button-group.d.ts} +0 -0
  399. /package/types/{ojiepermana-angular-ui-component-button.d.ts → ojiepermana-angular-component-button.d.ts} +0 -0
  400. /package/types/{ojiepermana-angular-ui-component-calendar.d.ts → ojiepermana-angular-component-calendar.d.ts} +0 -0
  401. /package/types/{ojiepermana-angular-ui-component-card.d.ts → ojiepermana-angular-component-card.d.ts} +0 -0
  402. /package/types/{ojiepermana-angular-ui-component-carousel.d.ts → ojiepermana-angular-component-carousel.d.ts} +0 -0
  403. /package/types/{ojiepermana-angular-ui-component-chart-area.d.ts → ojiepermana-angular-component-chart-area.d.ts} +0 -0
  404. /package/types/{ojiepermana-angular-ui-component-chart-bar.d.ts → ojiepermana-angular-component-chart-bar.d.ts} +0 -0
  405. /package/types/{ojiepermana-angular-ui-component-chart-line.d.ts → ojiepermana-angular-component-chart-line.d.ts} +0 -0
  406. /package/types/{ojiepermana-angular-ui-component-chart-pie.d.ts → ojiepermana-angular-component-chart-pie.d.ts} +0 -0
  407. /package/types/{ojiepermana-angular-ui-component-chart-radar.d.ts → ojiepermana-angular-component-chart-radar.d.ts} +0 -0
  408. /package/types/{ojiepermana-angular-ui-component-chart-radial.d.ts → ojiepermana-angular-component-chart-radial.d.ts} +0 -0
  409. /package/types/{ojiepermana-angular-ui-component-chart-scatter.d.ts → ojiepermana-angular-component-chart-scatter.d.ts} +0 -0
  410. /package/types/{ojiepermana-angular-ui-component-checkbox.d.ts → ojiepermana-angular-component-checkbox.d.ts} +0 -0
  411. /package/types/{ojiepermana-angular-ui-component-collapsible.d.ts → ojiepermana-angular-component-collapsible.d.ts} +0 -0
  412. /package/types/{ojiepermana-angular-ui-component-combobox.d.ts → ojiepermana-angular-component-combobox.d.ts} +0 -0
  413. /package/types/{ojiepermana-angular-ui-component-command.d.ts → ojiepermana-angular-component-command.d.ts} +0 -0
  414. /package/types/{ojiepermana-angular-ui-component-context-menu.d.ts → ojiepermana-angular-component-context-menu.d.ts} +0 -0
  415. /package/types/{ojiepermana-angular-ui-component-date-picker.d.ts → ojiepermana-angular-component-date-picker.d.ts} +0 -0
  416. /package/types/{ojiepermana-angular-ui-component-dialog.d.ts → ojiepermana-angular-component-dialog.d.ts} +0 -0
  417. /package/types/{ojiepermana-angular-ui-component-drawer.d.ts → ojiepermana-angular-component-drawer.d.ts} +0 -0
  418. /package/types/{ojiepermana-angular-ui-component-dropdown-menu.d.ts → ojiepermana-angular-component-dropdown-menu.d.ts} +0 -0
  419. /package/types/{ojiepermana-angular-ui-component-form.d.ts → ojiepermana-angular-component-form.d.ts} +0 -0
  420. /package/types/{ojiepermana-angular-ui-component-input-group.d.ts → ojiepermana-angular-component-input-group.d.ts} +0 -0
  421. /package/types/{ojiepermana-angular-ui-component-input.d.ts → ojiepermana-angular-component-input.d.ts} +0 -0
  422. /package/types/{ojiepermana-angular-ui-component-item.d.ts → ojiepermana-angular-component-item.d.ts} +0 -0
  423. /package/types/{ojiepermana-angular-ui-component-label.d.ts → ojiepermana-angular-component-label.d.ts} +0 -0
  424. /package/types/{ojiepermana-angular-ui-component-pagination.d.ts → ojiepermana-angular-component-pagination.d.ts} +0 -0
  425. /package/types/{ojiepermana-angular-ui-component-popover.d.ts → ojiepermana-angular-component-popover.d.ts} +0 -0
  426. /package/types/{ojiepermana-angular-ui-component-progress.d.ts → ojiepermana-angular-component-progress.d.ts} +0 -0
  427. /package/types/{ojiepermana-angular-ui-component-radio.d.ts → ojiepermana-angular-component-radio.d.ts} +0 -0
  428. /package/types/{ojiepermana-angular-ui-component-scroll-area.d.ts → ojiepermana-angular-component-scroll-area.d.ts} +0 -0
  429. /package/types/{ojiepermana-angular-ui-component-select.d.ts → ojiepermana-angular-component-select.d.ts} +0 -0
  430. /package/types/{ojiepermana-angular-ui-component-separator.d.ts → ojiepermana-angular-component-separator.d.ts} +0 -0
  431. /package/types/{ojiepermana-angular-ui-component-sheet.d.ts → ojiepermana-angular-component-sheet.d.ts} +0 -0
  432. /package/types/{ojiepermana-angular-ui-component-skeleton.d.ts → ojiepermana-angular-component-skeleton.d.ts} +0 -0
  433. /package/types/{ojiepermana-angular-ui-component-slider.d.ts → ojiepermana-angular-component-slider.d.ts} +0 -0
  434. /package/types/{ojiepermana-angular-ui-component-switch.d.ts → ojiepermana-angular-component-switch.d.ts} +0 -0
  435. /package/types/{ojiepermana-angular-ui-component-table.d.ts → ojiepermana-angular-component-table.d.ts} +0 -0
  436. /package/types/{ojiepermana-angular-ui-component-tabs.d.ts → ojiepermana-angular-component-tabs.d.ts} +0 -0
  437. /package/types/{ojiepermana-angular-ui-component-textarea.d.ts → ojiepermana-angular-component-textarea.d.ts} +0 -0
  438. /package/types/{ojiepermana-angular-ui-component-toast.d.ts → ojiepermana-angular-component-toast.d.ts} +0 -0
  439. /package/types/{ojiepermana-angular-ui-component-tooltip.d.ts → ojiepermana-angular-component-tooltip.d.ts} +0 -0
  440. /package/types/{ojiepermana-angular-ui-component-utils.d.ts → ojiepermana-angular-component-utils.d.ts} +0 -0
  441. /package/types/{ojiepermana-angular-layout-theme.d.ts → ojiepermana-angular-layout-component.d.ts} +0 -0
@@ -0,0 +1,548 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, input, computed, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import { RouterLink, RouterLinkActive } from '@angular/router';
4
+ import { MatTooltip } from '@angular/material/tooltip';
5
+ import { UiNavIconComponent } from '@ojiepermana/angular/navigation/icon';
6
+ import { NavigationService } from '@ojiepermana/angular/navigation/service';
7
+ import { clsx } from 'clsx';
8
+ import { twMerge } from 'tailwind-merge';
9
+
10
+ /** Concatenate and dedupe Tailwind class names. */
11
+ function cn(...inputs) {
12
+ return twMerge(clsx(inputs));
13
+ }
14
+
15
+ /**
16
+ * Recursive navigation item renderer (vertical context).
17
+ *
18
+ * Menerima item polymorphic dan delegasi ke template sesuai `type`.
19
+ * Mega dirender sebagai group biasa saat muncul di konteks vertical.
20
+ */
21
+ class UiNavItemComponent {
22
+ nav = inject(NavigationService);
23
+ cn = cn;
24
+ item = input.required(...(ngDevMode ? [{ debugName: "item" }] : /* istanbul ignore next */ []));
25
+ level = input(0, ...(ngDevMode ? [{ debugName: "level" }] : /* istanbul ignore next */ []));
26
+ /** Compact / icon-only rendering (sidebar `thin`). */
27
+ compact = input(false, ...(ngDevMode ? [{ debugName: "compact" }] : /* istanbul ignore next */ []));
28
+ /** True when this branch sits inside a collapsable rail and can draw a connector back to it. */
29
+ railConnector = input(false, ...(ngDevMode ? [{ debugName: "railConnector" }] : /* istanbul ignore next */ []));
30
+ railConnectorDotClasses = 'pointer-events-none absolute -left-[11px] top-1/2 z-10 h-1 w-1 -translate-x-1/2 -translate-y-1/2 rounded-full bg-foreground/80';
31
+ exactMatch = {
32
+ exact: true,
33
+ paths: 'exact',
34
+ queryParams: 'exact',
35
+ fragment: 'exact',
36
+ matrixParams: 'exact',
37
+ };
38
+ inexactMatch = {
39
+ paths: 'subset',
40
+ queryParams: 'subset',
41
+ fragment: 'ignored',
42
+ matrixParams: 'ignored',
43
+ };
44
+ type = computed(() => this.item().type, ...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
45
+ groupItem = computed(() => this.item(), ...(ngDevMode ? [{ debugName: "groupItem" }] : /* istanbul ignore next */ []));
46
+ collapsableItem = computed(() => this.item(), ...(ngDevMode ? [{ debugName: "collapsableItem" }] : /* istanbul ignore next */ []));
47
+ megaItem = computed(() => this.item(), ...(ngDevMode ? [{ debugName: "megaItem" }] : /* istanbul ignore next */ []));
48
+ asideItem = computed(() => this.item(), ...(ngDevMode ? [{ debugName: "asideItem" }] : /* istanbul ignore next */ []));
49
+ basicItem = computed(() => this.item(), ...(ngDevMode ? [{ debugName: "basicItem" }] : /* istanbul ignore next */ []));
50
+ headingId = computed(() => {
51
+ const id = this.item().id ?? '';
52
+ return `nav-group-${id}`;
53
+ }, ...(ngDevMode ? [{ debugName: "headingId" }] : /* istanbul ignore next */ []));
54
+ isGroupOpen() {
55
+ const id = this.item().id;
56
+ if (!id)
57
+ return false;
58
+ // auto-open when any descendant is active
59
+ if (this.nav.isActive(id) && 'children' in this.item())
60
+ return true;
61
+ return this.nav.isGroupOpen(id);
62
+ }
63
+ isTrailActive() {
64
+ return this.nav.isActive(this.item().id);
65
+ }
66
+ railConnectorClasses(active) {
67
+ if (!active || !this.railConnector())
68
+ return '';
69
+ return ('relative after:pointer-events-none after:absolute after:-left-3 after:top-1/2 after:z-0 after:h-px ' +
70
+ "after:w-3 after:-translate-y-1/2 after:rounded-full after:bg-primary/30 after:content-['']");
71
+ }
72
+ showRailConnector(active) {
73
+ return active && this.railConnector();
74
+ }
75
+ toggleGroup() {
76
+ const id = this.item().id;
77
+ if (id)
78
+ this.nav.toggleGroup(id);
79
+ }
80
+ runAction() {
81
+ const item = this.item();
82
+ if ('action' in item && typeof item.action === 'function') {
83
+ item.action(item);
84
+ }
85
+ }
86
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: UiNavItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
87
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: UiNavItemComponent, isStandalone: true, selector: "ui-nav-item", inputs: { item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: true, transformFunction: null }, level: { classPropertyName: "level", publicName: "level", isSignal: true, isRequired: false, transformFunction: null }, compact: { classPropertyName: "compact", publicName: "compact", isSignal: true, isRequired: false, transformFunction: null }, railConnector: { classPropertyName: "railConnector", publicName: "railConnector", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
88
+ @switch (type()) {
89
+ @case ('divider') {
90
+ <hr class="my-2 border-t border-border" role="separator" />
91
+ }
92
+ @case ('spacer') {
93
+ <div class="flex-1"></div>
94
+ }
95
+ @case ('group') {
96
+ <div role="group" [attr.aria-labelledby]="headingId()">
97
+ @if (!compact()) {
98
+ <div class="sticky top-0 z-10 p-3 text-muted-foreground backdrop-blur-3xl bg-transparent">
99
+ <div [id]="headingId()" [class]="cn('ui-nav-heading text-muted-foreground', item().classes?.title)">
100
+ {{ item().title }}
101
+ </div>
102
+ </div>
103
+ }
104
+ <div class="flex flex-col gap-0.5">
105
+ @for (child of groupItem().children; track child.id) {
106
+ <ui-nav-item
107
+ [item]="child"
108
+ [level]="level() + 1"
109
+ [compact]="compact()"
110
+ [railConnector]="railConnector()" />
111
+ }
112
+ </div>
113
+ </div>
114
+ }
115
+ @case ('collapsable') {
116
+ @let id = collapsableItem().id ?? '';
117
+ @let open = isGroupOpen();
118
+ @let active = isTrailActive();
119
+ <button
120
+ type="button"
121
+ [class]="
122
+ cn(
123
+ 'ui-nav-text ui-nav-hover-surface group/ni flex w-full items-center gap-3 rounded p-3 text-foreground/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',
124
+ active && 'text-primary',
125
+ railConnectorClasses(active),
126
+ item().classes?.wrapper
127
+ )
128
+ "
129
+ [attr.aria-expanded]="open"
130
+ [attr.aria-controls]="id + '-panel'"
131
+ [disabled]="collapsableItem().disabled || null"
132
+ [matTooltip]="compact() ? (collapsableItem().title ?? '') : ''"
133
+ matTooltipPosition="right"
134
+ [matTooltipDisabled]="!compact()"
135
+ (click)="toggleGroup()">
136
+ @if (showRailConnector(active)) {
137
+ <span aria-hidden="true" data-nav-rail-dot [class]="railConnectorDotClasses"></span>
138
+ }
139
+ @if (collapsableItem().icon) {
140
+ <span
141
+ [class]="
142
+ cn(
143
+ 'inline-flex shrink-0 items-center justify-center',
144
+ open && 'h-7 w-7 rounded-full border border-brand'
145
+ )
146
+ ">
147
+ <ui-nav-icon [name]="collapsableItem().icon!" [size]="18" [class]="item().classes?.icon ?? ''" />
148
+ </span>
149
+ }
150
+ @if (!compact()) {
151
+ <span [class]="cn('flex-1 truncate text-left', item().classes?.title)">
152
+ {{ collapsableItem().title }}
153
+ </span>
154
+ @if (collapsableItem().badge; as badge) {
155
+ <span [class]="badge.classes ?? 'ui-nav-badge ml-auto'">{{ badge.title }}</span>
156
+ }
157
+ <ui-nav-icon
158
+ [name]="'chevron_right'"
159
+ [size]="18"
160
+ [class]="cn('transition-transform duration-200', open && 'rotate-90')" />
161
+ }
162
+ </button>
163
+ @if (!compact() && open) {
164
+ <div
165
+ [id]="id + '-panel'"
166
+ role="region"
167
+ class="relative ml-6.5 mt-0.5 flex flex-col gap-0.5 pl-3 before:absolute before:bottom-0 before:left-0 before:-top-3.5 before:w-px before:bg-primary/30 before:content-['']">
168
+ @for (child of collapsableItem().children; track child.id) {
169
+ <ui-nav-item [item]="child" [level]="level() + 1" [compact]="false" [railConnector]="true" />
170
+ }
171
+ </div>
172
+ }
173
+ }
174
+ @case ('mega') {
175
+ <!-- Mega direndahkan ke group saat berada di sidebar vertical. -->
176
+ <div class="mt-4 py-3 first:mt-0" role="group">
177
+ @if (!compact()) {
178
+ <div class="ui-nav-heading sticky top-0 z-10 bg-background px-3 pb-1 text-muted-foreground">
179
+ {{ item().title }}
180
+ </div>
181
+ }
182
+ <div class="flex flex-col gap-0.5">
183
+ @for (child of megaItem().children; track child.id) {
184
+ <ui-nav-item
185
+ [item]="child"
186
+ [level]="level() + 1"
187
+ [compact]="compact()"
188
+ [railConnector]="railConnector()" />
189
+ }
190
+ </div>
191
+ </div>
192
+ }
193
+ @case ('aside') {
194
+ <a
195
+ [class]="
196
+ cn(
197
+ 'ui-nav-text ui-nav-hover-surface flex items-center gap-3 rounded px-3 py-2 text-foreground/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring aria-[current=page]:text-primary',
198
+ railConnectorClasses(rla.isActive),
199
+ item().classes?.wrapper
200
+ )
201
+ "
202
+ routerLinkActive="text-primary"
203
+ #rla="routerLinkActive"
204
+ [attr.aria-current]="rla.isActive ? 'page' : null"
205
+ [routerLink]="asideItem().link"
206
+ [queryParams]="asideItem().queryParams"
207
+ [fragment]="asideItem().fragment ?? undefined"
208
+ [target]="asideItem().target ?? undefined"
209
+ [matTooltip]="compact() ? (asideItem().title ?? '') : ''"
210
+ matTooltipPosition="right"
211
+ [matTooltipDisabled]="!compact()">
212
+ @if (showRailConnector(rla.isActive)) {
213
+ <span aria-hidden="true" data-nav-rail-dot [class]="railConnectorDotClasses"></span>
214
+ }
215
+ @if (asideItem().icon) {
216
+ <ui-nav-icon [name]="asideItem().icon!" [size]="18" />
217
+ }
218
+ @if (!compact()) {
219
+ <span class="flex-1 truncate">{{ asideItem().title }}</span>
220
+ }
221
+ </a>
222
+ }
223
+ @default {
224
+ <!-- basic -->
225
+ @if (basicItem().link && !basicItem().externalLink) {
226
+ <a
227
+ [class]="
228
+ cn(
229
+ 'ui-nav-text ui-nav-hover-surface flex items-center gap-3 rounded px-3 py-2 text-foreground/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring aria-[current=page]:text-primary aria-disabled:pointer-events-none aria-disabled:opacity-50',
230
+ railConnectorClasses(rla.isActive),
231
+ item().classes?.wrapper
232
+ )
233
+ "
234
+ routerLinkActive="text-primary"
235
+ #rla="routerLinkActive"
236
+ [routerLinkActiveOptions]="
237
+ basicItem().isActiveMatchOptions ?? (basicItem().exactMatch ? exactMatch : inexactMatch)
238
+ "
239
+ [attr.aria-current]="rla.isActive ? 'page' : null"
240
+ [attr.aria-disabled]="basicItem().disabled || null"
241
+ [matTooltip]="compact() ? (basicItem().title ?? '') : ''"
242
+ matTooltipPosition="right"
243
+ [matTooltipDisabled]="!compact()"
244
+ [routerLink]="basicItem().link"
245
+ [queryParams]="basicItem().queryParams"
246
+ [queryParamsHandling]="basicItem().queryParamsHandling ?? null"
247
+ [fragment]="basicItem().fragment ?? undefined"
248
+ [preserveFragment]="basicItem().preserveFragment ?? false"
249
+ [target]="basicItem().target ?? undefined"
250
+ (click)="runAction()">
251
+ @if (showRailConnector(rla.isActive)) {
252
+ <span aria-hidden="true" data-nav-rail-dot [class]="railConnectorDotClasses"></span>
253
+ }
254
+ @if (basicItem().icon) {
255
+ <ui-nav-icon [name]="basicItem().icon!" [size]="18" [class]="item().classes?.icon ?? ''" />
256
+ }
257
+ @if (!compact()) {
258
+ <span [class]="cn('flex-1 truncate', item().classes?.title)">{{ basicItem().title }}</span>
259
+ @if (basicItem().badge; as badge) {
260
+ <span [class]="badge.classes ?? 'ui-nav-badge ml-auto'">{{ badge.title }}</span>
261
+ }
262
+ }
263
+ </a>
264
+ } @else if (basicItem().link && basicItem().externalLink) {
265
+ <a
266
+ [class]="
267
+ cn(
268
+ 'ui-nav-text ui-nav-hover-surface flex items-center gap-3 rounded px-3 py-2 text-foreground/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',
269
+ item().classes?.wrapper
270
+ )
271
+ "
272
+ [attr.href]="basicItem().link"
273
+ [attr.target]="basicItem().target ?? '_blank'"
274
+ rel="noopener noreferrer"
275
+ [matTooltip]="compact() ? (basicItem().title ?? '') : ''"
276
+ matTooltipPosition="right"
277
+ [matTooltipDisabled]="!compact()">
278
+ @if (basicItem().icon) {
279
+ <ui-nav-icon [name]="basicItem().icon!" [size]="18" />
280
+ }
281
+ @if (!compact()) {
282
+ <span class="flex-1 truncate">{{ basicItem().title }}</span>
283
+ }
284
+ </a>
285
+ } @else {
286
+ <button
287
+ type="button"
288
+ [class]="
289
+ cn(
290
+ 'ui-nav-text ui-nav-hover-surface flex w-full items-center gap-3 rounded px-3 py-2 text-left text-foreground/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',
291
+ item().classes?.wrapper
292
+ )
293
+ "
294
+ [disabled]="basicItem().disabled || null"
295
+ [matTooltip]="compact() ? (basicItem().title ?? '') : ''"
296
+ matTooltipPosition="right"
297
+ [matTooltipDisabled]="!compact()"
298
+ (click)="runAction()">
299
+ @if (basicItem().icon) {
300
+ <ui-nav-icon [name]="basicItem().icon!" [size]="18" />
301
+ }
302
+ @if (!compact()) {
303
+ <span class="flex-1 truncate">{{ basicItem().title }}</span>
304
+ }
305
+ </button>
306
+ }
307
+ }
308
+ }
309
+ `, isInline: true, dependencies: [{ kind: "component", type: UiNavItemComponent, selector: "ui-nav-item", inputs: ["item", "level", "compact", "railConnector"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: UiNavIconComponent, selector: "ui-nav-icon", inputs: ["name", "class", "size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
310
+ }
311
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: UiNavItemComponent, decorators: [{
312
+ type: Component,
313
+ args: [{
314
+ selector: 'ui-nav-item',
315
+ changeDetection: ChangeDetectionStrategy.OnPush,
316
+ imports: [RouterLink, RouterLinkActive, MatTooltip, UiNavIconComponent],
317
+ template: `
318
+ @switch (type()) {
319
+ @case ('divider') {
320
+ <hr class="my-2 border-t border-border" role="separator" />
321
+ }
322
+ @case ('spacer') {
323
+ <div class="flex-1"></div>
324
+ }
325
+ @case ('group') {
326
+ <div role="group" [attr.aria-labelledby]="headingId()">
327
+ @if (!compact()) {
328
+ <div class="sticky top-0 z-10 p-3 text-muted-foreground backdrop-blur-3xl bg-transparent">
329
+ <div [id]="headingId()" [class]="cn('ui-nav-heading text-muted-foreground', item().classes?.title)">
330
+ {{ item().title }}
331
+ </div>
332
+ </div>
333
+ }
334
+ <div class="flex flex-col gap-0.5">
335
+ @for (child of groupItem().children; track child.id) {
336
+ <ui-nav-item
337
+ [item]="child"
338
+ [level]="level() + 1"
339
+ [compact]="compact()"
340
+ [railConnector]="railConnector()" />
341
+ }
342
+ </div>
343
+ </div>
344
+ }
345
+ @case ('collapsable') {
346
+ @let id = collapsableItem().id ?? '';
347
+ @let open = isGroupOpen();
348
+ @let active = isTrailActive();
349
+ <button
350
+ type="button"
351
+ [class]="
352
+ cn(
353
+ 'ui-nav-text ui-nav-hover-surface group/ni flex w-full items-center gap-3 rounded p-3 text-foreground/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',
354
+ active && 'text-primary',
355
+ railConnectorClasses(active),
356
+ item().classes?.wrapper
357
+ )
358
+ "
359
+ [attr.aria-expanded]="open"
360
+ [attr.aria-controls]="id + '-panel'"
361
+ [disabled]="collapsableItem().disabled || null"
362
+ [matTooltip]="compact() ? (collapsableItem().title ?? '') : ''"
363
+ matTooltipPosition="right"
364
+ [matTooltipDisabled]="!compact()"
365
+ (click)="toggleGroup()">
366
+ @if (showRailConnector(active)) {
367
+ <span aria-hidden="true" data-nav-rail-dot [class]="railConnectorDotClasses"></span>
368
+ }
369
+ @if (collapsableItem().icon) {
370
+ <span
371
+ [class]="
372
+ cn(
373
+ 'inline-flex shrink-0 items-center justify-center',
374
+ open && 'h-7 w-7 rounded-full border border-brand'
375
+ )
376
+ ">
377
+ <ui-nav-icon [name]="collapsableItem().icon!" [size]="18" [class]="item().classes?.icon ?? ''" />
378
+ </span>
379
+ }
380
+ @if (!compact()) {
381
+ <span [class]="cn('flex-1 truncate text-left', item().classes?.title)">
382
+ {{ collapsableItem().title }}
383
+ </span>
384
+ @if (collapsableItem().badge; as badge) {
385
+ <span [class]="badge.classes ?? 'ui-nav-badge ml-auto'">{{ badge.title }}</span>
386
+ }
387
+ <ui-nav-icon
388
+ [name]="'chevron_right'"
389
+ [size]="18"
390
+ [class]="cn('transition-transform duration-200', open && 'rotate-90')" />
391
+ }
392
+ </button>
393
+ @if (!compact() && open) {
394
+ <div
395
+ [id]="id + '-panel'"
396
+ role="region"
397
+ class="relative ml-6.5 mt-0.5 flex flex-col gap-0.5 pl-3 before:absolute before:bottom-0 before:left-0 before:-top-3.5 before:w-px before:bg-primary/30 before:content-['']">
398
+ @for (child of collapsableItem().children; track child.id) {
399
+ <ui-nav-item [item]="child" [level]="level() + 1" [compact]="false" [railConnector]="true" />
400
+ }
401
+ </div>
402
+ }
403
+ }
404
+ @case ('mega') {
405
+ <!-- Mega direndahkan ke group saat berada di sidebar vertical. -->
406
+ <div class="mt-4 py-3 first:mt-0" role="group">
407
+ @if (!compact()) {
408
+ <div class="ui-nav-heading sticky top-0 z-10 bg-background px-3 pb-1 text-muted-foreground">
409
+ {{ item().title }}
410
+ </div>
411
+ }
412
+ <div class="flex flex-col gap-0.5">
413
+ @for (child of megaItem().children; track child.id) {
414
+ <ui-nav-item
415
+ [item]="child"
416
+ [level]="level() + 1"
417
+ [compact]="compact()"
418
+ [railConnector]="railConnector()" />
419
+ }
420
+ </div>
421
+ </div>
422
+ }
423
+ @case ('aside') {
424
+ <a
425
+ [class]="
426
+ cn(
427
+ 'ui-nav-text ui-nav-hover-surface flex items-center gap-3 rounded px-3 py-2 text-foreground/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring aria-[current=page]:text-primary',
428
+ railConnectorClasses(rla.isActive),
429
+ item().classes?.wrapper
430
+ )
431
+ "
432
+ routerLinkActive="text-primary"
433
+ #rla="routerLinkActive"
434
+ [attr.aria-current]="rla.isActive ? 'page' : null"
435
+ [routerLink]="asideItem().link"
436
+ [queryParams]="asideItem().queryParams"
437
+ [fragment]="asideItem().fragment ?? undefined"
438
+ [target]="asideItem().target ?? undefined"
439
+ [matTooltip]="compact() ? (asideItem().title ?? '') : ''"
440
+ matTooltipPosition="right"
441
+ [matTooltipDisabled]="!compact()">
442
+ @if (showRailConnector(rla.isActive)) {
443
+ <span aria-hidden="true" data-nav-rail-dot [class]="railConnectorDotClasses"></span>
444
+ }
445
+ @if (asideItem().icon) {
446
+ <ui-nav-icon [name]="asideItem().icon!" [size]="18" />
447
+ }
448
+ @if (!compact()) {
449
+ <span class="flex-1 truncate">{{ asideItem().title }}</span>
450
+ }
451
+ </a>
452
+ }
453
+ @default {
454
+ <!-- basic -->
455
+ @if (basicItem().link && !basicItem().externalLink) {
456
+ <a
457
+ [class]="
458
+ cn(
459
+ 'ui-nav-text ui-nav-hover-surface flex items-center gap-3 rounded px-3 py-2 text-foreground/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring aria-[current=page]:text-primary aria-disabled:pointer-events-none aria-disabled:opacity-50',
460
+ railConnectorClasses(rla.isActive),
461
+ item().classes?.wrapper
462
+ )
463
+ "
464
+ routerLinkActive="text-primary"
465
+ #rla="routerLinkActive"
466
+ [routerLinkActiveOptions]="
467
+ basicItem().isActiveMatchOptions ?? (basicItem().exactMatch ? exactMatch : inexactMatch)
468
+ "
469
+ [attr.aria-current]="rla.isActive ? 'page' : null"
470
+ [attr.aria-disabled]="basicItem().disabled || null"
471
+ [matTooltip]="compact() ? (basicItem().title ?? '') : ''"
472
+ matTooltipPosition="right"
473
+ [matTooltipDisabled]="!compact()"
474
+ [routerLink]="basicItem().link"
475
+ [queryParams]="basicItem().queryParams"
476
+ [queryParamsHandling]="basicItem().queryParamsHandling ?? null"
477
+ [fragment]="basicItem().fragment ?? undefined"
478
+ [preserveFragment]="basicItem().preserveFragment ?? false"
479
+ [target]="basicItem().target ?? undefined"
480
+ (click)="runAction()">
481
+ @if (showRailConnector(rla.isActive)) {
482
+ <span aria-hidden="true" data-nav-rail-dot [class]="railConnectorDotClasses"></span>
483
+ }
484
+ @if (basicItem().icon) {
485
+ <ui-nav-icon [name]="basicItem().icon!" [size]="18" [class]="item().classes?.icon ?? ''" />
486
+ }
487
+ @if (!compact()) {
488
+ <span [class]="cn('flex-1 truncate', item().classes?.title)">{{ basicItem().title }}</span>
489
+ @if (basicItem().badge; as badge) {
490
+ <span [class]="badge.classes ?? 'ui-nav-badge ml-auto'">{{ badge.title }}</span>
491
+ }
492
+ }
493
+ </a>
494
+ } @else if (basicItem().link && basicItem().externalLink) {
495
+ <a
496
+ [class]="
497
+ cn(
498
+ 'ui-nav-text ui-nav-hover-surface flex items-center gap-3 rounded px-3 py-2 text-foreground/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',
499
+ item().classes?.wrapper
500
+ )
501
+ "
502
+ [attr.href]="basicItem().link"
503
+ [attr.target]="basicItem().target ?? '_blank'"
504
+ rel="noopener noreferrer"
505
+ [matTooltip]="compact() ? (basicItem().title ?? '') : ''"
506
+ matTooltipPosition="right"
507
+ [matTooltipDisabled]="!compact()">
508
+ @if (basicItem().icon) {
509
+ <ui-nav-icon [name]="basicItem().icon!" [size]="18" />
510
+ }
511
+ @if (!compact()) {
512
+ <span class="flex-1 truncate">{{ basicItem().title }}</span>
513
+ }
514
+ </a>
515
+ } @else {
516
+ <button
517
+ type="button"
518
+ [class]="
519
+ cn(
520
+ 'ui-nav-text ui-nav-hover-surface flex w-full items-center gap-3 rounded px-3 py-2 text-left text-foreground/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',
521
+ item().classes?.wrapper
522
+ )
523
+ "
524
+ [disabled]="basicItem().disabled || null"
525
+ [matTooltip]="compact() ? (basicItem().title ?? '') : ''"
526
+ matTooltipPosition="right"
527
+ [matTooltipDisabled]="!compact()"
528
+ (click)="runAction()">
529
+ @if (basicItem().icon) {
530
+ <ui-nav-icon [name]="basicItem().icon!" [size]="18" />
531
+ }
532
+ @if (!compact()) {
533
+ <span class="flex-1 truncate">{{ basicItem().title }}</span>
534
+ }
535
+ </button>
536
+ }
537
+ }
538
+ }
539
+ `,
540
+ }]
541
+ }], propDecorators: { item: [{ type: i0.Input, args: [{ isSignal: true, alias: "item", required: true }] }], level: [{ type: i0.Input, args: [{ isSignal: true, alias: "level", required: false }] }], compact: [{ type: i0.Input, args: [{ isSignal: true, alias: "compact", required: false }] }], railConnector: [{ type: i0.Input, args: [{ isSignal: true, alias: "railConnector", required: false }] }] } });
542
+
543
+ /**
544
+ * Generated bundle index. Do not edit.
545
+ */
546
+
547
+ export { UiNavItemComponent };
548
+ //# sourceMappingURL=ojiepermana-angular-navigation-item.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ojiepermana-angular-navigation-item.mjs","sources":["../../../projects/angular/navigation/item/src/lib/cn.util.ts","../../../projects/angular/navigation/item/src/lib/nav-item.component.ts","../../../projects/angular/navigation/item/ojiepermana-angular-navigation-item.ts"],"sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/** Concatenate and dedupe Tailwind class names. */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { UiNavIconComponent } from '@ojiepermana/angular/navigation/icon';\nimport { NavigationService } from '@ojiepermana/angular/navigation/service';\nimport type {\n NavigationAsideItem,\n NavigationBasicItem,\n NavigationCollapsableItem,\n NavigationGroupItem,\n NavigationItem,\n NavigationMegaItem,\n} from '@ojiepermana/angular/navigation/types';\nimport { cn } from './cn.util';\n\n/**\n * Recursive navigation item renderer (vertical context).\n *\n * Menerima item polymorphic dan delegasi ke template sesuai `type`.\n * Mega dirender sebagai group biasa saat muncul di konteks vertical.\n */\n@Component({\n selector: 'ui-nav-item',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [RouterLink, RouterLinkActive, MatTooltip, UiNavIconComponent],\n template: `\n @switch (type()) {\n @case ('divider') {\n <hr class=\"my-2 border-t border-border\" role=\"separator\" />\n }\n @case ('spacer') {\n <div class=\"flex-1\"></div>\n }\n @case ('group') {\n <div role=\"group\" [attr.aria-labelledby]=\"headingId()\">\n @if (!compact()) {\n <div class=\"sticky top-0 z-10 p-3 text-muted-foreground backdrop-blur-3xl bg-transparent\">\n <div [id]=\"headingId()\" [class]=\"cn('ui-nav-heading text-muted-foreground', item().classes?.title)\">\n {{ item().title }}\n </div>\n </div>\n }\n <div class=\"flex flex-col gap-0.5\">\n @for (child of groupItem().children; track child.id) {\n <ui-nav-item\n [item]=\"child\"\n [level]=\"level() + 1\"\n [compact]=\"compact()\"\n [railConnector]=\"railConnector()\" />\n }\n </div>\n </div>\n }\n @case ('collapsable') {\n @let id = collapsableItem().id ?? '';\n @let open = isGroupOpen();\n @let active = isTrailActive();\n <button\n type=\"button\"\n [class]=\"\n cn(\n 'ui-nav-text ui-nav-hover-surface group/ni flex w-full items-center gap-3 rounded p-3 text-foreground/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n active && 'text-primary',\n railConnectorClasses(active),\n item().classes?.wrapper\n )\n \"\n [attr.aria-expanded]=\"open\"\n [attr.aria-controls]=\"id + '-panel'\"\n [disabled]=\"collapsableItem().disabled || null\"\n [matTooltip]=\"compact() ? (collapsableItem().title ?? '') : ''\"\n matTooltipPosition=\"right\"\n [matTooltipDisabled]=\"!compact()\"\n (click)=\"toggleGroup()\">\n @if (showRailConnector(active)) {\n <span aria-hidden=\"true\" data-nav-rail-dot [class]=\"railConnectorDotClasses\"></span>\n }\n @if (collapsableItem().icon) {\n <span\n [class]=\"\n cn(\n 'inline-flex shrink-0 items-center justify-center',\n open && 'h-7 w-7 rounded-full border border-brand'\n )\n \">\n <ui-nav-icon [name]=\"collapsableItem().icon!\" [size]=\"18\" [class]=\"item().classes?.icon ?? ''\" />\n </span>\n }\n @if (!compact()) {\n <span [class]=\"cn('flex-1 truncate text-left', item().classes?.title)\">\n {{ collapsableItem().title }}\n </span>\n @if (collapsableItem().badge; as badge) {\n <span [class]=\"badge.classes ?? 'ui-nav-badge ml-auto'\">{{ badge.title }}</span>\n }\n <ui-nav-icon\n [name]=\"'chevron_right'\"\n [size]=\"18\"\n [class]=\"cn('transition-transform duration-200', open && 'rotate-90')\" />\n }\n </button>\n @if (!compact() && open) {\n <div\n [id]=\"id + '-panel'\"\n role=\"region\"\n class=\"relative ml-6.5 mt-0.5 flex flex-col gap-0.5 pl-3 before:absolute before:bottom-0 before:left-0 before:-top-3.5 before:w-px before:bg-primary/30 before:content-['']\">\n @for (child of collapsableItem().children; track child.id) {\n <ui-nav-item [item]=\"child\" [level]=\"level() + 1\" [compact]=\"false\" [railConnector]=\"true\" />\n }\n </div>\n }\n }\n @case ('mega') {\n <!-- Mega direndahkan ke group saat berada di sidebar vertical. -->\n <div class=\"mt-4 py-3 first:mt-0\" role=\"group\">\n @if (!compact()) {\n <div class=\"ui-nav-heading sticky top-0 z-10 bg-background px-3 pb-1 text-muted-foreground\">\n {{ item().title }}\n </div>\n }\n <div class=\"flex flex-col gap-0.5\">\n @for (child of megaItem().children; track child.id) {\n <ui-nav-item\n [item]=\"child\"\n [level]=\"level() + 1\"\n [compact]=\"compact()\"\n [railConnector]=\"railConnector()\" />\n }\n </div>\n </div>\n }\n @case ('aside') {\n <a\n [class]=\"\n cn(\n 'ui-nav-text ui-nav-hover-surface flex items-center gap-3 rounded px-3 py-2 text-foreground/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring aria-[current=page]:text-primary',\n railConnectorClasses(rla.isActive),\n item().classes?.wrapper\n )\n \"\n routerLinkActive=\"text-primary\"\n #rla=\"routerLinkActive\"\n [attr.aria-current]=\"rla.isActive ? 'page' : null\"\n [routerLink]=\"asideItem().link\"\n [queryParams]=\"asideItem().queryParams\"\n [fragment]=\"asideItem().fragment ?? undefined\"\n [target]=\"asideItem().target ?? undefined\"\n [matTooltip]=\"compact() ? (asideItem().title ?? '') : ''\"\n matTooltipPosition=\"right\"\n [matTooltipDisabled]=\"!compact()\">\n @if (showRailConnector(rla.isActive)) {\n <span aria-hidden=\"true\" data-nav-rail-dot [class]=\"railConnectorDotClasses\"></span>\n }\n @if (asideItem().icon) {\n <ui-nav-icon [name]=\"asideItem().icon!\" [size]=\"18\" />\n }\n @if (!compact()) {\n <span class=\"flex-1 truncate\">{{ asideItem().title }}</span>\n }\n </a>\n }\n @default {\n <!-- basic -->\n @if (basicItem().link && !basicItem().externalLink) {\n <a\n [class]=\"\n cn(\n 'ui-nav-text ui-nav-hover-surface flex items-center gap-3 rounded px-3 py-2 text-foreground/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring aria-[current=page]:text-primary aria-disabled:pointer-events-none aria-disabled:opacity-50',\n railConnectorClasses(rla.isActive),\n item().classes?.wrapper\n )\n \"\n routerLinkActive=\"text-primary\"\n #rla=\"routerLinkActive\"\n [routerLinkActiveOptions]=\"\n basicItem().isActiveMatchOptions ?? (basicItem().exactMatch ? exactMatch : inexactMatch)\n \"\n [attr.aria-current]=\"rla.isActive ? 'page' : null\"\n [attr.aria-disabled]=\"basicItem().disabled || null\"\n [matTooltip]=\"compact() ? (basicItem().title ?? '') : ''\"\n matTooltipPosition=\"right\"\n [matTooltipDisabled]=\"!compact()\"\n [routerLink]=\"basicItem().link\"\n [queryParams]=\"basicItem().queryParams\"\n [queryParamsHandling]=\"basicItem().queryParamsHandling ?? null\"\n [fragment]=\"basicItem().fragment ?? undefined\"\n [preserveFragment]=\"basicItem().preserveFragment ?? false\"\n [target]=\"basicItem().target ?? undefined\"\n (click)=\"runAction()\">\n @if (showRailConnector(rla.isActive)) {\n <span aria-hidden=\"true\" data-nav-rail-dot [class]=\"railConnectorDotClasses\"></span>\n }\n @if (basicItem().icon) {\n <ui-nav-icon [name]=\"basicItem().icon!\" [size]=\"18\" [class]=\"item().classes?.icon ?? ''\" />\n }\n @if (!compact()) {\n <span [class]=\"cn('flex-1 truncate', item().classes?.title)\">{{ basicItem().title }}</span>\n @if (basicItem().badge; as badge) {\n <span [class]=\"badge.classes ?? 'ui-nav-badge ml-auto'\">{{ badge.title }}</span>\n }\n }\n </a>\n } @else if (basicItem().link && basicItem().externalLink) {\n <a\n [class]=\"\n cn(\n 'ui-nav-text ui-nav-hover-surface flex items-center gap-3 rounded px-3 py-2 text-foreground/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n item().classes?.wrapper\n )\n \"\n [attr.href]=\"basicItem().link\"\n [attr.target]=\"basicItem().target ?? '_blank'\"\n rel=\"noopener noreferrer\"\n [matTooltip]=\"compact() ? (basicItem().title ?? '') : ''\"\n matTooltipPosition=\"right\"\n [matTooltipDisabled]=\"!compact()\">\n @if (basicItem().icon) {\n <ui-nav-icon [name]=\"basicItem().icon!\" [size]=\"18\" />\n }\n @if (!compact()) {\n <span class=\"flex-1 truncate\">{{ basicItem().title }}</span>\n }\n </a>\n } @else {\n <button\n type=\"button\"\n [class]=\"\n cn(\n 'ui-nav-text ui-nav-hover-surface flex w-full items-center gap-3 rounded px-3 py-2 text-left text-foreground/80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n item().classes?.wrapper\n )\n \"\n [disabled]=\"basicItem().disabled || null\"\n [matTooltip]=\"compact() ? (basicItem().title ?? '') : ''\"\n matTooltipPosition=\"right\"\n [matTooltipDisabled]=\"!compact()\"\n (click)=\"runAction()\">\n @if (basicItem().icon) {\n <ui-nav-icon [name]=\"basicItem().icon!\" [size]=\"18\" />\n }\n @if (!compact()) {\n <span class=\"flex-1 truncate\">{{ basicItem().title }}</span>\n }\n </button>\n }\n }\n }\n `,\n})\nexport class UiNavItemComponent {\n private readonly nav = inject(NavigationService);\n protected readonly cn = cn;\n\n readonly item = input.required<NavigationItem>();\n readonly level = input<number>(0);\n /** Compact / icon-only rendering (sidebar `thin`). */\n readonly compact = input<boolean>(false);\n /** True when this branch sits inside a collapsable rail and can draw a connector back to it. */\n readonly railConnector = input<boolean>(false);\n\n protected readonly railConnectorDotClasses =\n 'pointer-events-none absolute -left-[11px] top-1/2 z-10 h-1 w-1 -translate-x-1/2 -translate-y-1/2 rounded-full bg-foreground/80';\n\n protected readonly exactMatch = {\n exact: true,\n paths: 'exact',\n queryParams: 'exact',\n fragment: 'exact',\n matrixParams: 'exact',\n } as const;\n protected readonly inexactMatch = {\n paths: 'subset',\n queryParams: 'subset',\n fragment: 'ignored',\n matrixParams: 'ignored',\n } as const;\n\n protected readonly type = computed(() => this.item().type);\n\n protected readonly groupItem = computed(() => this.item() as NavigationGroupItem);\n protected readonly collapsableItem = computed(() => this.item() as NavigationCollapsableItem);\n protected readonly megaItem = computed(() => this.item() as NavigationMegaItem);\n protected readonly asideItem = computed(() => this.item() as NavigationAsideItem);\n protected readonly basicItem = computed(() => this.item() as NavigationBasicItem);\n\n protected readonly headingId = computed(() => {\n const id = this.item().id ?? '';\n return `nav-group-${id}`;\n });\n\n protected isGroupOpen(): boolean {\n const id = this.item().id;\n if (!id) return false;\n // auto-open when any descendant is active\n if (this.nav.isActive(id) && 'children' in this.item()) return true;\n return this.nav.isGroupOpen(id);\n }\n\n protected isTrailActive(): boolean {\n return this.nav.isActive(this.item().id);\n }\n\n protected railConnectorClasses(active: boolean): string {\n if (!active || !this.railConnector()) return '';\n\n return (\n 'relative after:pointer-events-none after:absolute after:-left-3 after:top-1/2 after:z-0 after:h-px ' +\n \"after:w-3 after:-translate-y-1/2 after:rounded-full after:bg-primary/30 after:content-['']\"\n );\n }\n\n protected showRailConnector(active: boolean): boolean {\n return active && this.railConnector();\n }\n\n protected toggleGroup(): void {\n const id = this.item().id;\n if (id) this.nav.toggleGroup(id);\n }\n\n protected runAction(): void {\n const item = this.item();\n if ('action' in item && typeof item.action === 'function') {\n item.action(item);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}