@ojiepermana/angular 22.0.1 → 22.0.27

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 (517) hide show
  1. package/README.md +16 -302
  2. package/fesm2022/ojiepermana-angular-chart.mjs +11 -0
  3. package/fesm2022/ojiepermana-angular-chart.mjs.map +1 -0
  4. package/fesm2022/ojiepermana-angular-component.mjs +11 -0
  5. package/fesm2022/ojiepermana-angular-component.mjs.map +1 -0
  6. package/fesm2022/ojiepermana-angular-navigation.mjs +11 -0
  7. package/fesm2022/ojiepermana-angular-navigation.mjs.map +1 -0
  8. package/fesm2022/ojiepermana-angular-sdk.mjs +11 -0
  9. package/fesm2022/ojiepermana-angular-sdk.mjs.map +1 -0
  10. package/fesm2022/ojiepermana-angular-theme.mjs +3 -382
  11. package/fesm2022/ojiepermana-angular-theme.mjs.map +1 -1
  12. package/fesm2022/ojiepermana-angular.mjs +14 -14
  13. package/fesm2022/ojiepermana-angular.mjs.map +1 -1
  14. package/package.json +25 -425
  15. package/types/ojiepermana-angular-chart.d.ts +1 -0
  16. package/types/ojiepermana-angular-component.d.ts +1 -0
  17. package/types/ojiepermana-angular-navigation.d.ts +1 -0
  18. package/types/ojiepermana-angular-sdk.d.ts +1 -0
  19. package/types/ojiepermana-angular-theme.d.ts +1 -116
  20. package/types/ojiepermana-angular.d.ts +5 -3
  21. package/.npmignore +0 -2
  22. package/collection.json +0 -30
  23. package/component/accordion/README.md +0 -195
  24. package/component/accordion/package.json +0 -4
  25. package/component/alert/README.md +0 -182
  26. package/component/alert/package.json +0 -4
  27. package/component/alert-dialog/README.md +0 -239
  28. package/component/alert-dialog/package.json +0 -4
  29. package/component/aspect-ratio/README.md +0 -112
  30. package/component/aspect-ratio/package.json +0 -4
  31. package/component/avatar/README.md +0 -176
  32. package/component/avatar/package.json +0 -4
  33. package/component/badge/README.md +0 -133
  34. package/component/badge/package.json +0 -4
  35. package/component/breadcrumb/README.md +0 -216
  36. package/component/breadcrumb/package.json +0 -4
  37. package/component/button/README.md +0 -139
  38. package/component/button/package.json +0 -4
  39. package/component/button-group/README.md +0 -208
  40. package/component/button-group/package.json +0 -4
  41. package/component/calendar/README.md +0 -132
  42. package/component/calendar/package.json +0 -4
  43. package/component/card/README.md +0 -220
  44. package/component/card/package.json +0 -4
  45. package/component/carousel/README.md +0 -276
  46. package/component/carousel/package.json +0 -4
  47. package/component/chart/README.md +0 -249
  48. package/component/chart/area/package.json +0 -4
  49. package/component/chart/bar/package.json +0 -4
  50. package/component/chart/line/package.json +0 -4
  51. package/component/chart/package.json +0 -4
  52. package/component/chart/pie/package.json +0 -4
  53. package/component/chart/radar/package.json +0 -4
  54. package/component/chart/radial/package.json +0 -4
  55. package/component/chart/scatter/package.json +0 -4
  56. package/component/checkbox/README.md +0 -149
  57. package/component/checkbox/package.json +0 -4
  58. package/component/collapsible/README.md +0 -195
  59. package/component/collapsible/package.json +0 -4
  60. package/component/combobox/README.md +0 -198
  61. package/component/combobox/package.json +0 -4
  62. package/component/command/README.md +0 -275
  63. package/component/command/package.json +0 -4
  64. package/component/composer/README.md +0 -235
  65. package/component/composer/package.json +0 -4
  66. package/component/context-menu/README.md +0 -267
  67. package/component/context-menu/package.json +0 -4
  68. package/component/date-picker/README.md +0 -177
  69. package/component/date-picker/package.json +0 -4
  70. package/component/dialog/README.md +0 -237
  71. package/component/dialog/package.json +0 -4
  72. package/component/drawer/README.md +0 -145
  73. package/component/drawer/package.json +0 -4
  74. package/component/dropdown-menu/README.md +0 -311
  75. package/component/dropdown-menu/package.json +0 -4
  76. package/component/editor/README.md +0 -136
  77. package/component/editor/package.json +0 -4
  78. package/component/empty/README.md +0 -183
  79. package/component/empty/package.json +0 -4
  80. package/component/form/README.md +0 -210
  81. package/component/form/package.json +0 -4
  82. package/component/hover-card/README.md +0 -146
  83. package/component/hover-card/package.json +0 -4
  84. package/component/input/README.md +0 -159
  85. package/component/input/package.json +0 -4
  86. package/component/input-group/README.md +0 -239
  87. package/component/input-group/package.json +0 -4
  88. package/component/input-otp/README.md +0 -278
  89. package/component/input-otp/package.json +0 -4
  90. package/component/item/README.md +0 -247
  91. package/component/item/package.json +0 -4
  92. package/component/kanban/README.md +0 -81
  93. package/component/kanban/package.json +0 -4
  94. package/component/kbd/README.md +0 -139
  95. package/component/kbd/package.json +0 -4
  96. package/component/label/README.md +0 -136
  97. package/component/label/package.json +0 -4
  98. package/component/menubar/README.md +0 -269
  99. package/component/menubar/package.json +0 -4
  100. package/component/native-select/README.md +0 -176
  101. package/component/native-select/package.json +0 -4
  102. package/component/navigation-menu/README.md +0 -160
  103. package/component/navigation-menu/package.json +0 -4
  104. package/component/pagination/README.md +0 -144
  105. package/component/pagination/package.json +0 -4
  106. package/component/pillbox/README.md +0 -67
  107. package/component/pillbox/package.json +0 -4
  108. package/component/popover/README.md +0 -43
  109. package/component/popover/package.json +0 -4
  110. package/component/progress/README.md +0 -160
  111. package/component/progress/package.json +0 -4
  112. package/component/radio/README.md +0 -209
  113. package/component/radio/package.json +0 -4
  114. package/component/resizable/README.md +0 -168
  115. package/component/resizable/package.json +0 -4
  116. package/component/scroll-area/README.md +0 -143
  117. package/component/scroll-area/package.json +0 -4
  118. package/component/select/README.md +0 -174
  119. package/component/select/package.json +0 -4
  120. package/component/separator/README.md +0 -170
  121. package/component/separator/package.json +0 -4
  122. package/component/sheet/README.md +0 -183
  123. package/component/sheet/package.json +0 -4
  124. package/component/skeleton/README.md +0 -158
  125. package/component/skeleton/package.json +0 -4
  126. package/component/slider/README.md +0 -207
  127. package/component/slider/package.json +0 -4
  128. package/component/spinner/README.md +0 -160
  129. package/component/spinner/package.json +0 -4
  130. package/component/switch/README.md +0 -166
  131. package/component/switch/package.json +0 -4
  132. package/component/table/README.md +0 -291
  133. package/component/table/package.json +0 -4
  134. package/component/tabs/README.md +0 -219
  135. package/component/tabs/package.json +0 -4
  136. package/component/textarea/README.md +0 -154
  137. package/component/textarea/package.json +0 -4
  138. package/component/timeline/README.md +0 -94
  139. package/component/timeline/package.json +0 -4
  140. package/component/toast/README.md +0 -321
  141. package/component/toast/package.json +0 -4
  142. package/component/toggle/README.md +0 -131
  143. package/component/toggle/package.json +0 -4
  144. package/component/toggle-group/README.md +0 -206
  145. package/component/toggle-group/package.json +0 -4
  146. package/component/tooltip/README.md +0 -211
  147. package/component/tooltip/package.json +0 -4
  148. package/component/utils/package.json +0 -4
  149. package/fesm2022/ojiepermana-angular-component-accordion.mjs +0 -189
  150. package/fesm2022/ojiepermana-angular-component-accordion.mjs.map +0 -1
  151. package/fesm2022/ojiepermana-angular-component-alert-dialog.mjs +0 -276
  152. package/fesm2022/ojiepermana-angular-component-alert-dialog.mjs.map +0 -1
  153. package/fesm2022/ojiepermana-angular-component-alert.mjs +0 -99
  154. package/fesm2022/ojiepermana-angular-component-alert.mjs.map +0 -1
  155. package/fesm2022/ojiepermana-angular-component-aspect-ratio.mjs +0 -37
  156. package/fesm2022/ojiepermana-angular-component-aspect-ratio.mjs.map +0 -1
  157. package/fesm2022/ojiepermana-angular-component-avatar.mjs +0 -139
  158. package/fesm2022/ojiepermana-angular-component-avatar.mjs.map +0 -1
  159. package/fesm2022/ojiepermana-angular-component-badge.mjs +0 -50
  160. package/fesm2022/ojiepermana-angular-component-badge.mjs.map +0 -1
  161. package/fesm2022/ojiepermana-angular-component-breadcrumb.mjs +0 -200
  162. package/fesm2022/ojiepermana-angular-component-breadcrumb.mjs.map +0 -1
  163. package/fesm2022/ojiepermana-angular-component-button-group.mjs +0 -103
  164. package/fesm2022/ojiepermana-angular-component-button-group.mjs.map +0 -1
  165. package/fesm2022/ojiepermana-angular-component-button.mjs +0 -68
  166. package/fesm2022/ojiepermana-angular-component-button.mjs.map +0 -1
  167. package/fesm2022/ojiepermana-angular-component-calendar.mjs +0 -88
  168. package/fesm2022/ojiepermana-angular-component-calendar.mjs.map +0 -1
  169. package/fesm2022/ojiepermana-angular-component-card.mjs +0 -152
  170. package/fesm2022/ojiepermana-angular-component-card.mjs.map +0 -1
  171. package/fesm2022/ojiepermana-angular-component-carousel.mjs +0 -334
  172. package/fesm2022/ojiepermana-angular-component-carousel.mjs.map +0 -1
  173. package/fesm2022/ojiepermana-angular-component-chart-area.mjs +0 -6
  174. package/fesm2022/ojiepermana-angular-component-chart-area.mjs.map +0 -1
  175. package/fesm2022/ojiepermana-angular-component-chart-bar.mjs +0 -6
  176. package/fesm2022/ojiepermana-angular-component-chart-bar.mjs.map +0 -1
  177. package/fesm2022/ojiepermana-angular-component-chart-line.mjs +0 -6
  178. package/fesm2022/ojiepermana-angular-component-chart-line.mjs.map +0 -1
  179. package/fesm2022/ojiepermana-angular-component-chart-pie.mjs +0 -6
  180. package/fesm2022/ojiepermana-angular-component-chart-pie.mjs.map +0 -1
  181. package/fesm2022/ojiepermana-angular-component-chart-radar.mjs +0 -6
  182. package/fesm2022/ojiepermana-angular-component-chart-radar.mjs.map +0 -1
  183. package/fesm2022/ojiepermana-angular-component-chart-radial.mjs +0 -6
  184. package/fesm2022/ojiepermana-angular-component-chart-radial.mjs.map +0 -1
  185. package/fesm2022/ojiepermana-angular-component-chart-scatter.mjs +0 -6
  186. package/fesm2022/ojiepermana-angular-component-chart-scatter.mjs.map +0 -1
  187. package/fesm2022/ojiepermana-angular-component-chart.mjs +0 -3925
  188. package/fesm2022/ojiepermana-angular-component-chart.mjs.map +0 -1
  189. package/fesm2022/ojiepermana-angular-component-checkbox.mjs +0 -114
  190. package/fesm2022/ojiepermana-angular-component-checkbox.mjs.map +0 -1
  191. package/fesm2022/ojiepermana-angular-component-collapsible.mjs +0 -124
  192. package/fesm2022/ojiepermana-angular-component-collapsible.mjs.map +0 -1
  193. package/fesm2022/ojiepermana-angular-component-combobox.mjs +0 -272
  194. package/fesm2022/ojiepermana-angular-component-combobox.mjs.map +0 -1
  195. package/fesm2022/ojiepermana-angular-component-command.mjs +0 -293
  196. package/fesm2022/ojiepermana-angular-component-command.mjs.map +0 -1
  197. package/fesm2022/ojiepermana-angular-component-composer.mjs +0 -352
  198. package/fesm2022/ojiepermana-angular-component-composer.mjs.map +0 -1
  199. package/fesm2022/ojiepermana-angular-component-context-menu.mjs +0 -103
  200. package/fesm2022/ojiepermana-angular-component-context-menu.mjs.map +0 -1
  201. package/fesm2022/ojiepermana-angular-component-date-picker.mjs +0 -170
  202. package/fesm2022/ojiepermana-angular-component-date-picker.mjs.map +0 -1
  203. package/fesm2022/ojiepermana-angular-component-dialog.mjs +0 -279
  204. package/fesm2022/ojiepermana-angular-component-dialog.mjs.map +0 -1
  205. package/fesm2022/ojiepermana-angular-component-drawer.mjs +0 -6
  206. package/fesm2022/ojiepermana-angular-component-drawer.mjs.map +0 -1
  207. package/fesm2022/ojiepermana-angular-component-dropdown-menu.mjs +0 -492
  208. package/fesm2022/ojiepermana-angular-component-dropdown-menu.mjs.map +0 -1
  209. package/fesm2022/ojiepermana-angular-component-editor.mjs +0 -717
  210. package/fesm2022/ojiepermana-angular-component-editor.mjs.map +0 -1
  211. package/fesm2022/ojiepermana-angular-component-empty.mjs +0 -145
  212. package/fesm2022/ojiepermana-angular-component-empty.mjs.map +0 -1
  213. package/fesm2022/ojiepermana-angular-component-form.mjs +0 -366
  214. package/fesm2022/ojiepermana-angular-component-form.mjs.map +0 -1
  215. package/fesm2022/ojiepermana-angular-component-hover-card.mjs +0 -297
  216. package/fesm2022/ojiepermana-angular-component-hover-card.mjs.map +0 -1
  217. package/fesm2022/ojiepermana-angular-component-input-group.mjs +0 -179
  218. package/fesm2022/ojiepermana-angular-component-input-group.mjs.map +0 -1
  219. package/fesm2022/ojiepermana-angular-component-input-otp.mjs +0 -514
  220. package/fesm2022/ojiepermana-angular-component-input-otp.mjs.map +0 -1
  221. package/fesm2022/ojiepermana-angular-component-input.mjs +0 -45
  222. package/fesm2022/ojiepermana-angular-component-input.mjs.map +0 -1
  223. package/fesm2022/ojiepermana-angular-component-item.mjs +0 -264
  224. package/fesm2022/ojiepermana-angular-component-item.mjs.map +0 -1
  225. package/fesm2022/ojiepermana-angular-component-kanban.mjs +0 -314
  226. package/fesm2022/ojiepermana-angular-component-kanban.mjs.map +0 -1
  227. package/fesm2022/ojiepermana-angular-component-kbd.mjs +0 -55
  228. package/fesm2022/ojiepermana-angular-component-kbd.mjs.map +0 -1
  229. package/fesm2022/ojiepermana-angular-component-label.mjs +0 -33
  230. package/fesm2022/ojiepermana-angular-component-label.mjs.map +0 -1
  231. package/fesm2022/ojiepermana-angular-component-menubar.mjs +0 -308
  232. package/fesm2022/ojiepermana-angular-component-menubar.mjs.map +0 -1
  233. package/fesm2022/ojiepermana-angular-component-native-select.mjs +0 -67
  234. package/fesm2022/ojiepermana-angular-component-native-select.mjs.map +0 -1
  235. package/fesm2022/ojiepermana-angular-component-navigation-menu.mjs +0 -413
  236. package/fesm2022/ojiepermana-angular-component-navigation-menu.mjs.map +0 -1
  237. package/fesm2022/ojiepermana-angular-component-pagination.mjs +0 -226
  238. package/fesm2022/ojiepermana-angular-component-pagination.mjs.map +0 -1
  239. package/fesm2022/ojiepermana-angular-component-pillbox.mjs +0 -812
  240. package/fesm2022/ojiepermana-angular-component-pillbox.mjs.map +0 -1
  241. package/fesm2022/ojiepermana-angular-component-popover.mjs +0 -169
  242. package/fesm2022/ojiepermana-angular-component-popover.mjs.map +0 -1
  243. package/fesm2022/ojiepermana-angular-component-progress.mjs +0 -60
  244. package/fesm2022/ojiepermana-angular-component-progress.mjs.map +0 -1
  245. package/fesm2022/ojiepermana-angular-component-radio.mjs +0 -122
  246. package/fesm2022/ojiepermana-angular-component-radio.mjs.map +0 -1
  247. package/fesm2022/ojiepermana-angular-component-resizable.mjs +0 -481
  248. package/fesm2022/ojiepermana-angular-component-resizable.mjs.map +0 -1
  249. package/fesm2022/ojiepermana-angular-component-scroll-area.mjs +0 -54
  250. package/fesm2022/ojiepermana-angular-component-scroll-area.mjs.map +0 -1
  251. package/fesm2022/ojiepermana-angular-component-select.mjs +0 -176
  252. package/fesm2022/ojiepermana-angular-component-select.mjs.map +0 -1
  253. package/fesm2022/ojiepermana-angular-component-separator.mjs +0 -37
  254. package/fesm2022/ojiepermana-angular-component-separator.mjs.map +0 -1
  255. package/fesm2022/ojiepermana-angular-component-sheet.mjs +0 -284
  256. package/fesm2022/ojiepermana-angular-component-sheet.mjs.map +0 -1
  257. package/fesm2022/ojiepermana-angular-component-skeleton.mjs +0 -31
  258. package/fesm2022/ojiepermana-angular-component-skeleton.mjs.map +0 -1
  259. package/fesm2022/ojiepermana-angular-component-slider.mjs +0 -423
  260. package/fesm2022/ojiepermana-angular-component-slider.mjs.map +0 -1
  261. package/fesm2022/ojiepermana-angular-component-spinner.mjs +0 -60
  262. package/fesm2022/ojiepermana-angular-component-spinner.mjs.map +0 -1
  263. package/fesm2022/ojiepermana-angular-component-switch.mjs +0 -116
  264. package/fesm2022/ojiepermana-angular-component-switch.mjs.map +0 -1
  265. package/fesm2022/ojiepermana-angular-component-table.mjs +0 -155
  266. package/fesm2022/ojiepermana-angular-component-table.mjs.map +0 -1
  267. package/fesm2022/ojiepermana-angular-component-tabs.mjs +0 -272
  268. package/fesm2022/ojiepermana-angular-component-tabs.mjs.map +0 -1
  269. package/fesm2022/ojiepermana-angular-component-textarea.mjs +0 -39
  270. package/fesm2022/ojiepermana-angular-component-textarea.mjs.map +0 -1
  271. package/fesm2022/ojiepermana-angular-component-timeline.mjs +0 -237
  272. package/fesm2022/ojiepermana-angular-component-timeline.mjs.map +0 -1
  273. package/fesm2022/ojiepermana-angular-component-toast.mjs +0 -71
  274. package/fesm2022/ojiepermana-angular-component-toast.mjs.map +0 -1
  275. package/fesm2022/ojiepermana-angular-component-toggle-group.mjs +0 -289
  276. package/fesm2022/ojiepermana-angular-component-toggle-group.mjs.map +0 -1
  277. package/fesm2022/ojiepermana-angular-component-toggle.mjs +0 -82
  278. package/fesm2022/ojiepermana-angular-component-toggle.mjs.map +0 -1
  279. package/fesm2022/ojiepermana-angular-component-tooltip.mjs +0 -354
  280. package/fesm2022/ojiepermana-angular-component-tooltip.mjs.map +0 -1
  281. package/fesm2022/ojiepermana-angular-component-utils.mjs +0 -13
  282. package/fesm2022/ojiepermana-angular-component-utils.mjs.map +0 -1
  283. package/fesm2022/ojiepermana-angular-generator-api.mjs +0 -68
  284. package/fesm2022/ojiepermana-angular-generator-api.mjs.map +0 -1
  285. package/fesm2022/ojiepermana-angular-layout-component.mjs +0 -602
  286. package/fesm2022/ojiepermana-angular-layout-component.mjs.map +0 -1
  287. package/fesm2022/ojiepermana-angular-layout-provider.mjs +0 -21
  288. package/fesm2022/ojiepermana-angular-layout-provider.mjs.map +0 -1
  289. package/fesm2022/ojiepermana-angular-layout-services.mjs +0 -116
  290. package/fesm2022/ojiepermana-angular-layout-services.mjs.map +0 -1
  291. package/fesm2022/ojiepermana-angular-layout-shell.mjs +0 -48
  292. package/fesm2022/ojiepermana-angular-layout-shell.mjs.map +0 -1
  293. package/fesm2022/ojiepermana-angular-layout-token-directive.mjs +0 -30
  294. package/fesm2022/ojiepermana-angular-layout-token-directive.mjs.map +0 -1
  295. package/fesm2022/ojiepermana-angular-layout-token.mjs +0 -33
  296. package/fesm2022/ojiepermana-angular-layout-token.mjs.map +0 -1
  297. package/fesm2022/ojiepermana-angular-layout-type-empty.mjs +0 -49
  298. package/fesm2022/ojiepermana-angular-layout-type-empty.mjs.map +0 -1
  299. package/fesm2022/ojiepermana-angular-layout-type-horizontal.mjs +0 -128
  300. package/fesm2022/ojiepermana-angular-layout-type-horizontal.mjs.map +0 -1
  301. package/fesm2022/ojiepermana-angular-layout-type-vertical.mjs +0 -123
  302. package/fesm2022/ojiepermana-angular-layout-type-vertical.mjs.map +0 -1
  303. package/fesm2022/ojiepermana-angular-layout.mjs +0 -485
  304. package/fesm2022/ojiepermana-angular-layout.mjs.map +0 -1
  305. package/fesm2022/ojiepermana-angular-navigation-demo-data.mjs +0 -334
  306. package/fesm2022/ojiepermana-angular-navigation-demo-data.mjs.map +0 -1
  307. package/fesm2022/ojiepermana-angular-navigation-icon.mjs +0 -63
  308. package/fesm2022/ojiepermana-angular-navigation-icon.mjs.map +0 -1
  309. package/fesm2022/ojiepermana-angular-navigation-item.mjs +0 -559
  310. package/fesm2022/ojiepermana-angular-navigation-item.mjs.map +0 -1
  311. package/fesm2022/ojiepermana-angular-navigation-service.mjs +0 -213
  312. package/fesm2022/ojiepermana-angular-navigation-service.mjs.map +0 -1
  313. package/fesm2022/ojiepermana-angular-navigation-sidebar.mjs +0 -401
  314. package/fesm2022/ojiepermana-angular-navigation-sidebar.mjs.map +0 -1
  315. package/fesm2022/ojiepermana-angular-navigation-topbar.mjs +0 -670
  316. package/fesm2022/ojiepermana-angular-navigation-topbar.mjs.map +0 -1
  317. package/fesm2022/ojiepermana-angular-navigation-types.mjs +0 -4
  318. package/fesm2022/ojiepermana-angular-navigation-types.mjs.map +0 -1
  319. package/fesm2022/ojiepermana-angular-theme-provider.mjs +0 -35
  320. package/fesm2022/ojiepermana-angular-theme-provider.mjs.map +0 -1
  321. package/fesm2022/ojiepermana-angular-theme-services.mjs +0 -294
  322. package/fesm2022/ojiepermana-angular-theme-services.mjs.map +0 -1
  323. package/fesm2022/ojiepermana-angular-theme-token.mjs +0 -56
  324. package/fesm2022/ojiepermana-angular-theme-token.mjs.map +0 -1
  325. package/generator/api/README.md +0 -252
  326. package/generator/api/bin/package.json +0 -3
  327. package/generator/api/bin/schematics/init/index.js +0 -90
  328. package/generator/api/bin/schematics/ng-add/index.js +0 -131
  329. package/generator/api/bin/schematics/sdk/index.js +0 -76
  330. package/generator/api/bin/src/config/loader.js +0 -41
  331. package/generator/api/bin/src/config/schema.js +0 -57
  332. package/generator/api/bin/src/emit/client.js +0 -248
  333. package/generator/api/bin/src/emit/metadata.js +0 -295
  334. package/generator/api/bin/src/emit/models.js +0 -106
  335. package/generator/api/bin/src/emit/navigation.js +0 -56
  336. package/generator/api/bin/src/emit/operations.js +0 -122
  337. package/generator/api/bin/src/emit/public-api.js +0 -54
  338. package/generator/api/bin/src/emit/services.js +0 -87
  339. package/generator/api/bin/src/engine.js +0 -65
  340. package/generator/api/bin/src/layout/per-domain.js +0 -359
  341. package/generator/api/bin/src/parser/bundle.js +0 -25
  342. package/generator/api/bin/src/parser/ir.js +0 -320
  343. package/generator/api/bin/src/parser/types.js +0 -7
  344. package/generator/api/bin/src/render/template.js +0 -58
  345. package/generator/api/bin/src/writer/index.js +0 -278
  346. package/generator/api/package.json +0 -4
  347. package/generator/api/schematics/init/schema.json +0 -19
  348. package/generator/api/schematics/ng-add/schema.json +0 -14
  349. package/generator/api/schematics/sdk/schema.json +0 -19
  350. package/generator/api/sdk.config.example.json +0 -24
  351. package/generator/guide/README.md +0 -84
  352. package/generator/guide/bin/package.json +0 -3
  353. package/generator/guide/bin/schematics/build/index.js +0 -36
  354. package/generator/guide/bin/schematics/init/index.js +0 -70
  355. package/generator/guide/bin/src/config/loader.js +0 -50
  356. package/generator/guide/bin/src/config/schema.js +0 -12
  357. package/generator/guide/bin/src/engine/component.js +0 -74
  358. package/generator/guide/bin/src/engine/frontmatter.js +0 -42
  359. package/generator/guide/bin/src/engine/index.js +0 -42
  360. package/generator/guide/bin/src/engine/naming.js +0 -39
  361. package/generator/guide/bin/src/engine/render.js +0 -36
  362. package/generator/guide/bin/src/engine/routes.js +0 -106
  363. package/generator/guide/bin/src/engine/walk.js +0 -35
  364. package/generator/guide/guide.config.example.json +0 -9
  365. package/generator/guide/schematics/build/schema.json +0 -14
  366. package/generator/guide/schematics/init/schema.json +0 -19
  367. package/layout/component/package.json +0 -4
  368. package/layout/package.json +0 -4
  369. package/layout/provider/package.json +0 -4
  370. package/layout/services/package.json +0 -4
  371. package/layout/shell/package.json +0 -4
  372. package/layout/token/directive/package.json +0 -4
  373. package/layout/token/package.json +0 -4
  374. package/layout/type/empty/package.json +0 -4
  375. package/layout/type/horizontal/package.json +0 -4
  376. package/layout/type/vertical/package.json +0 -4
  377. package/navigation/demo-data/package.json +0 -4
  378. package/navigation/icon/package.json +0 -4
  379. package/navigation/item/package.json +0 -4
  380. package/navigation/service/package.json +0 -4
  381. package/navigation/sidebar/package.json +0 -4
  382. package/navigation/topbar/README.md +0 -196
  383. package/navigation/topbar/package.json +0 -4
  384. package/navigation/types/package.json +0 -4
  385. package/theme/README.md +0 -174
  386. package/theme/package.json +0 -4
  387. package/theme/provider/package.json +0 -4
  388. package/theme/services/package.json +0 -4
  389. package/theme/styles/foundation/components.css +0 -81
  390. package/theme/styles/foundation/layers.css +0 -15
  391. package/theme/styles/foundation/tokens.css +0 -55
  392. package/theme/styles/index.css +0 -37
  393. package/theme/styles/integrations/material/autocomplete.css +0 -178
  394. package/theme/styles/integrations/material/button.css +0 -468
  395. package/theme/styles/integrations/material/dialog.css +0 -152
  396. package/theme/styles/integrations/material/select.css +0 -175
  397. package/theme/styles/integrations/material/slide-toggle.css +0 -234
  398. package/theme/styles/integrations/material/slider.css +0 -194
  399. package/theme/styles/integrations/material/tabs.css +0 -229
  400. package/theme/styles/integrations/material.css +0 -264
  401. package/theme/styles/integrations/tailwind.css +0 -114
  402. package/theme/styles/variants/color/amber.css +0 -31
  403. package/theme/styles/variants/color/base.css +0 -36
  404. package/theme/styles/variants/color/blue.css +0 -31
  405. package/theme/styles/variants/color/cyan.css +0 -31
  406. package/theme/styles/variants/color/emerald.css +0 -31
  407. package/theme/styles/variants/color/fuchsia.css +0 -31
  408. package/theme/styles/variants/color/green.css +0 -31
  409. package/theme/styles/variants/color/index.css +0 -22
  410. package/theme/styles/variants/color/indigo.css +0 -31
  411. package/theme/styles/variants/color/lime.css +0 -31
  412. package/theme/styles/variants/color/orange.css +0 -31
  413. package/theme/styles/variants/color/pink.css +0 -31
  414. package/theme/styles/variants/color/purple.css +0 -31
  415. package/theme/styles/variants/color/red.css +0 -31
  416. package/theme/styles/variants/color/rose.css +0 -31
  417. package/theme/styles/variants/color/sky.css +0 -31
  418. package/theme/styles/variants/color/teal.css +0 -31
  419. package/theme/styles/variants/color/violet.css +0 -31
  420. package/theme/styles/variants/color/yellow.css +0 -31
  421. package/theme/styles/variants/mode/dark.css +0 -20
  422. package/theme/styles/variants/mode/index.css +0 -6
  423. package/theme/styles/variants/mode/light.css +0 -24
  424. package/theme/styles/variants/style/brutal.css +0 -50
  425. package/theme/styles/variants/style/default.css +0 -54
  426. package/theme/styles/variants/style/index.css +0 -8
  427. package/theme/styles/variants/style/sharp.css +0 -50
  428. package/theme/styles/variants/style/soft.css +0 -50
  429. package/theme/token/package.json +0 -4
  430. package/types/ojiepermana-angular-component-accordion.d.ts +0 -51
  431. package/types/ojiepermana-angular-component-alert-dialog.d.ts +0 -93
  432. package/types/ojiepermana-angular-component-alert.d.ts +0 -37
  433. package/types/ojiepermana-angular-component-aspect-ratio.d.ts +0 -12
  434. package/types/ojiepermana-angular-component-avatar.d.ts +0 -51
  435. package/types/ojiepermana-angular-component-badge.d.ts +0 -19
  436. package/types/ojiepermana-angular-component-breadcrumb.d.ts +0 -46
  437. package/types/ojiepermana-angular-component-button-group.d.ts +0 -26
  438. package/types/ojiepermana-angular-component-button.d.ts +0 -22
  439. package/types/ojiepermana-angular-component-calendar.d.ts +0 -33
  440. package/types/ojiepermana-angular-component-card.d.ts +0 -60
  441. package/types/ojiepermana-angular-component-carousel.d.ts +0 -86
  442. package/types/ojiepermana-angular-component-chart-area.d.ts +0 -1
  443. package/types/ojiepermana-angular-component-chart-bar.d.ts +0 -1
  444. package/types/ojiepermana-angular-component-chart-line.d.ts +0 -1
  445. package/types/ojiepermana-angular-component-chart-pie.d.ts +0 -1
  446. package/types/ojiepermana-angular-component-chart-radar.d.ts +0 -1
  447. package/types/ojiepermana-angular-component-chart-radial.d.ts +0 -1
  448. package/types/ojiepermana-angular-component-chart-scatter.d.ts +0 -1
  449. package/types/ojiepermana-angular-component-chart.d.ts +0 -1094
  450. package/types/ojiepermana-angular-component-checkbox.d.ts +0 -35
  451. package/types/ojiepermana-angular-component-collapsible.d.ts +0 -42
  452. package/types/ojiepermana-angular-component-combobox.d.ts +0 -50
  453. package/types/ojiepermana-angular-component-command.d.ts +0 -99
  454. package/types/ojiepermana-angular-component-composer.d.ts +0 -90
  455. package/types/ojiepermana-angular-component-context-menu.d.ts +0 -35
  456. package/types/ojiepermana-angular-component-date-picker.d.ts +0 -41
  457. package/types/ojiepermana-angular-component-dialog.d.ts +0 -87
  458. package/types/ojiepermana-angular-component-drawer.d.ts +0 -1
  459. package/types/ojiepermana-angular-component-dropdown-menu.d.ts +0 -137
  460. package/types/ojiepermana-angular-component-editor.d.ts +0 -123
  461. package/types/ojiepermana-angular-component-empty.d.ts +0 -50
  462. package/types/ojiepermana-angular-component-form.d.ts +0 -141
  463. package/types/ojiepermana-angular-component-hover-card.d.ts +0 -74
  464. package/types/ojiepermana-angular-component-input-group.d.ts +0 -51
  465. package/types/ojiepermana-angular-component-input-otp.d.ts +0 -136
  466. package/types/ojiepermana-angular-component-input.d.ts +0 -16
  467. package/types/ojiepermana-angular-component-item.d.ts +0 -88
  468. package/types/ojiepermana-angular-component-kanban.d.ts +0 -70
  469. package/types/ojiepermana-angular-component-kbd.d.ts +0 -16
  470. package/types/ojiepermana-angular-component-label.d.ts +0 -11
  471. package/types/ojiepermana-angular-component-menubar.d.ts +0 -67
  472. package/types/ojiepermana-angular-component-native-select.d.ts +0 -26
  473. package/types/ojiepermana-angular-component-navigation-menu.d.ts +0 -96
  474. package/types/ojiepermana-angular-component-pagination.d.ts +0 -33
  475. package/types/ojiepermana-angular-component-pillbox.d.ts +0 -157
  476. package/types/ojiepermana-angular-component-popover.d.ts +0 -43
  477. package/types/ojiepermana-angular-component-progress.d.ts +0 -17
  478. package/types/ojiepermana-angular-component-radio.d.ts +0 -40
  479. package/types/ojiepermana-angular-component-resizable.d.ts +0 -99
  480. package/types/ojiepermana-angular-component-scroll-area.d.ts +0 -19
  481. package/types/ojiepermana-angular-component-select.d.ts +0 -57
  482. package/types/ojiepermana-angular-component-separator.d.ts +0 -14
  483. package/types/ojiepermana-angular-component-sheet.d.ts +0 -76
  484. package/types/ojiepermana-angular-component-skeleton.d.ts +0 -10
  485. package/types/ojiepermana-angular-component-slider.d.ts +0 -74
  486. package/types/ojiepermana-angular-component-spinner.d.ts +0 -13
  487. package/types/ojiepermana-angular-component-switch.d.ts +0 -40
  488. package/types/ojiepermana-angular-component-table.d.ts +0 -52
  489. package/types/ojiepermana-angular-component-tabs.d.ts +0 -92
  490. package/types/ojiepermana-angular-component-textarea.d.ts +0 -12
  491. package/types/ojiepermana-angular-component-timeline.d.ts +0 -63
  492. package/types/ojiepermana-angular-component-toast.d.ts +0 -38
  493. package/types/ojiepermana-angular-component-toggle-group.d.ts +0 -89
  494. package/types/ojiepermana-angular-component-toggle.d.ts +0 -25
  495. package/types/ojiepermana-angular-component-tooltip.d.ts +0 -89
  496. package/types/ojiepermana-angular-component-utils.d.ts +0 -5
  497. package/types/ojiepermana-angular-generator-api.d.ts +0 -86
  498. package/types/ojiepermana-angular-layout-component.d.ts +0 -205
  499. package/types/ojiepermana-angular-layout-provider.d.ts +0 -6
  500. package/types/ojiepermana-angular-layout-services.d.ts +0 -25
  501. package/types/ojiepermana-angular-layout-shell.d.ts +0 -8
  502. package/types/ojiepermana-angular-layout-token-directive.d.ts +0 -13
  503. package/types/ojiepermana-angular-layout-token.d.ts +0 -36
  504. package/types/ojiepermana-angular-layout-type-empty.d.ts +0 -22
  505. package/types/ojiepermana-angular-layout-type-horizontal.d.ts +0 -36
  506. package/types/ojiepermana-angular-layout-type-vertical.d.ts +0 -38
  507. package/types/ojiepermana-angular-layout.d.ts +0 -164
  508. package/types/ojiepermana-angular-navigation-demo-data.d.ts +0 -5
  509. package/types/ojiepermana-angular-navigation-icon.d.ts +0 -17
  510. package/types/ojiepermana-angular-navigation-item.d.ts +0 -54
  511. package/types/ojiepermana-angular-navigation-service.d.ts +0 -77
  512. package/types/ojiepermana-angular-navigation-sidebar.d.ts +0 -75
  513. package/types/ojiepermana-angular-navigation-topbar.d.ts +0 -74
  514. package/types/ojiepermana-angular-navigation-types.d.ts +0 -135
  515. package/types/ojiepermana-angular-theme-provider.d.ts +0 -11
  516. package/types/ojiepermana-angular-theme-services.d.ts +0 -55
  517. package/types/ojiepermana-angular-theme-token.d.ts +0 -57
