@ojiepermana/angular 21.3.4 → 22.0.1

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 (290) hide show
  1. package/README.md +10 -6
  2. package/component/accordion/README.md +195 -0
  3. package/component/alert/README.md +182 -0
  4. package/component/alert-dialog/README.md +239 -0
  5. package/component/aspect-ratio/README.md +112 -0
  6. package/component/avatar/README.md +176 -0
  7. package/component/badge/README.md +133 -0
  8. package/component/breadcrumb/README.md +216 -0
  9. package/component/button/README.md +139 -0
  10. package/component/button-group/README.md +208 -0
  11. package/component/calendar/README.md +132 -0
  12. package/component/card/README.md +220 -0
  13. package/component/carousel/README.md +276 -0
  14. package/component/checkbox/README.md +149 -0
  15. package/component/collapsible/README.md +195 -0
  16. package/component/combobox/README.md +198 -0
  17. package/component/command/README.md +275 -0
  18. package/component/composer/README.md +235 -0
  19. package/component/composer/package.json +4 -0
  20. package/component/context-menu/README.md +267 -0
  21. package/component/date-picker/README.md +177 -0
  22. package/component/dialog/README.md +237 -0
  23. package/component/drawer/README.md +145 -0
  24. package/component/dropdown-menu/README.md +311 -0
  25. package/component/editor/README.md +136 -0
  26. package/component/editor/package.json +4 -0
  27. package/component/empty/README.md +183 -0
  28. package/component/empty/package.json +4 -0
  29. package/component/form/README.md +210 -0
  30. package/component/hover-card/README.md +146 -0
  31. package/component/hover-card/package.json +4 -0
  32. package/component/input/README.md +159 -0
  33. package/component/input-group/README.md +239 -0
  34. package/component/input-otp/README.md +278 -0
  35. package/component/input-otp/package.json +4 -0
  36. package/component/item/README.md +247 -0
  37. package/component/kanban/README.md +81 -0
  38. package/component/kanban/package.json +4 -0
  39. package/component/kbd/README.md +139 -0
  40. package/component/kbd/package.json +4 -0
  41. package/component/label/README.md +136 -0
  42. package/component/menubar/README.md +269 -0
  43. package/component/menubar/package.json +4 -0
  44. package/component/native-select/README.md +176 -0
  45. package/component/native-select/package.json +4 -0
  46. package/component/navigation-menu/README.md +160 -0
  47. package/component/navigation-menu/package.json +4 -0
  48. package/component/pagination/README.md +144 -0
  49. package/component/pillbox/README.md +67 -0
  50. package/component/pillbox/package.json +4 -0
  51. package/component/popover/README.md +43 -0
  52. package/component/progress/README.md +160 -0
  53. package/component/radio/README.md +209 -0
  54. package/component/resizable/README.md +168 -0
  55. package/component/resizable/package.json +4 -0
  56. package/component/scroll-area/README.md +143 -0
  57. package/component/select/README.md +174 -0
  58. package/component/separator/README.md +170 -0
  59. package/component/sheet/README.md +183 -0
  60. package/component/skeleton/README.md +158 -0
  61. package/component/slider/README.md +207 -0
  62. package/component/spinner/README.md +160 -0
  63. package/component/spinner/package.json +4 -0
  64. package/component/switch/README.md +166 -0
  65. package/component/table/README.md +291 -0
  66. package/component/tabs/README.md +219 -0
  67. package/component/textarea/README.md +154 -0
  68. package/component/timeline/README.md +94 -0
  69. package/component/timeline/package.json +4 -0
  70. package/component/toast/README.md +321 -0
  71. package/component/toggle/README.md +131 -0
  72. package/component/toggle/package.json +4 -0
  73. package/component/toggle-group/README.md +206 -0
  74. package/component/toggle-group/package.json +4 -0
  75. package/component/tooltip/README.md +211 -0
  76. package/fesm2022/ojiepermana-angular-component-accordion.mjs +45 -30
  77. package/fesm2022/ojiepermana-angular-component-accordion.mjs.map +1 -1
  78. package/fesm2022/ojiepermana-angular-component-alert-dialog.mjs +95 -61
  79. package/fesm2022/ojiepermana-angular-component-alert-dialog.mjs.map +1 -1
  80. package/fesm2022/ojiepermana-angular-component-alert.mjs +30 -21
  81. package/fesm2022/ojiepermana-angular-component-alert.mjs.map +1 -1
  82. package/fesm2022/ojiepermana-angular-component-aspect-ratio.mjs +11 -7
  83. package/fesm2022/ojiepermana-angular-component-aspect-ratio.mjs.map +1 -1
  84. package/fesm2022/ojiepermana-angular-component-avatar.mjs +50 -34
  85. package/fesm2022/ojiepermana-angular-component-avatar.mjs.map +1 -1
  86. package/fesm2022/ojiepermana-angular-component-badge.mjs +9 -6
  87. package/fesm2022/ojiepermana-angular-component-badge.mjs.map +1 -1
  88. package/fesm2022/ojiepermana-angular-component-breadcrumb.mjs +49 -35
  89. package/fesm2022/ojiepermana-angular-component-breadcrumb.mjs.map +1 -1
  90. package/fesm2022/ojiepermana-angular-component-button-group.mjs +25 -17
  91. package/fesm2022/ojiepermana-angular-component-button-group.mjs.map +1 -1
  92. package/fesm2022/ojiepermana-angular-component-button.mjs +11 -7
  93. package/fesm2022/ojiepermana-angular-component-button.mjs.map +1 -1
  94. package/fesm2022/ojiepermana-angular-component-calendar.mjs +23 -13
  95. package/fesm2022/ojiepermana-angular-component-calendar.mjs.map +1 -1
  96. package/fesm2022/ojiepermana-angular-component-card.mjs +51 -36
  97. package/fesm2022/ojiepermana-angular-component-card.mjs.map +1 -1
  98. package/fesm2022/ojiepermana-angular-component-carousel.mjs +66 -42
  99. package/fesm2022/ojiepermana-angular-component-carousel.mjs.map +1 -1
  100. package/fesm2022/ojiepermana-angular-component-chart.mjs +494 -283
  101. package/fesm2022/ojiepermana-angular-component-chart.mjs.map +1 -1
  102. package/fesm2022/ojiepermana-angular-component-checkbox.mjs +23 -13
  103. package/fesm2022/ojiepermana-angular-component-checkbox.mjs.map +1 -1
  104. package/fesm2022/ojiepermana-angular-component-collapsible.mjs +28 -20
  105. package/fesm2022/ojiepermana-angular-component-collapsible.mjs.map +1 -1
  106. package/fesm2022/ojiepermana-angular-component-combobox.mjs +27 -18
  107. package/fesm2022/ojiepermana-angular-component-combobox.mjs.map +1 -1
  108. package/fesm2022/ojiepermana-angular-component-command.mjs +77 -52
  109. package/fesm2022/ojiepermana-angular-component-command.mjs.map +1 -1
  110. package/fesm2022/ojiepermana-angular-component-composer.mjs +352 -0
  111. package/fesm2022/ojiepermana-angular-component-composer.mjs.map +1 -0
  112. package/fesm2022/ojiepermana-angular-component-context-menu.mjs +9 -6
  113. package/fesm2022/ojiepermana-angular-component-context-menu.mjs.map +1 -1
  114. package/fesm2022/ojiepermana-angular-component-date-picker.mjs +34 -19
  115. package/fesm2022/ojiepermana-angular-component-date-picker.mjs.map +1 -1
  116. package/fesm2022/ojiepermana-angular-component-dialog.mjs +55 -38
  117. package/fesm2022/ojiepermana-angular-component-dialog.mjs.map +1 -1
  118. package/fesm2022/ojiepermana-angular-component-drawer.mjs.map +1 -1
  119. package/fesm2022/ojiepermana-angular-component-dropdown-menu.mjs +108 -74
  120. package/fesm2022/ojiepermana-angular-component-dropdown-menu.mjs.map +1 -1
  121. package/fesm2022/ojiepermana-angular-component-editor.mjs +717 -0
  122. package/fesm2022/ojiepermana-angular-component-editor.mjs.map +1 -0
  123. package/fesm2022/ojiepermana-angular-component-empty.mjs +145 -0
  124. package/fesm2022/ojiepermana-angular-component-empty.mjs.map +1 -0
  125. package/fesm2022/ojiepermana-angular-component-form.mjs +200 -42
  126. package/fesm2022/ojiepermana-angular-component-form.mjs.map +1 -1
  127. package/fesm2022/ojiepermana-angular-component-hover-card.mjs +297 -0
  128. package/fesm2022/ojiepermana-angular-component-hover-card.mjs.map +1 -0
  129. package/fesm2022/ojiepermana-angular-component-input-group.mjs +48 -33
  130. package/fesm2022/ojiepermana-angular-component-input-group.mjs.map +1 -1
  131. package/fesm2022/ojiepermana-angular-component-input-otp.mjs +514 -0
  132. package/fesm2022/ojiepermana-angular-component-input-otp.mjs.map +1 -0
  133. package/fesm2022/ojiepermana-angular-component-input.mjs +7 -5
  134. package/fesm2022/ojiepermana-angular-component-input.mjs.map +1 -1
  135. package/fesm2022/ojiepermana-angular-component-item.mjs +76 -53
  136. package/fesm2022/ojiepermana-angular-component-item.mjs.map +1 -1
  137. package/fesm2022/ojiepermana-angular-component-kanban.mjs +314 -0
  138. package/fesm2022/ojiepermana-angular-component-kanban.mjs.map +1 -0
  139. package/fesm2022/ojiepermana-angular-component-kbd.mjs +55 -0
  140. package/fesm2022/ojiepermana-angular-component-kbd.mjs.map +1 -0
  141. package/fesm2022/ojiepermana-angular-component-label.mjs +9 -6
  142. package/fesm2022/ojiepermana-angular-component-label.mjs.map +1 -1
  143. package/fesm2022/ojiepermana-angular-component-menubar.mjs +308 -0
  144. package/fesm2022/ojiepermana-angular-component-menubar.mjs.map +1 -0
  145. package/fesm2022/ojiepermana-angular-component-native-select.mjs +67 -0
  146. package/fesm2022/ojiepermana-angular-component-native-select.mjs.map +1 -0
  147. package/fesm2022/ojiepermana-angular-component-navigation-menu.mjs +413 -0
  148. package/fesm2022/ojiepermana-angular-component-navigation-menu.mjs.map +1 -0
  149. package/fesm2022/ojiepermana-angular-component-pagination.mjs +65 -31
  150. package/fesm2022/ojiepermana-angular-component-pagination.mjs.map +1 -1
  151. package/fesm2022/ojiepermana-angular-component-pillbox.mjs +812 -0
  152. package/fesm2022/ojiepermana-angular-component-pillbox.mjs.map +1 -0
  153. package/fesm2022/ojiepermana-angular-component-popover.mjs +18 -12
  154. package/fesm2022/ojiepermana-angular-component-popover.mjs.map +1 -1
  155. package/fesm2022/ojiepermana-angular-component-progress.mjs +17 -10
  156. package/fesm2022/ojiepermana-angular-component-progress.mjs.map +1 -1
  157. package/fesm2022/ojiepermana-angular-component-radio.mjs +47 -17
  158. package/fesm2022/ojiepermana-angular-component-radio.mjs.map +1 -1
  159. package/fesm2022/ojiepermana-angular-component-resizable.mjs +481 -0
  160. package/fesm2022/ojiepermana-angular-component-resizable.mjs.map +1 -0
  161. package/fesm2022/ojiepermana-angular-component-scroll-area.mjs +15 -9
  162. package/fesm2022/ojiepermana-angular-component-scroll-area.mjs.map +1 -1
  163. package/fesm2022/ojiepermana-angular-component-select.mjs +71 -26
  164. package/fesm2022/ojiepermana-angular-component-select.mjs.map +1 -1
  165. package/fesm2022/ojiepermana-angular-component-separator.mjs +11 -7
  166. package/fesm2022/ojiepermana-angular-component-separator.mjs.map +1 -1
  167. package/fesm2022/ojiepermana-angular-component-sheet.mjs +91 -42
  168. package/fesm2022/ojiepermana-angular-component-sheet.mjs.map +1 -1
  169. package/fesm2022/ojiepermana-angular-component-skeleton.mjs +7 -5
  170. package/fesm2022/ojiepermana-angular-component-skeleton.mjs.map +1 -1
  171. package/fesm2022/ojiepermana-angular-component-slider.mjs +401 -7
  172. package/fesm2022/ojiepermana-angular-component-slider.mjs.map +1 -1
  173. package/fesm2022/ojiepermana-angular-component-spinner.mjs +60 -0
  174. package/fesm2022/ojiepermana-angular-component-spinner.mjs.map +1 -0
  175. package/fesm2022/ojiepermana-angular-component-switch.mjs +47 -15
  176. package/fesm2022/ojiepermana-angular-component-switch.mjs.map +1 -1
  177. package/fesm2022/ojiepermana-angular-component-table.mjs +56 -40
  178. package/fesm2022/ojiepermana-angular-component-table.mjs.map +1 -1
  179. package/fesm2022/ojiepermana-angular-component-tabs.mjs +58 -38
  180. package/fesm2022/ojiepermana-angular-component-tabs.mjs.map +1 -1
  181. package/fesm2022/ojiepermana-angular-component-textarea.mjs +8 -6
  182. package/fesm2022/ojiepermana-angular-component-textarea.mjs.map +1 -1
  183. package/fesm2022/ojiepermana-angular-component-timeline.mjs +237 -0
  184. package/fesm2022/ojiepermana-angular-component-timeline.mjs.map +1 -0
  185. package/fesm2022/ojiepermana-angular-component-toast.mjs +28 -4
  186. package/fesm2022/ojiepermana-angular-component-toast.mjs.map +1 -1
  187. package/fesm2022/ojiepermana-angular-component-toggle-group.mjs +289 -0
  188. package/fesm2022/ojiepermana-angular-component-toggle-group.mjs.map +1 -0
  189. package/fesm2022/ojiepermana-angular-component-toggle.mjs +82 -0
  190. package/fesm2022/ojiepermana-angular-component-toggle.mjs.map +1 -0
  191. package/fesm2022/ojiepermana-angular-component-tooltip.mjs +304 -6
  192. package/fesm2022/ojiepermana-angular-component-tooltip.mjs.map +1 -1
  193. package/fesm2022/ojiepermana-angular-component-utils.mjs.map +1 -1
  194. package/fesm2022/ojiepermana-angular-layout-component.mjs +45 -24
  195. package/fesm2022/ojiepermana-angular-layout-component.mjs.map +1 -1
  196. package/fesm2022/ojiepermana-angular-layout-provider.mjs.map +1 -1
  197. package/fesm2022/ojiepermana-angular-layout-services.mjs +7 -5
  198. package/fesm2022/ojiepermana-angular-layout-services.mjs.map +1 -1
  199. package/fesm2022/ojiepermana-angular-layout-shell.mjs +3 -3
  200. package/fesm2022/ojiepermana-angular-layout-shell.mjs.map +1 -1
  201. package/fesm2022/ojiepermana-angular-layout-token-directive.mjs +9 -6
  202. package/fesm2022/ojiepermana-angular-layout-token-directive.mjs.map +1 -1
  203. package/fesm2022/ojiepermana-angular-layout-token.mjs.map +1 -1
  204. package/fesm2022/{ojiepermana-angular-layout-empty.mjs → ojiepermana-angular-layout-type-empty.mjs} +4 -4
  205. package/fesm2022/ojiepermana-angular-layout-type-empty.mjs.map +1 -0
  206. package/fesm2022/{ojiepermana-angular-layout-horizontal.mjs → ojiepermana-angular-layout-type-horizontal.mjs} +26 -17
  207. package/fesm2022/ojiepermana-angular-layout-type-horizontal.mjs.map +1 -0
  208. package/fesm2022/{ojiepermana-angular-layout-vertical.mjs → ojiepermana-angular-layout-type-vertical.mjs} +28 -18
  209. package/fesm2022/ojiepermana-angular-layout-type-vertical.mjs.map +1 -0
  210. package/fesm2022/ojiepermana-angular-layout.mjs +74 -50
  211. package/fesm2022/ojiepermana-angular-layout.mjs.map +1 -1
  212. package/fesm2022/ojiepermana-angular-navigation-demo-data.mjs.map +1 -1
  213. package/fesm2022/ojiepermana-angular-navigation-icon.mjs +11 -7
  214. package/fesm2022/ojiepermana-angular-navigation-icon.mjs.map +1 -1
  215. package/fesm2022/ojiepermana-angular-navigation-item.mjs +27 -16
  216. package/fesm2022/ojiepermana-angular-navigation-item.mjs.map +1 -1
  217. package/fesm2022/ojiepermana-angular-navigation-service.mjs +29 -20
  218. package/fesm2022/ojiepermana-angular-navigation-service.mjs.map +1 -1
  219. package/fesm2022/ojiepermana-angular-navigation-sidebar.mjs +71 -43
  220. package/fesm2022/ojiepermana-angular-navigation-sidebar.mjs.map +1 -1
  221. package/fesm2022/ojiepermana-angular-navigation-topbar.mjs +261 -24
  222. package/fesm2022/ojiepermana-angular-navigation-topbar.mjs.map +1 -1
  223. package/fesm2022/ojiepermana-angular-theme-provider.mjs.map +1 -1
  224. package/fesm2022/ojiepermana-angular-theme-services.mjs +19 -11
  225. package/fesm2022/ojiepermana-angular-theme-services.mjs.map +1 -1
  226. package/fesm2022/ojiepermana-angular-theme-token.mjs.map +1 -1
  227. package/fesm2022/ojiepermana-angular-theme.mjs +19 -11
  228. package/fesm2022/ojiepermana-angular-theme.mjs.map +1 -1
  229. package/generator/api/bin/src/emit/client.js +4 -2
  230. package/generator/api/bin/src/writer/index.js +2 -2
  231. package/generator/guide/bin/schematics/build/index.js +3 -2
  232. package/generator/guide/bin/src/engine/component.js +2 -2
  233. package/generator/guide/bin/src/engine/index.js +3 -3
  234. package/generator/guide/bin/src/engine/render.js +10 -5
  235. package/layout/type/empty/package.json +4 -0
  236. package/layout/type/horizontal/package.json +4 -0
  237. package/layout/type/vertical/package.json +4 -0
  238. package/navigation/topbar/README.md +196 -0
  239. package/package.json +89 -25
  240. package/theme/README.md +110 -3
  241. package/theme/styles/integrations/material/autocomplete.css +178 -0
  242. package/theme/styles/integrations/material/button.css +468 -0
  243. package/theme/styles/integrations/material/dialog.css +152 -0
  244. package/theme/styles/integrations/material/select.css +175 -0
  245. package/theme/styles/integrations/material/slide-toggle.css +234 -0
  246. package/theme/styles/integrations/material/slider.css +194 -0
  247. package/theme/styles/integrations/material/tabs.css +229 -0
  248. package/theme/styles/integrations/material.css +70 -60
  249. package/types/ojiepermana-angular-component-combobox.d.ts +1 -2
  250. package/types/ojiepermana-angular-component-composer.d.ts +90 -0
  251. package/types/ojiepermana-angular-component-dropdown-menu.d.ts +2 -0
  252. package/types/ojiepermana-angular-component-editor.d.ts +123 -0
  253. package/types/ojiepermana-angular-component-empty.d.ts +50 -0
  254. package/types/ojiepermana-angular-component-form.d.ts +52 -3
  255. package/types/ojiepermana-angular-component-hover-card.d.ts +74 -0
  256. package/types/ojiepermana-angular-component-input-otp.d.ts +136 -0
  257. package/types/ojiepermana-angular-component-kanban.d.ts +70 -0
  258. package/types/ojiepermana-angular-component-kbd.d.ts +16 -0
  259. package/types/ojiepermana-angular-component-menubar.d.ts +67 -0
  260. package/types/ojiepermana-angular-component-native-select.d.ts +26 -0
  261. package/types/ojiepermana-angular-component-navigation-menu.d.ts +96 -0
  262. package/types/ojiepermana-angular-component-pagination.d.ts +10 -4
  263. package/types/ojiepermana-angular-component-pillbox.d.ts +157 -0
  264. package/types/ojiepermana-angular-component-radio.d.ts +7 -1
  265. package/types/ojiepermana-angular-component-resizable.d.ts +99 -0
  266. package/types/ojiepermana-angular-component-select.d.ts +17 -5
  267. package/types/ojiepermana-angular-component-sheet.d.ts +3 -1
  268. package/types/ojiepermana-angular-component-slider.d.ts +59 -1
  269. package/types/ojiepermana-angular-component-spinner.d.ts +13 -0
  270. package/types/ojiepermana-angular-component-switch.d.ts +13 -3
  271. package/types/ojiepermana-angular-component-timeline.d.ts +63 -0
  272. package/types/ojiepermana-angular-component-toast.d.ts +12 -3
  273. package/types/ojiepermana-angular-component-toggle-group.d.ts +89 -0
  274. package/types/ojiepermana-angular-component-toggle.d.ts +25 -0
  275. package/types/ojiepermana-angular-component-tooltip.d.ts +72 -5
  276. package/types/{ojiepermana-angular-layout-horizontal.d.ts → ojiepermana-angular-layout-type-horizontal.d.ts} +3 -3
  277. package/types/{ojiepermana-angular-layout-vertical.d.ts → ojiepermana-angular-layout-type-vertical.d.ts} +3 -3
  278. package/types/ojiepermana-angular-layout.d.ts +5 -5
  279. package/types/ojiepermana-angular-navigation-item.d.ts +1 -1
  280. package/types/ojiepermana-angular-navigation-service.d.ts +7 -7
  281. package/types/ojiepermana-angular-navigation-sidebar.d.ts +8 -8
  282. package/types/ojiepermana-angular-navigation-topbar.d.ts +24 -4
  283. package/types/ojiepermana-angular-navigation-types.d.ts +14 -8
  284. package/fesm2022/ojiepermana-angular-layout-empty.mjs.map +0 -1
  285. package/fesm2022/ojiepermana-angular-layout-horizontal.mjs.map +0 -1
  286. package/fesm2022/ojiepermana-angular-layout-vertical.mjs.map +0 -1
  287. package/layout/empty/package.json +0 -4
  288. package/layout/horizontal/package.json +0 -4
  289. package/layout/vertical/package.json +0 -4
  290. /package/types/{ojiepermana-angular-layout-empty.d.ts → ojiepermana-angular-layout-type-empty.d.ts} +0 -0
@@ -17,7 +17,7 @@ import { ScrollAreaComponent } from '@ojiepermana/angular/component/scroll-area'
17
17
  *
18
18
  * Variants:
19
19
  * - `default`: 17.5rem, label + icon
20
- * - `thin`: 4rem icon-only; hover memunculkan overlay expand (tidak push konten)
20
+ * - `docked`: 4rem icon-only; hover memunculkan overlay expand (tidak push konten)
21
21
  *
22
22
  * Mobile (`< md`): saat `autoMobile=true` (default), host desktop disembunyikan
23
23
  * dan konten dirender lewat CDK Overlay drawer dengan focus trap. State buka
@@ -31,27 +31,40 @@ class SidebarComponent {
31
31
  focusTrapFactory = inject(FocusTrapFactory);
32
32
  doc = inject(DOCUMENT);
33
33
  destroyRef = inject(DestroyRef);
34
- items = input([], ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
34
+ items = input([], /* @ts-ignore */
35
+ ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
35
36
  /** Registry key di `NavigationService`. Default `'main'`. */
36
- navigationId = input(DEFAULT_NAVIGATION_ID, ...(ngDevMode ? [{ debugName: "navigationId" }] : /* istanbul ignore next */ []));
37
- appearance = input('default', ...(ngDevMode ? [{ debugName: "appearance" }] : /* istanbul ignore next */ []));
37
+ navigationId = input(DEFAULT_NAVIGATION_ID, /* @ts-ignore */
38
+ ...(ngDevMode ? [{ debugName: "navigationId" }] : /* istanbul ignore next */ []));
39
+ variant = input('default', /* @ts-ignore */
40
+ ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
38
41
  /** Desktop border can be owned by the sidebar or by the surrounding layout shell. */
39
- borderSource = input('component', ...(ngDevMode ? [{ debugName: "borderSource" }] : /* istanbul ignore next */ []));
40
- position = input('left', ...(ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []));
41
- ariaLabel = input('Primary', ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
42
- header = input(true, ...(ngDevMode ? [{ debugName: "header" }] : /* istanbul ignore next */ []));
43
- class = input('', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
42
+ borderSource = input('component', /* @ts-ignore */
43
+ ...(ngDevMode ? [{ debugName: "borderSource" }] : /* istanbul ignore next */ []));
44
+ position = input('left', /* @ts-ignore */
45
+ ...(ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []));
46
+ ariaLabel = input('Primary', /* @ts-ignore */
47
+ ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
48
+ header = input(true, /* @ts-ignore */
49
+ ...(ngDevMode ? [{ debugName: "header" }] : /* istanbul ignore next */ []));
50
+ class = input('', /* @ts-ignore */
51
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
44
52
  /** Auto switch ke CDK overlay drawer saat viewport `< md`. */
45
- autoMobile = input(true, ...(ngDevMode ? [{ debugName: "autoMobile" }] : /* istanbul ignore next */ []));
53
+ autoMobile = input(true, /* @ts-ignore */
54
+ ...(ngDevMode ? [{ debugName: "autoMobile" }] : /* istanbul ignore next */ []));
46
55
  /** Auto-register `items` ke `NavigationService` agar `activeTrail` bekerja. */
47
- autoRegister = input(true, ...(ngDevMode ? [{ debugName: "autoRegister" }] : /* istanbul ignore next */ []));
56
+ autoRegister = input(true, /* @ts-ignore */
57
+ ...(ngDevMode ? [{ debugName: "autoRegister" }] : /* istanbul ignore next */ []));
48
58
  /** Resolved items: input jika disediakan, fallback ke registry NavigationService. */
49
59
  resolvedItems = computed(() => {
50
60
  const explicit = this.items();
51
61
  return explicit.length > 0 ? explicit : this.nav.getItems(this.navigationId())();
52
- }, ...(ngDevMode ? [{ debugName: "resolvedItems" }] : /* istanbul ignore next */ []));
53
- hovered = signal(false, ...(ngDevMode ? [{ debugName: "hovered" }] : /* istanbul ignore next */ []));
54
- suppressHoverUntilLeave = signal(false, ...(ngDevMode ? [{ debugName: "suppressHoverUntilLeave" }] : /* istanbul ignore next */ []));
62
+ }, /* @ts-ignore */
63
+ ...(ngDevMode ? [{ debugName: "resolvedItems" }] : /* istanbul ignore next */ []));
64
+ hovered = signal(false, /* @ts-ignore */
65
+ ...(ngDevMode ? [{ debugName: "hovered" }] : /* istanbul ignore next */ []));
66
+ suppressHoverUntilLeave = signal(false, /* @ts-ignore */
67
+ ...(ngDevMode ? [{ debugName: "suppressHoverUntilLeave" }] : /* istanbul ignore next */ []));
55
68
  drawerTpl = viewChild.required('drawerTpl');
56
69
  drawerRef = null;
57
70
  focusTrap = null;
@@ -60,20 +73,27 @@ class SidebarComponent {
60
73
  isMobileMedia = toSignal(this.bp.observe('(max-width: 767.98px)').pipe(map((s) => s.matches)), {
61
74
  initialValue: false,
62
75
  });
63
- isMobile = computed(() => this.autoMobile() && this.isMobileMedia(), ...(ngDevMode ? [{ debugName: "isMobile" }] : /* istanbul ignore next */ []));
76
+ isMobile = computed(() => this.autoMobile() && this.isMobileMedia(), /* @ts-ignore */
77
+ ...(ngDevMode ? [{ debugName: "isMobile" }] : /* istanbul ignore next */ []));
64
78
  resolvedCollapsed = computed(() => {
65
79
  if (this.nav.hasStoredSidebarCollapse()) {
66
80
  return this.nav.collapsed();
67
81
  }
68
- return this.appearance() === 'thin';
69
- }, ...(ngDevMode ? [{ debugName: "resolvedCollapsed" }] : /* istanbul ignore next */ []));
70
- resolvedAppearance = computed(() => {
71
- return this.resolvedCollapsed() ? 'thin' : 'default';
72
- }, ...(ngDevMode ? [{ debugName: "resolvedAppearance" }] : /* istanbul ignore next */ []));
73
- hoverActive = computed(() => this.hovered() && !this.suppressHoverUntilLeave(), ...(ngDevMode ? [{ debugName: "hoverActive" }] : /* istanbul ignore next */ []));
74
- isExpanded = computed(() => !this.resolvedCollapsed() || this.hoverActive(), ...(ngDevMode ? [{ debugName: "isExpanded" }] : /* istanbul ignore next */ []));
75
- isCompact = computed(() => !this.isMobile() && this.resolvedCollapsed() && !this.hoverActive(), ...(ngDevMode ? [{ debugName: "isCompact" }] : /* istanbul ignore next */ []));
76
- toggleButtonLabel = computed(() => this.resolvedCollapsed() ? 'Expand sidebar' : 'Collapse sidebar', ...(ngDevMode ? [{ debugName: "toggleButtonLabel" }] : /* istanbul ignore next */ []));
82
+ return this.variant() === 'docked';
83
+ }, /* @ts-ignore */
84
+ ...(ngDevMode ? [{ debugName: "resolvedCollapsed" }] : /* istanbul ignore next */ []));
85
+ resolvedVariant = computed(() => {
86
+ return this.resolvedCollapsed() ? 'docked' : 'default';
87
+ }, /* @ts-ignore */
88
+ ...(ngDevMode ? [{ debugName: "resolvedVariant" }] : /* istanbul ignore next */ []));
89
+ hoverActive = computed(() => this.hovered() && !this.suppressHoverUntilLeave(), /* @ts-ignore */
90
+ ...(ngDevMode ? [{ debugName: "hoverActive" }] : /* istanbul ignore next */ []));
91
+ isExpanded = computed(() => !this.resolvedCollapsed() || this.hoverActive(), /* @ts-ignore */
92
+ ...(ngDevMode ? [{ debugName: "isExpanded" }] : /* istanbul ignore next */ []));
93
+ isCompact = computed(() => !this.isMobile() && this.resolvedCollapsed() && !this.hoverActive(), /* @ts-ignore */
94
+ ...(ngDevMode ? [{ debugName: "isCompact" }] : /* istanbul ignore next */ []));
95
+ toggleButtonLabel = computed(() => this.resolvedCollapsed() ? 'Expand sidebar' : 'Collapse sidebar', /* @ts-ignore */
96
+ ...(ngDevMode ? [{ debugName: "toggleButtonLabel" }] : /* istanbul ignore next */ []));
77
97
  constructor() {
78
98
  // Auto-register items ke service untuk active trail (hanya jika input non-kosong).
79
99
  effect(() => {
@@ -105,7 +125,8 @@ class SidebarComponent {
105
125
  base.push('border-r', 'border-primary/30');
106
126
  }
107
127
  return [...base, this.class()].join(' ');
108
- }, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
128
+ }, /* @ts-ignore */
129
+ ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
109
130
  headerClasses = computed(() => {
110
131
  const base = ['flex items-center gap-1 border-b border-primary/30'];
111
132
  if (this.isCompact()) {
@@ -115,7 +136,8 @@ class SidebarComponent {
115
136
  base.push('h-12', 'pr-2');
116
137
  }
117
138
  return base.join(' ');
118
- }, ...(ngDevMode ? [{ debugName: "headerClasses" }] : /* istanbul ignore next */ []));
139
+ }, /* @ts-ignore */
140
+ ...(ngDevMode ? [{ debugName: "headerClasses" }] : /* istanbul ignore next */ []));
119
141
  headerSlotClasses = computed(() => {
120
142
  const base = ['min-w-0'];
121
143
  if (this.isCompact()) {
@@ -125,22 +147,26 @@ class SidebarComponent {
125
147
  base.push('flex min-w-0 flex-1 items-center');
126
148
  }
127
149
  return base.join(' ');
128
- }, ...(ngDevMode ? [{ debugName: "headerSlotClasses" }] : /* istanbul ignore next */ []));
150
+ }, /* @ts-ignore */
151
+ ...(ngDevMode ? [{ debugName: "headerSlotClasses" }] : /* istanbul ignore next */ []));
129
152
  navClasses = computed(() => {
130
153
  const base = ['min-h-full'];
131
154
  if (this.isCompact()) {
132
155
  base.push('px-2', '[&_.ui-nav-text]:mx-auto', '[&_.ui-nav-text]:w-10', '[&_.ui-nav-text]:justify-center', '[&_.ui-nav-text]:px-0');
133
156
  }
134
157
  return base.join(' ');
135
- }, ...(ngDevMode ? [{ debugName: "navClasses" }] : /* istanbul ignore next */ []));
136
- scrollViewportClasses = computed(() => 'overflow-y-auto overflow-x-hidden scrollbar-thin scrollbar-thumb-primary scrollbar-track-primary/10', ...(ngDevMode ? [{ debugName: "scrollViewportClasses" }] : /* istanbul ignore next */ []));
158
+ }, /* @ts-ignore */
159
+ ...(ngDevMode ? [{ debugName: "navClasses" }] : /* istanbul ignore next */ []));
160
+ scrollViewportClasses = computed(() => 'overflow-y-auto overflow-x-hidden scrollbar-thin scrollbar-thumb-primary scrollbar-track-primary/10', /* @ts-ignore */
161
+ ...(ngDevMode ? [{ debugName: "scrollViewportClasses" }] : /* istanbul ignore next */ []));
137
162
  footerClasses = computed(() => {
138
163
  const base = ['h-12 border-t border-primary/30'];
139
164
  if (this.isCompact()) {
140
165
  base.push('flex items-center justify-center px-2');
141
166
  }
142
167
  return base.join(' ');
143
- }, ...(ngDevMode ? [{ debugName: "footerClasses" }] : /* istanbul ignore next */ []));
168
+ }, /* @ts-ignore */
169
+ ...(ngDevMode ? [{ debugName: "footerClasses" }] : /* istanbul ignore next */ []));
144
170
  footerSlotClasses = computed(() => {
145
171
  const base = ['h-full'];
146
172
  if (this.isCompact()) {
@@ -150,7 +176,8 @@ class SidebarComponent {
150
176
  base.push('w-full');
151
177
  }
152
178
  return base.join(' ');
153
- }, ...(ngDevMode ? [{ debugName: "footerSlotClasses" }] : /* istanbul ignore next */ []));
179
+ }, /* @ts-ignore */
180
+ ...(ngDevMode ? [{ debugName: "footerSlotClasses" }] : /* istanbul ignore next */ []));
154
181
  innerClasses = computed(() => {
155
182
  const overlayActive = this.resolvedCollapsed() && this.hoverActive();
156
183
  const base = ['flex h-full flex-col transition-[width] duration-200 ease-out'];
@@ -164,7 +191,8 @@ class SidebarComponent {
164
191
  base.push('w-full');
165
192
  }
166
193
  return base.join(' ');
167
- }, ...(ngDevMode ? [{ debugName: "innerClasses" }] : /* istanbul ignore next */ []));
194
+ }, /* @ts-ignore */
195
+ ...(ngDevMode ? [{ debugName: "innerClasses" }] : /* istanbul ignore next */ []));
168
196
  onHoverEnter() {
169
197
  if (!this.resolvedCollapsed() || this.isMobile() || this.suppressHoverUntilLeave())
170
198
  return;
@@ -175,14 +203,14 @@ class SidebarComponent {
175
203
  if (this.resolvedCollapsed())
176
204
  this.hovered.set(false);
177
205
  }
178
- toggleAppearance(event) {
206
+ toggleVariant(event) {
179
207
  event.stopPropagation();
180
208
  const nextCollapsed = !this.resolvedCollapsed();
181
209
  this.nav.setCollapsed(nextCollapsed);
182
210
  this.hovered.set(false);
183
211
  this.suppressHoverUntilLeave.set(nextCollapsed);
184
212
  }
185
- /** Touch fallback: tap pada strip thin (ketika belum expanded) untuk expand. */
213
+ /** Touch fallback: tap pada strip docked (ketika belum expanded) untuk expand. */
186
214
  onHostClick(event) {
187
215
  if (!this.resolvedCollapsed() || this.isMobile())
188
216
  return;
@@ -237,8 +265,8 @@ class SidebarComponent {
237
265
  this.previouslyFocused?.focus?.();
238
266
  this.previouslyFocused = null;
239
267
  }
240
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: SidebarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
241
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: SidebarComponent, isStandalone: true, selector: "sidebar", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, navigationId: { classPropertyName: "navigationId", publicName: "navigationId", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, borderSource: { classPropertyName: "borderSource", publicName: "borderSource", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, autoMobile: { classPropertyName: "autoMobile", publicName: "autoMobile", isSignal: true, isRequired: false, transformFunction: null }, autoRegister: { classPropertyName: "autoRegister", publicName: "autoRegister", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "navigation" }, listeners: { "mouseenter": "onHoverEnter()", "mouseleave": "onHoverLeave()", "focusin": "onHoverEnter()", "click": "onHostClick($event)" }, properties: { "attr.aria-label": "ariaLabel()", "class": "hostClasses()", "attr.data-appearance": "resolvedAppearance()", "attr.data-position": "position()", "attr.data-expanded": "isExpanded()", "hidden": "isMobile()" } }, viewQueries: [{ propertyName: "drawerTpl", first: true, predicate: ["drawerTpl"], descendants: true, isSignal: true }], ngImport: i0, template: `
268
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: SidebarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
269
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", type: SidebarComponent, isStandalone: true, selector: "sidebar", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, navigationId: { classPropertyName: "navigationId", publicName: "navigationId", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, borderSource: { classPropertyName: "borderSource", publicName: "borderSource", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, autoMobile: { classPropertyName: "autoMobile", publicName: "autoMobile", isSignal: true, isRequired: false, transformFunction: null }, autoRegister: { classPropertyName: "autoRegister", publicName: "autoRegister", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "navigation" }, listeners: { "mouseenter": "onHoverEnter()", "mouseleave": "onHoverLeave()", "focusin": "onHoverEnter()", "click": "onHostClick($event)" }, properties: { "attr.aria-label": "ariaLabel()", "class": "hostClasses()", "attr.data-variant": "resolvedVariant()", "attr.data-position": "position()", "attr.data-expanded": "isExpanded()", "hidden": "isMobile()" } }, viewQueries: [{ propertyName: "drawerTpl", first: true, predicate: ["drawerTpl"], descendants: true, isSignal: true }], ngImport: i0, template: `
242
270
  <div [class]="innerClasses()">
243
271
  <ng-container [ngTemplateOutlet]="body" />
244
272
  </div>
@@ -256,8 +284,8 @@ class SidebarComponent {
256
284
  class="inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-muted/50 hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background"
257
285
  [attr.aria-label]="toggleButtonLabel()"
258
286
  [attr.title]="toggleButtonLabel()"
259
- [attr.aria-pressed]="resolvedAppearance() === 'thin'"
260
- (click)="toggleAppearance($event)">
287
+ [attr.aria-pressed]="resolvedVariant() === 'docked'"
288
+ (click)="toggleVariant($event)">
261
289
  <ui-nav-icon name="view_sidebar" [size]="18" class="text-current" />
262
290
  </button>
263
291
  }
@@ -291,7 +319,7 @@ class SidebarComponent {
291
319
  </ng-template>
292
320
  `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ScrollAreaComponent, selector: "ui-scroll-area", inputs: ["class", "viewportClass", "viewportAriaLabel", "viewportTabIndex"] }, { kind: "component", type: UiNavIconComponent, selector: "ui-nav-icon", inputs: ["name", "class", "size"] }, { kind: "component", type: UiNavItemComponent, selector: "ui-nav-item", inputs: ["item", "level", "compact", "railConnector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
293
321
  }
294
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: SidebarComponent, decorators: [{
322
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: SidebarComponent, decorators: [{
295
323
  type: Component,
296
324
  args: [{
297
325
  selector: 'sidebar',
@@ -301,7 +329,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
301
329
  role: 'navigation',
302
330
  '[attr.aria-label]': 'ariaLabel()',
303
331
  '[class]': 'hostClasses()',
304
- '[attr.data-appearance]': 'resolvedAppearance()',
332
+ '[attr.data-variant]': 'resolvedVariant()',
305
333
  '[attr.data-position]': 'position()',
306
334
  '[attr.data-expanded]': 'isExpanded()',
307
335
  '[hidden]': 'isMobile()',
@@ -328,8 +356,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
328
356
  class="inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-muted/50 hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background"
329
357
  [attr.aria-label]="toggleButtonLabel()"
330
358
  [attr.title]="toggleButtonLabel()"
331
- [attr.aria-pressed]="resolvedAppearance() === 'thin'"
332
- (click)="toggleAppearance($event)">
359
+ [attr.aria-pressed]="resolvedVariant() === 'docked'"
360
+ (click)="toggleVariant($event)">
333
361
  <ui-nav-icon name="view_sidebar" [size]="18" class="text-current" />
334
362
  </button>
335
363
  }
@@ -363,7 +391,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
363
391
  </ng-template>
364
392
  `,
365
393
  }]
366
- }], ctorParameters: () => [], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], navigationId: [{ type: i0.Input, args: [{ isSignal: true, alias: "navigationId", required: false }] }], appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: false }] }], borderSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "borderSource", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], header: [{ type: i0.Input, args: [{ isSignal: true, alias: "header", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], autoMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoMobile", required: false }] }], autoRegister: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoRegister", required: false }] }], drawerTpl: [{ type: i0.ViewChild, args: ['drawerTpl', { isSignal: true }] }] } });
394
+ }], ctorParameters: () => [], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], navigationId: [{ type: i0.Input, args: [{ isSignal: true, alias: "navigationId", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], borderSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "borderSource", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], header: [{ type: i0.Input, args: [{ isSignal: true, alias: "header", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], autoMobile: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoMobile", required: false }] }], autoRegister: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoRegister", required: false }] }], drawerTpl: [{ type: i0.ViewChild, args: ['drawerTpl', { isSignal: true }] }] } });
367
395
 