@@ -1,213 +0,0 @@
1
- import { DOCUMENT } from '@angular/common';
2
- import * as i0 from '@angular/core';
3
- import { inject, DestroyRef, signal, computed, effect, Injectable } from '@angular/core';
4
- import { Router, NavigationEnd } from '@angular/router';
5
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
6
- import { filter } from 'rxjs/operators';
7
-
8
- /** Default registry key used when no id is specified. */
9
- const DEFAULT_NAVIGATION_ID = 'main';
10
- const SIDEBAR_COLLAPSE_STORAGE_KEY = 'sidebar-collapse';
11
- const LEGACY_SIDEBAR_APPEARANCE_STORAGE_KEY = 'sidebar-appearance';
12
- function parseSidebarCollapsed(value) {
13
- if (value === 'true')
14
- return true;
15
- if (value === 'false')
16
- return false;
17
- return null;
18
- }
19
- /**
20
- * Signal-based global state untuk navigation (sidebar/topbar).
21
- *
22
- * Items disimpan dalam registry ber-key. Key default adalah `'main'`.
23
- * Komponen `sidebar` / `topbar` memilih registry via input `navigationId`.
24
- */
25
- class NavigationService {
26
- doc = inject(DOCUMENT);
27
- router = inject(Router);
28
- destroyRef = inject(DestroyRef);
29
- persistedSidebarCollapsed = this.readPersistedSidebarCollapsed();
30
- /** Internal version counter — incremented on every registry mutation. */
31
- _version = signal(0, /* @ts-ignore */
32
- ...(ngDevMode ? [{ debugName: "_version" }] : /* istanbul ignore next */ []));
33
- /** Internal map of registered navigation trees. */
34
- _registry = new Map();
35
- _collapsed = signal(this.persistedSidebarCollapsed ?? false, /* @ts-ignore */
36
- ...(ngDevMode ? [{ debugName: "_collapsed" }] : /* istanbul ignore next */ []));
37
- _hasStoredSidebarCollapse = signal(this.persistedSidebarCollapsed !== null, /* @ts-ignore */
38
- ...(ngDevMode ? [{ debugName: "_hasStoredSidebarCollapse" }] : /* istanbul ignore next */ []));
39
- /**
40
- * Backward-compatible accessor — returns items for the default (`'main'`) key.
41
- * Prefer `getItems(id)` when working with named registries.
42
- */
43
- items = computed(() => this.getItems(DEFAULT_NAVIGATION_ID)(), /* @ts-ignore */
44
- ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
45
- /** Sidebar variant preference (`default` or `docked`). */
46
- sidebarVariant = computed(() => (this._collapsed() ? 'docked' : 'default'), /* @ts-ignore */
47
- ...(ngDevMode ? [{ debugName: "sidebarVariant" }] : /* istanbul ignore next */ []));
48
- hasStoredSidebarCollapse = this._hasStoredSidebarCollapse.asReadonly();
49
- /** Sidebar collapsed (default ↔ docked) toggle untuk desktop. */
50
- collapsed = this._collapsed.asReadonly();
51
- /** Sheet drawer terbuka di mobile. */
52
- mobileOpen = signal(false, /* @ts-ignore */
53
- ...(ngDevMode ? [{ debugName: "mobileOpen" }] : /* istanbul ignore next */ []));
54
- /** Set id grup / collapsable yang sedang terbuka. */
55
- openGroups = signal(new Set(), /* @ts-ignore */
56
- ...(ngDevMode ? [{ debugName: "openGroups" }] : /* istanbul ignore next */ []));
57
- /** URL aktif terakhir. Update otomatis dari Router `NavigationEnd`. */
58
- activeUrl = signal(this.router.url, /* @ts-ignore */
59
- ...(ngDevMode ? [{ debugName: "activeUrl" }] : /* istanbul ignore next */ []));
60
- /** Trail id item yang sedang match dengan URL aktif (across ALL registries). */
61
- activeTrail = computed(() => {
62
- this._version(); // track changes
63
- const url = this.activeUrl();
64
- const trail = new Set();
65
- const walk = (list, ancestors) => {
66
- let matched = false;
67
- for (const item of list) {
68
- const id = item.id;
69
- const link = 'link' in item ? item.link : undefined;
70
- let selfMatch = false;
71
- if (link) {
72
- selfMatch = url === link || url.startsWith(link + '/') || url.startsWith(link + '?');
73
- }
74
- const children = 'children' in item ? (item.children ?? []) : [];
75
- const nextAncestors = id ? [...ancestors, id] : ancestors;
76
- const childMatch = children.length > 0 && walk(children, nextAncestors);
77
- if (selfMatch || childMatch) {
78
- if (id)
79
- trail.add(id);
80
- for (const a of ancestors)
81
- trail.add(a);
82
- matched = true;
83
- }
84
- }
85
- return matched;
86
- };
87
- for (const items of this._registry.values()) {
88
- walk(items, []);
89
- }
90
- return trail;
91
- }, /* @ts-ignore */
92
- ...(ngDevMode ? [{ debugName: "activeTrail" }] : /* istanbul ignore next */ []));
93
- constructor() {
94
- effect(() => {
95
- if (!this._hasStoredSidebarCollapse()) {
96
- return;
97
- }
98
- this.persistSidebarCollapsed(this._collapsed());
99
- });
100
- this.router.events
101
- .pipe(filter((e) => e instanceof NavigationEnd), takeUntilDestroyed(this.destroyRef))
102
- .subscribe((e) => this.activeUrl.set(e.urlAfterRedirects));
103
- }
104
- registerItems(idOrItems, maybeItems) {
105
- const [id, items] = typeof idOrItems === 'string' ? [idOrItems, maybeItems] : [DEFAULT_NAVIGATION_ID, idOrItems];
106
- this._registry.set(id, items);
107
- this._version.update((v) => v + 1);
108
- }
109
- /** Remove a named registry entry. */
110
- removeItems(id) {
111
- this._registry.delete(id);
112
- this._version.update((v) => v + 1);
113
- }
114
- /**
115
- * Computed yang mengembalikan items untuk key tertentu.
116
- * Reactive terhadap perubahan registry.
117
- */
118
- getItems(id) {
119
- return computed(() => {
120
- this._version(); // track changes
121
- return this._registry.get(id) ?? [];
122
- });
123
- }
124
- setSidebarVariant(value) {
125
- this.setCollapsed(value === 'docked');
126
- }
127
- toggleSidebarVariant(currentVariant = this.sidebarVariant()) {
128
- this.setCollapsed(currentVariant !== 'docked');
129
- }
130
- /** Toggle sidebar collapsed (default ↔ docked). */
131
- toggleCollapsed() {
132
- this.setCollapsed(!this._collapsed());
133
- }
134
- setCollapsed(value) {
135
- this._collapsed.set(value);
136
- this._hasStoredSidebarCollapse.set(true);
137
- }
138
- openMobile() {
139
- this.mobileOpen.set(true);
140
- }
141
- closeMobile() {
142
- this.mobileOpen.set(false);
143
- }
144
- toggleMobile() {
145
- this.mobileOpen.update((v) => !v);
146
- }
147
- isGroupOpen(id) {
148
- return this.openGroups().has(id);
149
- }
150
- toggleGroup(id) {
151
- const next = new Set(this.openGroups());
152
- if (next.has(id))
153
- next.delete(id);
154
- else
155
- next.add(id);
156
- this.openGroups.set(next);
157
- }
158
- setGroupOpen(id, open) {
159
- const next = new Set(this.openGroups());
160
- if (open)
161
- next.add(id);
162
- else
163
- next.delete(id);
164
- this.openGroups.set(next);
165
- }
166
- /** Apakah id termasuk dalam active trail saat ini. */
167
- isActive(id) {
168
- return !!id && this.activeTrail().has(id);
169
- }
170
- readPersistedSidebarCollapsed() {
171
- try {
172
- const storage = this.doc.defaultView?.localStorage;
173
- const collapsed = parseSidebarCollapsed(storage?.getItem(SIDEBAR_COLLAPSE_STORAGE_KEY));
174
- if (collapsed !== null) {
175
- return collapsed;
176
- }
177
- const legacyAppearance = storage?.getItem(LEGACY_SIDEBAR_APPEARANCE_STORAGE_KEY);
178
- if (legacyAppearance === 'thin' || legacyAppearance === 'docked') {
179
- return true;
180
- }
181
- if (legacyAppearance === 'default') {
182
- return false;
183
- }
184
- return null;
185
- }
186
- catch {
187
- return null;
188
- }
189
- }
190
- persistSidebarCollapsed(value) {
191
- try {
192
- const storage = this.doc.defaultView?.localStorage;
193
- storage?.setItem(SIDEBAR_COLLAPSE_STORAGE_KEY, String(value));
194
- storage?.removeItem(LEGACY_SIDEBAR_APPEARANCE_STORAGE_KEY);
195
- }
196
- catch {
197
- /* ignore */
198
- }
199
- }
200
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: NavigationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
201
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: NavigationService, providedIn: 'root' });
202
- }
203
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: NavigationService, decorators: [{
204
- type: Injectable,
205
- args: [{ providedIn: 'root' }]
206
- }], ctorParameters: () => [] });
207
-
208
- /**
209
- * Generated bundle index. Do not edit.
210
- */
211
-
212
- export { DEFAULT_NAVIGATION_ID, NavigationService };
213
- //# sourceMappingURL=ojiepermana-angular-navigation-service.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ojiepermana-angular-navigation-service.mjs","sources":["../../../projects/angular/navigation/service/navigation.service.ts","../../../projects/angular/navigation/service/ojiepermana-angular-navigation-service.ts"],"sourcesContent":["import { DOCUMENT } from '@angular/common';\nimport { Injectable, computed, effect, inject, signal } from '@angular/core';\nimport { Router, NavigationEnd } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { filter } from 'rxjs/operators';\nimport { DestroyRef } from '@angular/core';\nimport type { NavigationItem, SidebarVariant } from '@ojiepermana/angular/navigation/types';\n\n/** Default registry key used when no id is specified. */\nexport const DEFAULT_NAVIGATION_ID = 'main';\nconst SIDEBAR_COLLAPSE_STORAGE_KEY = 'sidebar-collapse';\nconst LEGACY_SIDEBAR_APPEARANCE_STORAGE_KEY = 'sidebar-appearance';\n\nfunction parseSidebarCollapsed(value: string | null | undefined): boolean | null {\n if (value === 'true') return true;\n if (value === 'false') return false;\n return null;\n}\n\n/**\n * Signal-based global state untuk navigation (sidebar/topbar).\n *\n * Items disimpan dalam registry ber-key. Key default adalah `'main'`.\n * Komponen `sidebar` / `topbar` memilih registry via input `navigationId`.\n */\n@Injectable({ providedIn: 'root' })\nexport class NavigationService {\n private readonly doc = inject(DOCUMENT);\n private readonly router = inject(Router);\n private readonly destroyRef = inject(DestroyRef);\n private readonly persistedSidebarCollapsed = this.readPersistedSidebarCollapsed();\n\n /** Internal version counter — incremented on every registry mutation. */\n private readonly _version = signal(0);\n\n /** Internal map of registered navigation trees. */\n private readonly _registry = new Map<string, NavigationItem[]>();\n private readonly _collapsed = signal(this.persistedSidebarCollapsed ?? false);\n private readonly _hasStoredSidebarCollapse = signal(this.persistedSidebarCollapsed !== null);\n\n /**\n * Backward-compatible accessor — returns items for the default (`'main'`) key.\n * Prefer `getItems(id)` when working with named registries.\n */\n readonly items = computed(() => this.getItems(DEFAULT_NAVIGATION_ID)());\n\n /** Sidebar variant preference (`default` or `docked`). */\n readonly sidebarVariant = computed<SidebarVariant>(() => (this._collapsed() ? 'docked' : 'default'));\n readonly hasStoredSidebarCollapse = this._hasStoredSidebarCollapse.asReadonly();\n\n /** Sidebar collapsed (default ↔ docked) toggle untuk desktop. */\n readonly collapsed = this._collapsed.asReadonly();\n\n /** Sheet drawer terbuka di mobile. */\n readonly mobileOpen = signal<boolean>(false);\n\n /** Set id grup / collapsable yang sedang terbuka. */\n readonly openGroups = signal<ReadonlySet<string>>(new Set<string>());\n\n /** URL aktif terakhir. Update otomatis dari Router `NavigationEnd`. */\n readonly activeUrl = signal<string>(this.router.url);\n\n /** Trail id item yang sedang match dengan URL aktif (across ALL registries). */\n readonly activeTrail = computed<ReadonlySet<string>>(() => {\n this._version(); // track changes\n const url = this.activeUrl();\n const trail = new Set<string>();\n const walk = (list: readonly NavigationItem[], ancestors: string[]): boolean => {\n let matched = false;\n for (const item of list) {\n const id = item.id;\n const link = 'link' in item ? item.link : undefined;\n let selfMatch = false;\n if (link) {\n selfMatch = url === link || url.startsWith(link + '/') || url.startsWith(link + '?');\n }\n const children = 'children' in item ? (item.children ?? []) : [];\n const nextAncestors = id ? [...ancestors, id] : ancestors;\n const childMatch = children.length > 0 && walk(children, nextAncestors);\n if (selfMatch || childMatch) {\n if (id) trail.add(id);\n for (const a of ancestors) trail.add(a);\n matched = true;\n }\n }\n return matched;\n };\n for (const items of this._registry.values()) {\n walk(items, []);\n }\n return trail;\n });\n\n constructor() {\n effect(() => {\n if (!this._hasStoredSidebarCollapse()) {\n return;\n }\n\n this.persistSidebarCollapsed(this._collapsed());\n });\n\n this.router.events\n .pipe(\n filter((e): e is NavigationEnd => e instanceof NavigationEnd),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe((e) => this.activeUrl.set(e.urlAfterRedirects));\n }\n\n /**\n * Register items di registry.\n *\n * Overload:\n * - `registerItems(items)` → key `'main'`\n * - `registerItems(id, items)` → key spesifik\n */\n registerItems(items: NavigationItem[]): void;\n registerItems(id: string, items: NavigationItem[]): void;\n registerItems(idOrItems: string | NavigationItem[], maybeItems?: NavigationItem[]): void {\n const [id, items] = typeof idOrItems === 'string' ? [idOrItems, maybeItems!] : [DEFAULT_NAVIGATION_ID, idOrItems];\n this._registry.set(id, items);\n this._version.update((v) => v + 1);\n }\n\n /** Remove a named registry entry. */\n removeItems(id: string): void {\n this._registry.delete(id);\n this._version.update((v) => v + 1);\n }\n\n /**\n * Computed yang mengembalikan items untuk key tertentu.\n * Reactive terhadap perubahan registry.\n */\n getItems(id: string): () => readonly NavigationItem[] {\n return computed(() => {\n this._version(); // track changes\n return this._registry.get(id) ?? [];\n });\n }\n\n setSidebarVariant(value: SidebarVariant): void {\n this.setCollapsed(value === 'docked');\n }\n\n toggleSidebarVariant(currentVariant: SidebarVariant = this.sidebarVariant()): void {\n this.setCollapsed(currentVariant !== 'docked');\n }\n\n /** Toggle sidebar collapsed (default ↔ docked). */\n toggleCollapsed(): void {\n this.setCollapsed(!this._collapsed());\n }\n\n setCollapsed(value: boolean): void {\n this._collapsed.set(value);\n this._hasStoredSidebarCollapse.set(true);\n }\n\n openMobile(): void {\n this.mobileOpen.set(true);\n }\n\n closeMobile(): void {\n this.mobileOpen.set(false);\n }\n\n toggleMobile(): void {\n this.mobileOpen.update((v) => !v);\n }\n\n isGroupOpen(id: string): boolean {\n return this.openGroups().has(id);\n }\n\n toggleGroup(id: string): void {\n const next = new Set(this.openGroups());\n if (next.has(id)) next.delete(id);\n else next.add(id);\n this.openGroups.set(next);\n }\n\n setGroupOpen(id: string, open: boolean): void {\n const next = new Set(this.openGroups());\n if (open) next.add(id);\n else next.delete(id);\n this.openGroups.set(next);\n }\n\n /** Apakah id termasuk dalam active trail saat ini. */\n isActive(id: string | undefined): boolean {\n return !!id && this.activeTrail().has(id);\n }\n\n private readPersistedSidebarCollapsed(): boolean | null {\n try {\n const storage = this.doc.defaultView?.localStorage;\n const collapsed = parseSidebarCollapsed(storage?.getItem(SIDEBAR_COLLAPSE_STORAGE_KEY));\n if (collapsed !== null) {\n return collapsed;\n }\n\n const legacyAppearance = storage?.getItem(LEGACY_SIDEBAR_APPEARANCE_STORAGE_KEY);\n if (legacyAppearance === 'thin' || legacyAppearance === 'docked') {\n return true;\n }\n if (legacyAppearance === 'default') {\n return false;\n }\n\n return null;\n } catch {\n return null;\n }\n }\n\n private persistSidebarCollapsed(value: boolean): void {\n try {\n const storage = this.doc.defaultView?.localStorage;\n storage?.setItem(SIDEBAR_COLLAPSE_STORAGE_KEY, String(value));\n storage?.removeItem(LEGACY_SIDEBAR_APPEARANCE_STORAGE_KEY);\n } catch {\n /* ignore */\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;AAQA;AACO,MAAM,qBAAqB,GAAG;AACrC,MAAM,4BAA4B,GAAG,kBAAkB;AACvD,MAAM,qCAAqC,GAAG,oBAAoB;AAElE,SAAS,qBAAqB,CAAC,KAAgC,EAAA;IAC7D,IAAI,KAAK,KAAK,MAAM;AAAE,QAAA,OAAO,IAAI;IACjC,IAAI,KAAK,KAAK,OAAO;AAAE,QAAA,OAAO,KAAK;AACnC,IAAA,OAAO,IAAI;AACb;AAEA;;;;;AAKG;MAEU,iBAAiB,CAAA;AACX,IAAA,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;AACtB,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,yBAAyB,GAAG,IAAI,CAAC,6BAA6B,EAAE;;IAGhE,QAAQ,GAAG,MAAM,CAAC,CAAC;iFAAC;;AAGpB,IAAA,SAAS,GAAG,IAAI,GAAG,EAA4B;AAC/C,IAAA,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,yBAAyB,IAAI,KAAK;mFAAC;AAC5D,IAAA,yBAAyB,GAAG,MAAM,CAAC,IAAI,CAAC,yBAAyB,KAAK,IAAI;kGAAC;AAE5F;;;AAGG;AACM,IAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE;8EAAC;;AAG9D,IAAA,cAAc,GAAG,QAAQ,CAAiB,OAAO,IAAI,CAAC,UAAU,EAAE,GAAG,QAAQ,GAAG,SAAS,CAAC;uFAAC;AAC3F,IAAA,wBAAwB,GAAG,IAAI,CAAC,yBAAyB,CAAC,UAAU,EAAE;;AAGtE,IAAA,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;;IAGxC,UAAU,GAAG,MAAM,CAAU,KAAK;mFAAC;;AAGnC,IAAA,UAAU,GAAG,MAAM,CAAsB,IAAI,GAAG,EAAU;mFAAC;;AAG3D,IAAA,SAAS,GAAG,MAAM,CAAS,IAAI,CAAC,MAAM,CAAC,GAAG;kFAAC;;AAG3C,IAAA,WAAW,GAAG,QAAQ,CAAsB,MAAK;AACxD,QAAA,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE;AAC5B,QAAA,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU;AAC/B,QAAA,MAAM,IAAI,GAAG,CAAC,IAA+B,EAAE,SAAmB,KAAa;YAC7E,IAAI,OAAO,GAAG,KAAK;AACnB,YAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;AACvB,gBAAA,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE;AAClB,gBAAA,MAAM,IAAI,GAAG,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,SAAS;gBACnD,IAAI,SAAS,GAAG,KAAK;gBACrB,IAAI,IAAI,EAAE;oBACR,SAAS,GAAG,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC;gBACtF;AACA,gBAAA,MAAM,QAAQ,GAAG,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,IAAI,EAAE;AAChE,gBAAA,MAAM,aAAa,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS,EAAE,EAAE,CAAC,GAAG,SAAS;AACzD,gBAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC;AACvE,gBAAA,IAAI,SAAS,IAAI,UAAU,EAAE;AAC3B,oBAAA,IAAI,EAAE;AAAE,wBAAA,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;oBACrB,KAAK,MAAM,CAAC,IAAI,SAAS;AAAE,wBAAA,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;oBACvC,OAAO,GAAG,IAAI;gBAChB;YACF;AACA,YAAA,OAAO,OAAO;AAChB,QAAA,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE;AAC3C,YAAA,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;QACjB;AACA,QAAA,OAAO,KAAK;IACd,CAAC;oFAAC;AAEF,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE;gBACrC;YACF;YAEA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;AACjD,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC;AACT,aAAA,IAAI,CACH,MAAM,CAAC,CAAC,CAAC,KAAyB,CAAC,YAAY,aAAa,CAAC,EAC7D,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AAEpC,aAAA,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAC9D;IAWA,aAAa,CAAC,SAAoC,EAAE,UAA6B,EAAA;QAC/E,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,OAAO,SAAS,KAAK,QAAQ,GAAG,CAAC,SAAS,EAAE,UAAW,CAAC,GAAG,CAAC,qBAAqB,EAAE,SAAS,CAAC;QACjH,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC;;AAGA,IAAA,WAAW,CAAC,EAAU,EAAA;AACpB,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC;AAEA;;;AAGG;AACH,IAAA,QAAQ,CAAC,EAAU,EAAA;QACjB,OAAO,QAAQ,CAAC,MAAK;AACnB,YAAA,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE;AACrC,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,iBAAiB,CAAC,KAAqB,EAAA;AACrC,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,KAAK,QAAQ,CAAC;IACvC;AAEA,IAAA,oBAAoB,CAAC,cAAA,GAAiC,IAAI,CAAC,cAAc,EAAE,EAAA;AACzE,QAAA,IAAI,CAAC,YAAY,CAAC,cAAc,KAAK,QAAQ,CAAC;IAChD;;IAGA,eAAe,GAAA;QACb,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;IACvC;AAEA,IAAA,YAAY,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC;IAC1C;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;IAC3B;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;IAC5B;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACnC;AAEA,IAAA,WAAW,CAAC,EAAU,EAAA;QACpB,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IAClC;AAEA,IAAA,WAAW,CAAC,EAAU,EAAA;QACpB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;AACvC,QAAA,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;;AAC5B,YAAA,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;IAC3B;IAEA,YAAY,CAAC,EAAU,EAAE,IAAa,EAAA;QACpC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;AACvC,QAAA,IAAI,IAAI;AAAE,YAAA,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;;AACjB,YAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;IAC3B;;AAGA,IAAA,QAAQ,CAAC,EAAsB,EAAA;AAC7B,QAAA,OAAO,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IAC3C;IAEQ,6BAA6B,GAAA;AACnC,QAAA,IAAI;YACF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,YAAY;YAClD,MAAM,SAAS,GAAG,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,4BAA4B,CAAC,CAAC;AACvF,YAAA,IAAI,SAAS,KAAK,IAAI,EAAE;AACtB,gBAAA,OAAO,SAAS;YAClB;YAEA,MAAM,gBAAgB,GAAG,OAAO,EAAE,OAAO,CAAC,qCAAqC,CAAC;YAChF,IAAI,gBAAgB,KAAK,MAAM,IAAI,gBAAgB,KAAK,QAAQ,EAAE;AAChE,gBAAA,OAAO,IAAI;YACb;AACA,YAAA,IAAI,gBAAgB,KAAK,SAAS,EAAE;AAClC,gBAAA,OAAO,KAAK;YACd;AAEA,YAAA,OAAO,IAAI;QACb;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,IAAI;QACb;IACF;AAEQ,IAAA,uBAAuB,CAAC,KAAc,EAAA;AAC5C,QAAA,IAAI;YACF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,YAAY;YAClD,OAAO,EAAE,OAAO,CAAC,4BAA4B,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AAC7D,YAAA,OAAO,EAAE,UAAU,CAAC,qCAAqC,CAAC;QAC5D;AAAE,QAAA,MAAM;;QAER;IACF;uGAvMW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cADJ,MAAM,EAAA,CAAA;;2FACnB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACzBlC;;AAEG;;;;"}
@@ -1,401 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { inject, ViewContainerRef, DestroyRef, input, computed, signal, viewChild, effect, ChangeDetectionStrategy, Component } from '@angular/core';
3
- import { DOCUMENT, NgTemplateOutlet } from '@angular/common';
4
- import { toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';
5
- import { BreakpointObserver } from '@angular/cdk/layout';
6
- import { Overlay } from '@angular/cdk/overlay';
7
- import { TemplatePortal } from '@angular/cdk/portal';
8
- import { FocusTrapFactory } from '@angular/cdk/a11y';
9
- import { map, filter } from 'rxjs/operators';
10
- import { UiNavIconComponent } from '@ojiepermana/angular/navigation/icon';
11
- import { UiNavItemComponent } from '@ojiepermana/angular/navigation/item';
12
- import { NavigationService, DEFAULT_NAVIGATION_ID } from '@ojiepermana/angular/navigation/service';
13
- import { ScrollAreaComponent } from '@ojiepermana/angular/component/scroll-area';
14
-
15
- /**
16
- * Vertical navigation (sidebar) — shadcn-styled.
17
- *
18
- * Variants:
19
- * - `default`: 17.5rem, label + icon
20
- * - `docked`: 4rem icon-only; hover memunculkan overlay expand (tidak push konten)
21
- *
22
- * Mobile (`< md`): saat `autoMobile=true` (default), host desktop disembunyikan
23
- * dan konten dirender lewat CDK Overlay drawer dengan focus trap. State buka
24
- * dikontrol lewat `NavigationService.mobileOpen`.
25
- */
26
- class SidebarComponent {
27
- nav = inject(NavigationService);
28
- bp = inject(BreakpointObserver);
29
- overlay = inject(Overlay);
30
- vcr = inject(ViewContainerRef);
31
- focusTrapFactory = inject(FocusTrapFactory);
32
- doc = inject(DOCUMENT);
33
- destroyRef = inject(DestroyRef);
34
- items = input([], /* @ts-ignore */
35
- ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
36
- /** Registry key di `NavigationService`. Default `'main'`. */
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 */ []));
41
- /** Desktop border can be owned by the sidebar or by the surrounding layout shell. */
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 */ []));
52
- /** Auto switch ke CDK overlay drawer saat viewport `< md`. */
53
- autoMobile = input(true, /* @ts-ignore */
54
- ...(ngDevMode ? [{ debugName: "autoMobile" }] : /* istanbul ignore next */ []));
55
- /** Auto-register `items` ke `NavigationService` agar `activeTrail` bekerja. */
56
- autoRegister = input(true, /* @ts-ignore */
57
- ...(ngDevMode ? [{ debugName: "autoRegister" }] : /* istanbul ignore next */ []));
58
- /** Resolved items: input jika disediakan, fallback ke registry NavigationService. */
59
- resolvedItems = computed(() => {
60
- const explicit = this.items();
61
- return explicit.length > 0 ? explicit : this.nav.getItems(this.navigationId())();
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 */ []));
68
- drawerTpl = viewChild.required('drawerTpl');
69
- drawerRef = null;
70
- focusTrap = null;
71
- previouslyFocused = null;
72
- /** True saat viewport `< md` (767.98px). */
73
- isMobileMedia = toSignal(this.bp.observe('(max-width: 767.98px)').pipe(map((s) => s.matches)), {
74
- initialValue: false,
75
- });
76
- isMobile = computed(() => this.autoMobile() && this.isMobileMedia(), /* @ts-ignore */
77
- ...(ngDevMode ? [{ debugName: "isMobile" }] : /* istanbul ignore next */ []));
78
- resolvedCollapsed = computed(() => {
79
- if (this.nav.hasStoredSidebarCollapse()) {
80
- return this.nav.collapsed();
81
- }
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 */ []));
97
- constructor() {
98
- // Auto-register items ke service untuk active trail (hanya jika input non-kosong).
99
- effect(() => {
100
- const explicit = this.items();
101
- if (this.autoRegister() && explicit.length > 0)
102
- this.nav.registerItems(this.navigationId(), explicit);
103
- });
104
- // Kelola overlay drawer berdasarkan mobileOpen + isMobile.
105
- effect(() => {
106
- const open = this.nav.mobileOpen();
107
- const mobile = this.isMobile();
108
- if (mobile && open)
109
- this.openDrawer();
110
- else
111
- this.closeDrawer();
112
- });
113
- this.destroyRef.onDestroy(() => this.closeDrawer());
114
- }
115
- hostClasses = computed(() => {
116
- const base = ['relative flex shrink-0 text-foreground', 'transition-[width] duration-200 ease-out'];
117
- if (this.resolvedCollapsed())
118
- base.push('w-16');
119
- else
120
- base.push('[width:17.5rem]');
121
- if (this.borderSource() === 'component') {
122
- if (this.position() === 'right')
123
- base.push('border-l', 'border-primary/30');
124
- else
125
- base.push('border-r', 'border-primary/30');
126
- }
127
- return [...base, this.class()].join(' ');
128
- }, /* @ts-ignore */
129
- ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
130
- headerClasses = computed(() => {
131
- const base = ['flex items-center gap-1 border-b border-primary/30'];
132
- if (this.isCompact()) {
133
- base.push('h-12', 'justify-center', 'px-2');
134
- }
135
- else {
136
- base.push('h-12', 'pr-2');
137
- }
138
- return base.join(' ');
139
- }, /* @ts-ignore */
140
- ...(ngDevMode ? [{ debugName: "headerClasses" }] : /* istanbul ignore next */ []));
141
- headerSlotClasses = computed(() => {
142
- const base = ['min-w-0'];
143
- if (this.isCompact()) {
144
- base.push('flex flex-1 items-center justify-center overflow-hidden', '[&>[sidebar-header]>*]:mx-auto', '[&>[sidebar-header]>*]:w-auto', '[&>[sidebar-header]>*]:max-w-full', '[&>[sidebar-header]>*]:justify-center', '[&>[sidebar-header]>*]:gap-0', '[&>[sidebar-header]>*]:px-0', '[&>[sidebar-header]>*]:shrink-0', '[&>[sidebar-header]>*>*:first-child]:mx-auto', '[&>[sidebar-header]>*>*:nth-child(n+2)]:hidden');
145
- }
146
- else {
147
- base.push('flex min-w-0 flex-1 items-center');
148
- }
149
- return base.join(' ');
150
- }, /* @ts-ignore */
151
- ...(ngDevMode ? [{ debugName: "headerSlotClasses" }] : /* istanbul ignore next */ []));
152
- navClasses = computed(() => {
153
- const base = ['min-h-full'];
154
- if (this.isCompact()) {
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');
156
- }
157
- return base.join(' ');
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 */ []));
162
- footerClasses = computed(() => {
163
- const base = ['h-12 border-t border-primary/30'];
164
- if (this.isCompact()) {
165
- base.push('flex items-center justify-center px-2');
166
- }
167
- return base.join(' ');
168
- }, /* @ts-ignore */
169
- ...(ngDevMode ? [{ debugName: "footerClasses" }] : /* istanbul ignore next */ []));
170
- footerSlotClasses = computed(() => {
171
- const base = ['h-full'];
172
- if (this.isCompact()) {
173
- base.push('flex h-full items-center justify-center overflow-hidden', '[&>[sidebar-footer]>*]:mx-auto', '[&>[sidebar-footer]>*]:w-auto', '[&>[sidebar-footer]>*]:max-w-full', '[&>[sidebar-footer]>*]:justify-center', '[&>[sidebar-footer]>*]:gap-0', '[&>[sidebar-footer]>*]:px-0', '[&>[sidebar-footer]>*>*:first-child]:mx-auto', '[&>[sidebar-footer]>*>*:nth-child(n+2)]:hidden');
174
- }
175
- else {
176
- base.push('w-full');
177
- }
178
- return base.join(' ');
179
- }, /* @ts-ignore */
180
- ...(ngDevMode ? [{ debugName: "footerSlotClasses" }] : /* istanbul ignore next */ []));
181
- innerClasses = computed(() => {
182
- const overlayActive = this.resolvedCollapsed() && this.hoverActive();
183
- const base = ['flex h-full flex-col transition-[width] duration-200 ease-out'];
184
- if (this.resolvedCollapsed()) {
185
- base.push('bg-background');
186
- }
187
- if (overlayActive) {
188
- base.push('absolute inset-y-0 z-30 border-l border-r border-primary/30 shadow-xl [width:17.5rem]', this.position() === 'right' ? 'right-0' : 'left-0');
189
- }
190
- else {
191
- base.push('w-full');
192
- }
193
- return base.join(' ');
194
- }, /* @ts-ignore */
195
- ...(ngDevMode ? [{ debugName: "innerClasses" }] : /* istanbul ignore next */ []));
196
- onHoverEnter() {
197
- if (!this.resolvedCollapsed() || this.isMobile() || this.suppressHoverUntilLeave())
198
- return;
199
- this.hovered.set(true);
200
- }
201
- onHoverLeave() {
202
- this.suppressHoverUntilLeave.set(false);
203
- if (this.resolvedCollapsed())
204
- this.hovered.set(false);
205
- }
206
- toggleVariant(event) {
207
- event.stopPropagation();
208
- const nextCollapsed = !this.resolvedCollapsed();
209
- this.nav.setCollapsed(nextCollapsed);
210
- this.hovered.set(false);
211
- this.suppressHoverUntilLeave.set(nextCollapsed);
212
- }
213
- /** Touch fallback: tap pada strip docked (ketika belum expanded) untuk expand. */
214
- onHostClick(event) {
215
- if (!this.resolvedCollapsed() || this.isMobile())
216
- return;
217
- if (this.hovered())
218
- return;
219
- const target = event.target;
220
- // Biarkan klik pada control interaktif terus propagate (tidak intercept).
221
- if (target && target.closest('a,button,[role="menuitem"]'))
222
- return;
223
- this.hovered.set(true);
224
- }
225
- openDrawer() {
226
- if (this.drawerRef)
227
- return;
228
- const side = this.position();
229
- const pos = this.overlay.position().global().top('0');
230
- if (side === 'right')
231
- pos.right('0');
232
- else
233
- pos.left('0');
234
- this.drawerRef = this.overlay.create({
235
- positionStrategy: pos,
236
- height: '100vh',
237
- hasBackdrop: true,
238
- backdropClass: 'cdk-overlay-dark-backdrop',
239
- scrollStrategy: this.overlay.scrollStrategies.block(),
240
- panelClass: ['sidebar-drawer'],
241
- });
242
- const portal = new TemplatePortal(this.drawerTpl(), this.vcr);
243
- const viewRef = this.drawerRef.attach(portal);
244
- viewRef.detectChanges();
245
- const root = this.drawerRef.overlayElement;
246
- this.focusTrap = this.focusTrapFactory.create(root);
247
- this.previouslyFocused = this.doc.activeElement;
248
- queueMicrotask(() => this.focusTrap?.focusInitialElementWhenReady());
249
- this.drawerRef
250
- .backdropClick()
251
- .pipe(takeUntilDestroyed(this.destroyRef))
252
- .subscribe(() => this.nav.closeMobile());
253
- this.drawerRef
254
- .keydownEvents()
255
- .pipe(filter((e) => e.key === 'Escape'), takeUntilDestroyed(this.destroyRef))
256
- .subscribe(() => this.nav.closeMobile());
257
- }
258
- closeDrawer() {
259
- if (!this.drawerRef)
260
- return;
261
- this.focusTrap?.destroy();
262
- this.focusTrap = null;
263
- this.drawerRef.dispose();
264
- this.drawerRef = null;
265
- this.previouslyFocused?.focus?.();
266
- this.previouslyFocused = null;
267
- }
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: `
270
- <div [class]="innerClasses()">
271
- <ng-container [ngTemplateOutlet]="body" />
272
- </div>
273
-
274
- <ng-template #body>
275
- @if (header()) {
276
- <div [class]="headerClasses()">
277
- <div [class]="headerSlotClasses()">
278
- <ng-content select="[sidebar-header]" />
279
- </div>
280
- @if (!isMobile() && !isCompact()) {
281
- <button
282
- type="button"
283
- data-sidebar-toggle
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"
285
- [attr.aria-label]="toggleButtonLabel()"
286
- [attr.title]="toggleButtonLabel()"
287
- [attr.aria-pressed]="resolvedVariant() === 'docked'"
288
- (click)="toggleVariant($event)">
289
- <ui-nav-icon name="view_sidebar" [size]="18" class="text-current" />
290
- </button>
291
- }
292
- </div>
293
- }
294
- <ui-scroll-area class="min-h-0 flex-1" [viewportClass]="scrollViewportClasses()">
295
- <nav [class]="navClasses()">
296
- @for (item of resolvedItems(); track item.id) {
297
- <ui-nav-item [item]="item" [compact]="isCompact()" />
298
- }
299
- </nav>
300
- </ui-scroll-area>
301
- <div [class]="footerClasses()">
302
- <div [class]="footerSlotClasses()">
303
- <ng-content select="[sidebar-footer]" />
304
- </div>
305
- </div>
306
- </ng-template>
307
-
308
- <ng-template #drawerTpl>
309
- <div
310
- role="dialog"
311
- aria-modal="true"
312
- [attr.aria-label]="ariaLabel()"
313
- class="flex h-full w-72 max-w-[85vw] flex-col border-primary/30 text-foreground shadow-xl"
314
- [class.border-r]="position() === 'left'"
315
- [class.border-l]="position() === 'right'"
316
- [class.border-primary/30]="position() === 'left' || position() === 'right'">
317
- <ng-container [ngTemplateOutlet]="body" />
318
- </div>
319
- </ng-template>
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 });
321
- }
322
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: SidebarComponent, decorators: [{
323
- type: Component,
324
- args: [{
325
- selector: 'sidebar',
326
- changeDetection: ChangeDetectionStrategy.OnPush,
327
- imports: [NgTemplateOutlet, ScrollAreaComponent, UiNavIconComponent, UiNavItemComponent],
328
- host: {
329
- role: 'navigation',
330
- '[attr.aria-label]': 'ariaLabel()',
331
- '[class]': 'hostClasses()',
332
- '[attr.data-variant]': 'resolvedVariant()',
333
- '[attr.data-position]': 'position()',
334
- '[attr.data-expanded]': 'isExpanded()',
335
- '[hidden]': 'isMobile()',
336
- '(mouseenter)': 'onHoverEnter()',
337
- '(mouseleave)': 'onHoverLeave()',
338
- '(focusin)': 'onHoverEnter()',
339
- '(click)': 'onHostClick($event)',
340
- },
341
- template: `
342
- <div [class]="innerClasses()">
343
- <ng-container [ngTemplateOutlet]="body" />
344
- </div>
345
-
346
- <ng-template #body>
347
- @if (header()) {
348
- <div [class]="headerClasses()">
349
- <div [class]="headerSlotClasses()">
350
- <ng-content select="[sidebar-header]" />
351
- </div>
352
- @if (!isMobile() && !isCompact()) {
353
- <button
354
- type="button"
355
- data-sidebar-toggle
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"
357
- [attr.aria-label]="toggleButtonLabel()"
358
- [attr.title]="toggleButtonLabel()"
359
- [attr.aria-pressed]="resolvedVariant() === 'docked'"
360
- (click)="toggleVariant($event)">
361
- <ui-nav-icon name="view_sidebar" [size]="18" class="text-current" />
362
- </button>
363
- }
364
- </div>
365
- }
366
- <ui-scroll-area class="min-h-0 flex-1" [viewportClass]="scrollViewportClasses()">
367
- <nav [class]="navClasses()">
368
- @for (item of resolvedItems(); track item.id) {
369
- <ui-nav-item [item]="item" [compact]="isCompact()" />
370
- }
371
- </nav>
372
- </ui-scroll-area>
373
- <div [class]="footerClasses()">
374
- <div [class]="footerSlotClasses()">
375
- <ng-content select="[sidebar-footer]" />
376
- </div>
377
- </div>
378
- </ng-template>
379
-
380
- <ng-template #drawerTpl>
381
- <div
382
- role="dialog"
383
- aria-modal="true"
384
- [attr.aria-label]="ariaLabel()"
385
- class="flex h-full w-72 max-w-[85vw] flex-col border-primary/30 text-foreground shadow-xl"
386
- [class.border-r]="position() === 'left'"
387
- [class.border-l]="position() === 'right'"
388
- [class.border-primary/30]="position() === 'left' || position() === 'right'">
389
- <ng-container [ngTemplateOutlet]="body" />
390
- </div>
391
- </ng-template>
392
- `,
393
- }]
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 }] }] } });
395
-
396
- /**
397
- * Generated bundle index. Do not edit.
398
- */
399
-
400
- export { SidebarComponent };
401
- //# sourceMappingURL=ojiepermana-angular-navigation-sidebar.mjs.map