368
396
  /**
369
397
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"ojiepermana-angular-navigation-sidebar.mjs","sources":["../../../projects/angular/navigation/sidebar/src/lib/sidebar.component.ts","../../../projects/angular/navigation/sidebar/ojiepermana-angular-navigation-sidebar.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n TemplateRef,\n ViewContainerRef,\n computed,\n effect,\n inject,\n input,\n signal,\n viewChild,\n} from '@angular/core';\nimport { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport { toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { BreakpointObserver } from '@angular/cdk/layout';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { FocusTrap, FocusTrapFactory } from '@angular/cdk/a11y';\nimport { filter, map } from 'rxjs/operators';\nimport { UiNavIconComponent } from '@ojiepermana/angular/navigation/icon';\nimport { UiNavItemComponent } from '@ojiepermana/angular/navigation/item';\nimport { DEFAULT_NAVIGATION_ID, NavigationService } from '@ojiepermana/angular/navigation/service';\nimport type {\n NavigationItem,\n SidebarAppearance,\n SidebarBorderSource,\n SidebarPosition,\n} from '@ojiepermana/angular/navigation/types';\nimport { ScrollAreaComponent } from '@ojiepermana/angular/component/scroll-area';\n\n/**\n * Vertical navigation (sidebar) — shadcn-styled.\n *\n * Variants:\n * - `default`: 17.5rem, label + icon\n * - `thin`: 4rem icon-only; hover memunculkan overlay expand (tidak push konten)\n *\n * Mobile (`< md`): saat `autoMobile=true` (default), host desktop disembunyikan\n * dan konten dirender lewat CDK Overlay drawer dengan focus trap. State buka\n * dikontrol lewat `NavigationService.mobileOpen`.\n */\n@Component({\n selector: 'sidebar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet, ScrollAreaComponent, UiNavIconComponent, UiNavItemComponent],\n host: {\n role: 'navigation',\n '[attr.aria-label]': 'ariaLabel()',\n '[class]': 'hostClasses()',\n '[attr.data-appearance]': 'resolvedAppearance()',\n '[attr.data-position]': 'position()',\n '[attr.data-expanded]': 'isExpanded()',\n '[hidden]': 'isMobile()',\n '(mouseenter)': 'onHoverEnter()',\n '(mouseleave)': 'onHoverLeave()',\n '(focusin)': 'onHoverEnter()',\n '(click)': 'onHostClick($event)',\n },\n template: `\n <div [class]=\"innerClasses()\">\n <ng-container [ngTemplateOutlet]=\"body\" />\n </div>\n\n <ng-template #body>\n @if (header()) {\n <div [class]=\"headerClasses()\">\n <div [class]=\"headerSlotClasses()\">\n <ng-content select=\"[sidebar-header]\" />\n </div>\n @if (!isMobile() && !isCompact()) {\n <button\n type=\"button\"\n data-sidebar-toggle\n class=\"inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-muted/50 hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\"\n [attr.aria-label]=\"toggleButtonLabel()\"\n [attr.title]=\"toggleButtonLabel()\"\n [attr.aria-pressed]=\"resolvedAppearance() === 'thin'\"\n (click)=\"toggleAppearance($event)\">\n <ui-nav-icon name=\"view_sidebar\" [size]=\"18\" class=\"text-current\" />\n </button>\n }\n </div>\n }\n <ui-scroll-area class=\"min-h-0 flex-1\" [viewportClass]=\"scrollViewportClasses()\">\n <nav [class]=\"navClasses()\">\n @for (item of resolvedItems(); track item.id) {\n <ui-nav-item [item]=\"item\" [compact]=\"isCompact()\" />\n }\n </nav>\n </ui-scroll-area>\n <div [class]=\"footerClasses()\">\n <div [class]=\"footerSlotClasses()\">\n <ng-content select=\"[sidebar-footer]\" />\n </div>\n </div>\n </ng-template>\n\n <ng-template #drawerTpl>\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"ariaLabel()\"\n class=\"flex h-full w-72 max-w-[85vw] flex-col border-primary/30 text-foreground shadow-xl\"\n [class.border-r]=\"position() === 'left'\"\n [class.border-l]=\"position() === 'right'\"\n [class.border-primary/30]=\"position() === 'left' || position() === 'right'\">\n <ng-container [ngTemplateOutlet]=\"body\" />\n </div>\n </ng-template>\n `,\n})\nexport class SidebarComponent {\n private readonly nav = inject(NavigationService);\n private readonly bp = inject(BreakpointObserver);\n private readonly overlay = inject(Overlay);\n private readonly vcr = inject(ViewContainerRef);\n private readonly focusTrapFactory = inject(FocusTrapFactory);\n private readonly doc = inject(DOCUMENT);\n private readonly destroyRef = inject(DestroyRef);\n\n readonly items = input<NavigationItem[]>([]);\n /** Registry key di `NavigationService`. Default `'main'`. */\n readonly navigationId = input<string>(DEFAULT_NAVIGATION_ID);\n readonly appearance = input<SidebarAppearance>('default');\n /** Desktop border can be owned by the sidebar or by the surrounding layout shell. */\n readonly borderSource = input<SidebarBorderSource>('component');\n readonly position = input<SidebarPosition>('left');\n readonly ariaLabel = input<string>('Primary');\n readonly header = input<boolean>(true);\n readonly class = input<string>('');\n /** Auto switch ke CDK overlay drawer saat viewport `< md`. */\n readonly autoMobile = input<boolean>(true);\n /** Auto-register `items` ke `NavigationService` agar `activeTrail` bekerja. */\n readonly autoRegister = input<boolean>(true);\n\n /** Resolved items: input jika disediakan, fallback ke registry NavigationService. */\n protected readonly resolvedItems = computed(() => {\n const explicit = this.items();\n return explicit.length > 0 ? explicit : this.nav.getItems(this.navigationId())();\n });\n\n private readonly hovered = signal<boolean>(false);\n private readonly suppressHoverUntilLeave = signal<boolean>(false);\n\n private readonly drawerTpl = viewChild.required<TemplateRef<unknown>>('drawerTpl');\n private drawerRef: OverlayRef | null = null;\n private focusTrap: FocusTrap | null = null;\n private previouslyFocused: HTMLElement | null = null;\n\n /** True saat viewport `< md` (767.98px). */\n protected readonly isMobileMedia = toSignal(this.bp.observe('(max-width: 767.98px)').pipe(map((s) => s.matches)), {\n initialValue: false,\n });\n\n protected readonly isMobile = computed(() => this.autoMobile() && this.isMobileMedia());\n protected readonly resolvedCollapsed = computed(() => {\n if (this.nav.hasStoredSidebarCollapse()) {\n return this.nav.collapsed();\n }\n\n return this.appearance() === 'thin';\n });\n protected readonly resolvedAppearance = computed<SidebarAppearance>(() => {\n return this.resolvedCollapsed() ? 'thin' : 'default';\n });\n protected readonly hoverActive = computed(() => this.hovered() && !this.suppressHoverUntilLeave());\n protected readonly isExpanded = computed(() => !this.resolvedCollapsed() || this.hoverActive());\n protected readonly isCompact = computed(() => !this.isMobile() && this.resolvedCollapsed() && !this.hoverActive());\n protected readonly toggleButtonLabel = computed(() =>\n this.resolvedCollapsed() ? 'Expand sidebar' : 'Collapse sidebar',\n );\n\n constructor() {\n // Auto-register items ke service untuk active trail (hanya jika input non-kosong).\n effect(() => {\n const explicit = this.items();\n if (this.autoRegister() && explicit.length > 0) this.nav.registerItems(this.navigationId(), explicit);\n });\n\n // Kelola overlay drawer berdasarkan mobileOpen + isMobile.\n effect(() => {\n const open = this.nav.mobileOpen();\n const mobile = this.isMobile();\n if (mobile && open) this.openDrawer();\n else this.closeDrawer();\n });\n\n this.destroyRef.onDestroy(() => this.closeDrawer());\n }\n\n protected readonly hostClasses = computed(() => {\n const base = ['relative flex shrink-0 text-foreground', 'transition-[width] duration-200 ease-out'];\n if (this.resolvedCollapsed()) base.push('w-16');\n else base.push('[width:17.5rem]');\n if (this.borderSource() === 'component') {\n if (this.position() === 'right') base.push('border-l', 'border-primary/30');\n else base.push('border-r', 'border-primary/30');\n }\n return [...base, this.class()].join(' ');\n });\n\n protected readonly headerClasses = computed(() => {\n const base = ['flex items-center gap-1 border-b border-primary/30'];\n if (this.isCompact()) {\n base.push('h-12', 'justify-center', 'px-2');\n } else {\n base.push('h-12', 'pr-2');\n }\n return base.join(' ');\n });\n\n protected readonly headerSlotClasses = computed(() => {\n const base = ['min-w-0'];\n if (this.isCompact()) {\n base.push(\n 'flex flex-1 items-center justify-center overflow-hidden',\n '[&>[sidebar-header]>*]:mx-auto',\n '[&>[sidebar-header]>*]:w-auto',\n '[&>[sidebar-header]>*]:max-w-full',\n '[&>[sidebar-header]>*]:justify-center',\n '[&>[sidebar-header]>*]:gap-0',\n '[&>[sidebar-header]>*]:px-0',\n '[&>[sidebar-header]>*]:shrink-0',\n '[&>[sidebar-header]>*>*:first-child]:mx-auto',\n '[&>[sidebar-header]>*>*:nth-child(n+2)]:hidden',\n );\n } else {\n base.push('flex min-w-0 flex-1 items-center');\n }\n return base.join(' ');\n });\n\n protected readonly navClasses = computed(() => {\n const base = ['min-h-full'];\n if (this.isCompact()) {\n base.push(\n 'px-2',\n '[&_.ui-nav-text]:mx-auto',\n '[&_.ui-nav-text]:w-10',\n '[&_.ui-nav-text]:justify-center',\n '[&_.ui-nav-text]:px-0',\n );\n }\n return base.join(' ');\n });\n\n protected readonly scrollViewportClasses = computed(\n () => 'overflow-y-auto overflow-x-hidden scrollbar-thin scrollbar-thumb-primary scrollbar-track-primary/10',\n );\n\n protected readonly footerClasses = computed(() => {\n const base = ['h-12 border-t border-primary/30'];\n if (this.isCompact()) {\n base.push('flex items-center justify-center px-2');\n }\n return base.join(' ');\n });\n\n protected readonly footerSlotClasses = computed(() => {\n const base = ['h-full'];\n if (this.isCompact()) {\n base.push(\n 'flex h-full items-center justify-center overflow-hidden',\n '[&>[sidebar-footer]>*]:mx-auto',\n '[&>[sidebar-footer]>*]:w-auto',\n '[&>[sidebar-footer]>*]:max-w-full',\n '[&>[sidebar-footer]>*]:justify-center',\n '[&>[sidebar-footer]>*]:gap-0',\n '[&>[sidebar-footer]>*]:px-0',\n '[&>[sidebar-footer]>*>*:first-child]:mx-auto',\n '[&>[sidebar-footer]>*>*:nth-child(n+2)]:hidden',\n );\n } else {\n base.push('w-full');\n }\n return base.join(' ');\n });\n\n protected readonly innerClasses = computed(() => {\n const overlayActive = this.resolvedCollapsed() && this.hoverActive();\n const base = ['flex h-full flex-col transition-[width] duration-200 ease-out'];\n if (this.resolvedCollapsed()) {\n base.push('bg-background');\n }\n if (overlayActive) {\n base.push(\n 'absolute inset-y-0 z-30 border-l border-r border-primary/30 shadow-xl [width:17.5rem]',\n this.position() === 'right' ? 'right-0' : 'left-0',\n );\n } else {\n base.push('w-full');\n }\n return base.join(' ');\n });\n\n protected onHoverEnter(): void {\n if (!this.resolvedCollapsed() || this.isMobile() || this.suppressHoverUntilLeave()) return;\n this.hovered.set(true);\n }\n\n protected onHoverLeave(): void {\n this.suppressHoverUntilLeave.set(false);\n if (this.resolvedCollapsed()) this.hovered.set(false);\n }\n\n protected toggleAppearance(event: MouseEvent): void {\n event.stopPropagation();\n const nextCollapsed = !this.resolvedCollapsed();\n this.nav.setCollapsed(nextCollapsed);\n this.hovered.set(false);\n this.suppressHoverUntilLeave.set(nextCollapsed);\n }\n\n /** Touch fallback: tap pada strip thin (ketika belum expanded) untuk expand. */\n protected onHostClick(event: MouseEvent): void {\n if (!this.resolvedCollapsed() || this.isMobile()) return;\n if (this.hovered()) return;\n const target = event.target as HTMLElement | null;\n // Biarkan klik pada control interaktif terus propagate (tidak intercept).\n if (target && target.closest('a,button,[role=\"menuitem\"]')) return;\n this.hovered.set(true);\n }\n\n private openDrawer(): void {\n if (this.drawerRef) return;\n const side = this.position();\n const pos = this.overlay.position().global().top('0');\n if (side === 'right') pos.right('0');\n else pos.left('0');\n\n this.drawerRef = this.overlay.create({\n positionStrategy: pos,\n height: '100vh',\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-dark-backdrop',\n scrollStrategy: this.overlay.scrollStrategies.block(),\n panelClass: ['sidebar-drawer'],\n });\n\n const portal = new TemplatePortal(this.drawerTpl(), this.vcr);\n const viewRef = this.drawerRef.attach(portal);\n viewRef.detectChanges();\n\n const root = this.drawerRef.overlayElement;\n this.focusTrap = this.focusTrapFactory.create(root);\n this.previouslyFocused = this.doc.activeElement as HTMLElement | null;\n queueMicrotask(() => this.focusTrap?.focusInitialElementWhenReady());\n\n this.drawerRef\n .backdropClick()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.nav.closeMobile());\n\n this.drawerRef\n .keydownEvents()\n .pipe(\n filter((e) => e.key === 'Escape'),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe(() => this.nav.closeMobile());\n }\n\n private closeDrawer(): void {\n if (!this.drawerRef) return;\n this.focusTrap?.destroy();\n this.focusTrap = null;\n this.drawerRef.dispose();\n this.drawerRef = null;\n this.previouslyFocused?.focus?.();\n this.previouslyFocused = null;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ojiepermana-angular-navigation-sidebar.mjs","sources":["../../../projects/angular/navigation/sidebar/default/sidebar.component.ts","../../../projects/angular/navigation/sidebar/ojiepermana-angular-navigation-sidebar.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n TemplateRef,\n ViewContainerRef,\n computed,\n effect,\n inject,\n input,\n signal,\n viewChild,\n} from '@angular/core';\nimport { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport { toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { BreakpointObserver } from '@angular/cdk/layout';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { FocusTrap, FocusTrapFactory } from '@angular/cdk/a11y';\nimport { filter, map } from 'rxjs/operators';\nimport { UiNavIconComponent } from '@ojiepermana/angular/navigation/icon';\nimport { UiNavItemComponent } from '@ojiepermana/angular/navigation/item';\nimport { DEFAULT_NAVIGATION_ID, NavigationService } from '@ojiepermana/angular/navigation/service';\nimport type {\n NavigationItem,\n SidebarBorderSource,\n SidebarPosition,\n SidebarVariant,\n} from '@ojiepermana/angular/navigation/types';\nimport { ScrollAreaComponent } from '@ojiepermana/angular/component/scroll-area';\n\n/**\n * Vertical navigation (sidebar) — shadcn-styled.\n *\n * Variants:\n * - `default`: 17.5rem, label + icon\n * - `docked`: 4rem icon-only; hover memunculkan overlay expand (tidak push konten)\n *\n * Mobile (`< md`): saat `autoMobile=true` (default), host desktop disembunyikan\n * dan konten dirender lewat CDK Overlay drawer dengan focus trap. State buka\n * dikontrol lewat `NavigationService.mobileOpen`.\n */\n@Component({\n selector: 'sidebar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet, ScrollAreaComponent, UiNavIconComponent, UiNavItemComponent],\n host: {\n role: 'navigation',\n '[attr.aria-label]': 'ariaLabel()',\n '[class]': 'hostClasses()',\n '[attr.data-variant]': 'resolvedVariant()',\n '[attr.data-position]': 'position()',\n '[attr.data-expanded]': 'isExpanded()',\n '[hidden]': 'isMobile()',\n '(mouseenter)': 'onHoverEnter()',\n '(mouseleave)': 'onHoverLeave()',\n '(focusin)': 'onHoverEnter()',\n '(click)': 'onHostClick($event)',\n },\n template: `\n <div [class]=\"innerClasses()\">\n <ng-container [ngTemplateOutlet]=\"body\" />\n </div>\n\n <ng-template #body>\n @if (header()) {\n <div [class]=\"headerClasses()\">\n <div [class]=\"headerSlotClasses()\">\n <ng-content select=\"[sidebar-header]\" />\n </div>\n @if (!isMobile() && !isCompact()) {\n <button\n type=\"button\"\n data-sidebar-toggle\n class=\"inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-muted/50 hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\"\n [attr.aria-label]=\"toggleButtonLabel()\"\n [attr.title]=\"toggleButtonLabel()\"\n [attr.aria-pressed]=\"resolvedVariant() === 'docked'\"\n (click)=\"toggleVariant($event)\">\n <ui-nav-icon name=\"view_sidebar\" [size]=\"18\" class=\"text-current\" />\n </button>\n }\n </div>\n }\n <ui-scroll-area class=\"min-h-0 flex-1\" [viewportClass]=\"scrollViewportClasses()\">\n <nav [class]=\"navClasses()\">\n @for (item of resolvedItems(); track item.id) {\n <ui-nav-item [item]=\"item\" [compact]=\"isCompact()\" />\n }\n </nav>\n </ui-scroll-area>\n <div [class]=\"footerClasses()\">\n <div [class]=\"footerSlotClasses()\">\n <ng-content select=\"[sidebar-footer]\" />\n </div>\n </div>\n </ng-template>\n\n <ng-template #drawerTpl>\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"ariaLabel()\"\n class=\"flex h-full w-72 max-w-[85vw] flex-col border-primary/30 text-foreground shadow-xl\"\n [class.border-r]=\"position() === 'left'\"\n [class.border-l]=\"position() === 'right'\"\n [class.border-primary/30]=\"position() === 'left' || position() === 'right'\">\n <ng-container [ngTemplateOutlet]=\"body\" />\n </div>\n </ng-template>\n `,\n})\nexport class SidebarComponent {\n private readonly nav = inject(NavigationService);\n private readonly bp = inject(BreakpointObserver);\n private readonly overlay = inject(Overlay);\n private readonly vcr = inject(ViewContainerRef);\n private readonly focusTrapFactory = inject(FocusTrapFactory);\n private readonly doc = inject(DOCUMENT);\n private readonly destroyRef = inject(DestroyRef);\n\n readonly items = input<NavigationItem[]>([]);\n /** Registry key di `NavigationService`. Default `'main'`. */\n readonly navigationId = input<string>(DEFAULT_NAVIGATION_ID);\n readonly variant = input<SidebarVariant>('default');\n /** Desktop border can be owned by the sidebar or by the surrounding layout shell. */\n readonly borderSource = input<SidebarBorderSource>('component');\n readonly position = input<SidebarPosition>('left');\n readonly ariaLabel = input<string>('Primary');\n readonly header = input<boolean>(true);\n readonly class = input<string>('');\n /** Auto switch ke CDK overlay drawer saat viewport `< md`. */\n readonly autoMobile = input<boolean>(true);\n /** Auto-register `items` ke `NavigationService` agar `activeTrail` bekerja. */\n readonly autoRegister = input<boolean>(true);\n\n /** Resolved items: input jika disediakan, fallback ke registry NavigationService. */\n protected readonly resolvedItems = computed(() => {\n const explicit = this.items();\n return explicit.length > 0 ? explicit : this.nav.getItems(this.navigationId())();\n });\n\n private readonly hovered = signal<boolean>(false);\n private readonly suppressHoverUntilLeave = signal<boolean>(false);\n\n private readonly drawerTpl = viewChild.required<TemplateRef<unknown>>('drawerTpl');\n private drawerRef: OverlayRef | null = null;\n private focusTrap: FocusTrap | null = null;\n private previouslyFocused: HTMLElement | null = null;\n\n /** True saat viewport `< md` (767.98px). */\n protected readonly isMobileMedia = toSignal(this.bp.observe('(max-width: 767.98px)').pipe(map((s) => s.matches)), {\n initialValue: false,\n });\n\n protected readonly isMobile = computed(() => this.autoMobile() && this.isMobileMedia());\n protected readonly resolvedCollapsed = computed(() => {\n if (this.nav.hasStoredSidebarCollapse()) {\n return this.nav.collapsed();\n }\n\n return this.variant() === 'docked';\n });\n protected readonly resolvedVariant = computed<SidebarVariant>(() => {\n return this.resolvedCollapsed() ? 'docked' : 'default';\n });\n protected readonly hoverActive = computed(() => this.hovered() && !this.suppressHoverUntilLeave());\n protected readonly isExpanded = computed(() => !this.resolvedCollapsed() || this.hoverActive());\n protected readonly isCompact = computed(() => !this.isMobile() && this.resolvedCollapsed() && !this.hoverActive());\n protected readonly toggleButtonLabel = computed(() =>\n this.resolvedCollapsed() ? 'Expand sidebar' : 'Collapse sidebar',\n );\n\n constructor() {\n // Auto-register items ke service untuk active trail (hanya jika input non-kosong).\n effect(() => {\n const explicit = this.items();\n if (this.autoRegister() && explicit.length > 0) this.nav.registerItems(this.navigationId(), explicit);\n });\n\n // Kelola overlay drawer berdasarkan mobileOpen + isMobile.\n effect(() => {\n const open = this.nav.mobileOpen();\n const mobile = this.isMobile();\n if (mobile && open) this.openDrawer();\n else this.closeDrawer();\n });\n\n this.destroyRef.onDestroy(() => this.closeDrawer());\n }\n\n protected readonly hostClasses = computed(() => {\n const base = ['relative flex shrink-0 text-foreground', 'transition-[width] duration-200 ease-out'];\n if (this.resolvedCollapsed()) base.push('w-16');\n else base.push('[width:17.5rem]');\n if (this.borderSource() === 'component') {\n if (this.position() === 'right') base.push('border-l', 'border-primary/30');\n else base.push('border-r', 'border-primary/30');\n }\n return [...base, this.class()].join(' ');\n });\n\n protected readonly headerClasses = computed(() => {\n const base = ['flex items-center gap-1 border-b border-primary/30'];\n if (this.isCompact()) {\n base.push('h-12', 'justify-center', 'px-2');\n } else {\n base.push('h-12', 'pr-2');\n }\n return base.join(' ');\n });\n\n protected readonly headerSlotClasses = computed(() => {\n const base = ['min-w-0'];\n if (this.isCompact()) {\n base.push(\n 'flex flex-1 items-center justify-center overflow-hidden',\n '[&>[sidebar-header]>*]:mx-auto',\n '[&>[sidebar-header]>*]:w-auto',\n '[&>[sidebar-header]>*]:max-w-full',\n '[&>[sidebar-header]>*]:justify-center',\n '[&>[sidebar-header]>*]:gap-0',\n '[&>[sidebar-header]>*]:px-0',\n '[&>[sidebar-header]>*]:shrink-0',\n '[&>[sidebar-header]>*>*:first-child]:mx-auto',\n '[&>[sidebar-header]>*>*:nth-child(n+2)]:hidden',\n );\n } else {\n base.push('flex min-w-0 flex-1 items-center');\n }\n return base.join(' ');\n });\n\n protected readonly navClasses = computed(() => {\n const base = ['min-h-full'];\n if (this.isCompact()) {\n base.push(\n 'px-2',\n '[&_.ui-nav-text]:mx-auto',\n '[&_.ui-nav-text]:w-10',\n '[&_.ui-nav-text]:justify-center',\n '[&_.ui-nav-text]:px-0',\n );\n }\n return base.join(' ');\n });\n\n protected readonly scrollViewportClasses = computed(\n () => 'overflow-y-auto overflow-x-hidden scrollbar-thin scrollbar-thumb-primary scrollbar-track-primary/10',\n );\n\n protected readonly footerClasses = computed(() => {\n const base = ['h-12 border-t border-primary/30'];\n if (this.isCompact()) {\n base.push('flex items-center justify-center px-2');\n }\n return base.join(' ');\n });\n\n protected readonly footerSlotClasses = computed(() => {\n const base = ['h-full'];\n if (this.isCompact()) {\n base.push(\n 'flex h-full items-center justify-center overflow-hidden',\n '[&>[sidebar-footer]>*]:mx-auto',\n '[&>[sidebar-footer]>*]:w-auto',\n '[&>[sidebar-footer]>*]:max-w-full',\n '[&>[sidebar-footer]>*]:justify-center',\n '[&>[sidebar-footer]>*]:gap-0',\n '[&>[sidebar-footer]>*]:px-0',\n '[&>[sidebar-footer]>*>*:first-child]:mx-auto',\n '[&>[sidebar-footer]>*>*:nth-child(n+2)]:hidden',\n );\n } else {\n base.push('w-full');\n }\n return base.join(' ');\n });\n\n protected readonly innerClasses = computed(() => {\n const overlayActive = this.resolvedCollapsed() && this.hoverActive();\n const base = ['flex h-full flex-col transition-[width] duration-200 ease-out'];\n if (this.resolvedCollapsed()) {\n base.push('bg-background');\n }\n if (overlayActive) {\n base.push(\n 'absolute inset-y-0 z-30 border-l border-r border-primary/30 shadow-xl [width:17.5rem]',\n this.position() === 'right' ? 'right-0' : 'left-0',\n );\n } else {\n base.push('w-full');\n }\n return base.join(' ');\n });\n\n protected onHoverEnter(): void {\n if (!this.resolvedCollapsed() || this.isMobile() || this.suppressHoverUntilLeave()) return;\n this.hovered.set(true);\n }\n\n protected onHoverLeave(): void {\n this.suppressHoverUntilLeave.set(false);\n if (this.resolvedCollapsed()) this.hovered.set(false);\n }\n\n protected toggleVariant(event: MouseEvent): void {\n event.stopPropagation();\n const nextCollapsed = !this.resolvedCollapsed();\n this.nav.setCollapsed(nextCollapsed);\n this.hovered.set(false);\n this.suppressHoverUntilLeave.set(nextCollapsed);\n }\n\n /** Touch fallback: tap pada strip docked (ketika belum expanded) untuk expand. */\n protected onHostClick(event: MouseEvent): void {\n if (!this.resolvedCollapsed() || this.isMobile()) return;\n if (this.hovered()) return;\n const target = event.target as HTMLElement | null;\n // Biarkan klik pada control interaktif terus propagate (tidak intercept).\n if (target && target.closest('a,button,[role=\"menuitem\"]')) return;\n this.hovered.set(true);\n }\n\n private openDrawer(): void {\n if (this.drawerRef) return;\n const side = this.position();\n const pos = this.overlay.position().global().top('0');\n if (side === 'right') pos.right('0');\n else pos.left('0');\n\n this.drawerRef = this.overlay.create({\n positionStrategy: pos,\n height: '100vh',\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-dark-backdrop',\n scrollStrategy: this.overlay.scrollStrategies.block(),\n panelClass: ['sidebar-drawer'],\n });\n\n const portal = new TemplatePortal(this.drawerTpl(), this.vcr);\n const viewRef = this.drawerRef.attach(portal);\n viewRef.detectChanges();\n\n const root = this.drawerRef.overlayElement;\n this.focusTrap = this.focusTrapFactory.create(root);\n this.previouslyFocused = this.doc.activeElement as HTMLElement | null;\n queueMicrotask(() => this.focusTrap?.focusInitialElementWhenReady());\n\n this.drawerRef\n .backdropClick()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.nav.closeMobile());\n\n this.drawerRef\n .keydownEvents()\n .pipe(\n filter((e) => e.key === 'Escape'),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe(() => this.nav.closeMobile());\n }\n\n private closeDrawer(): void {\n if (!this.drawerRef) return;\n this.focusTrap?.destroy();\n this.focusTrap = null;\n this.drawerRef.dispose();\n this.drawerRef = null;\n this.previouslyFocused?.focus?.();\n this.previouslyFocused = null;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}