@ojiepermana/angular 22.0.1 → 22.0.29

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 (513) hide show
  1. package/README.md +61 -311
  2. package/fesm2022/ojiepermana-angular-chart.mjs +10 -0
  3. package/fesm2022/ojiepermana-angular-component.mjs +10 -0
  4. package/fesm2022/ojiepermana-angular-navigation.mjs +10 -0
  5. package/fesm2022/ojiepermana-angular-sdk.mjs +10 -0
  6. package/fesm2022/ojiepermana-angular-theme.mjs +4 -384
  7. package/fesm2022/ojiepermana-angular.mjs +15 -16
  8. package/package.json +25 -425
  9. package/types/ojiepermana-angular-chart.d.ts +1 -0
  10. package/types/ojiepermana-angular-component.d.ts +1 -0
  11. package/types/ojiepermana-angular-navigation.d.ts +1 -0
  12. package/types/ojiepermana-angular-sdk.d.ts +1 -0
  13. package/types/ojiepermana-angular-theme.d.ts +1 -116
  14. package/types/ojiepermana-angular.d.ts +5 -3
  15. package/.npmignore +0 -2
  16. package/collection.json +0 -30
  17. package/component/accordion/README.md +0 -195
  18. package/component/accordion/package.json +0 -4
  19. package/component/alert/README.md +0 -182
  20. package/component/alert/package.json +0 -4
  21. package/component/alert-dialog/README.md +0 -239
  22. package/component/alert-dialog/package.json +0 -4
  23. package/component/aspect-ratio/README.md +0 -112
  24. package/component/aspect-ratio/package.json +0 -4
  25. package/component/avatar/README.md +0 -176
  26. package/component/avatar/package.json +0 -4
  27. package/component/badge/README.md +0 -133
  28. package/component/badge/package.json +0 -4
  29. package/component/breadcrumb/README.md +0 -216
  30. package/component/breadcrumb/package.json +0 -4
  31. package/component/button/README.md +0 -139
  32. package/component/button/package.json +0 -4
  33. package/component/button-group/README.md +0 -208
  34. package/component/button-group/package.json +0 -4
  35. package/component/calendar/README.md +0 -132
  36. package/component/calendar/package.json +0 -4
  37. package/component/card/README.md +0 -220
  38. package/component/card/package.json +0 -4
  39. package/component/carousel/README.md +0 -276
  40. package/component/carousel/package.json +0 -4
  41. package/component/chart/README.md +0 -249
  42. package/component/chart/area/package.json +0 -4
  43. package/component/chart/bar/package.json +0 -4
  44. package/component/chart/line/package.json +0 -4
  45. package/component/chart/package.json +0 -4
  46. package/component/chart/pie/package.json +0 -4
  47. package/component/chart/radar/package.json +0 -4
  48. package/component/chart/radial/package.json +0 -4
  49. package/component/chart/scatter/package.json +0 -4
  50. package/component/checkbox/README.md +0 -149
  51. package/component/checkbox/package.json +0 -4
  52. package/component/collapsible/README.md +0 -195
  53. package/component/collapsible/package.json +0 -4
  54. package/component/combobox/README.md +0 -198
  55. package/component/combobox/package.json +0 -4
  56. package/component/command/README.md +0 -275
  57. package/component/command/package.json +0 -4
  58. package/component/composer/README.md +0 -235
  59. package/component/composer/package.json +0 -4
  60. package/component/context-menu/README.md +0 -267
  61. package/component/context-menu/package.json +0 -4
  62. package/component/date-picker/README.md +0 -177
  63. package/component/date-picker/package.json +0 -4
  64. package/component/dialog/README.md +0 -237
  65. package/component/dialog/package.json +0 -4
  66. package/component/drawer/README.md +0 -145
  67. package/component/drawer/package.json +0 -4
  68. package/component/dropdown-menu/README.md +0 -311
  69. package/component/dropdown-menu/package.json +0 -4
  70. package/component/editor/README.md +0 -136
  71. package/component/editor/package.json +0 -4
  72. package/component/empty/README.md +0 -183
  73. package/component/empty/package.json +0 -4
  74. package/component/form/README.md +0 -210
  75. package/component/form/package.json +0 -4
  76. package/component/hover-card/README.md +0 -146
  77. package/component/hover-card/package.json +0 -4
  78. package/component/input/README.md +0 -159
  79. package/component/input/package.json +0 -4
  80. package/component/input-group/README.md +0 -239
  81. package/component/input-group/package.json +0 -4
  82. package/component/input-otp/README.md +0 -278
  83. package/component/input-otp/package.json +0 -4
  84. package/component/item/README.md +0 -247
  85. package/component/item/package.json +0 -4
  86. package/component/kanban/README.md +0 -81
  87. package/component/kanban/package.json +0 -4
  88. package/component/kbd/README.md +0 -139
  89. package/component/kbd/package.json +0 -4
  90. package/component/label/README.md +0 -136
  91. package/component/label/package.json +0 -4
  92. package/component/menubar/README.md +0 -269
  93. package/component/menubar/package.json +0 -4
  94. package/component/native-select/README.md +0 -176
  95. package/component/native-select/package.json +0 -4
  96. package/component/navigation-menu/README.md +0 -160
  97. package/component/navigation-menu/package.json +0 -4
  98. package/component/pagination/README.md +0 -144
  99. package/component/pagination/package.json +0 -4
  100. package/component/pillbox/README.md +0 -67
  101. package/component/pillbox/package.json +0 -4
  102. package/component/popover/README.md +0 -43
  103. package/component/popover/package.json +0 -4
  104. package/component/progress/README.md +0 -160
  105. package/component/progress/package.json +0 -4
  106. package/component/radio/README.md +0 -209
  107. package/component/radio/package.json +0 -4
  108. package/component/resizable/README.md +0 -168
  109. package/component/resizable/package.json +0 -4
  110. package/component/scroll-area/README.md +0 -143
  111. package/component/scroll-area/package.json +0 -4
  112. package/component/select/README.md +0 -174
  113. package/component/select/package.json +0 -4
  114. package/component/separator/README.md +0 -170
  115. package/component/separator/package.json +0 -4
  116. package/component/sheet/README.md +0 -183
  117. package/component/sheet/package.json +0 -4
  118. package/component/skeleton/README.md +0 -158
  119. package/component/skeleton/package.json +0 -4
  120. package/component/slider/README.md +0 -207
  121. package/component/slider/package.json +0 -4
  122. package/component/spinner/README.md +0 -160
  123. package/component/spinner/package.json +0 -4
  124. package/component/switch/README.md +0 -166
  125. package/component/switch/package.json +0 -4
  126. package/component/table/README.md +0 -291
  127. package/component/table/package.json +0 -4
  128. package/component/tabs/README.md +0 -219
  129. package/component/tabs/package.json +0 -4
  130. package/component/textarea/README.md +0 -154
  131. package/component/textarea/package.json +0 -4
  132. package/component/timeline/README.md +0 -94
  133. package/component/timeline/package.json +0 -4
  134. package/component/toast/README.md +0 -321
  135. package/component/toast/package.json +0 -4
  136. package/component/toggle/README.md +0 -131
  137. package/component/toggle/package.json +0 -4
  138. package/component/toggle-group/README.md +0 -206
  139. package/component/toggle-group/package.json +0 -4
  140. package/component/tooltip/README.md +0 -211
  141. package/component/tooltip/package.json +0 -4
  142. package/component/utils/package.json +0 -4
  143. package/fesm2022/ojiepermana-angular-component-accordion.mjs +0 -189
  144. package/fesm2022/ojiepermana-angular-component-accordion.mjs.map +0 -1
  145. package/fesm2022/ojiepermana-angular-component-alert-dialog.mjs +0 -276
  146. package/fesm2022/ojiepermana-angular-component-alert-dialog.mjs.map +0 -1
  147. package/fesm2022/ojiepermana-angular-component-alert.mjs +0 -99
  148. package/fesm2022/ojiepermana-angular-component-alert.mjs.map +0 -1
  149. package/fesm2022/ojiepermana-angular-component-aspect-ratio.mjs +0 -37
  150. package/fesm2022/ojiepermana-angular-component-aspect-ratio.mjs.map +0 -1
  151. package/fesm2022/ojiepermana-angular-component-avatar.mjs +0 -139
  152. package/fesm2022/ojiepermana-angular-component-avatar.mjs.map +0 -1
  153. package/fesm2022/ojiepermana-angular-component-badge.mjs +0 -50
  154. package/fesm2022/ojiepermana-angular-component-badge.mjs.map +0 -1
  155. package/fesm2022/ojiepermana-angular-component-breadcrumb.mjs +0 -200
  156. package/fesm2022/ojiepermana-angular-component-breadcrumb.mjs.map +0 -1
  157. package/fesm2022/ojiepermana-angular-component-button-group.mjs +0 -103
  158. package/fesm2022/ojiepermana-angular-component-button-group.mjs.map +0 -1
  159. package/fesm2022/ojiepermana-angular-component-button.mjs +0 -68
  160. package/fesm2022/ojiepermana-angular-component-button.mjs.map +0 -1
  161. package/fesm2022/ojiepermana-angular-component-calendar.mjs +0 -88
  162. package/fesm2022/ojiepermana-angular-component-calendar.mjs.map +0 -1
  163. package/fesm2022/ojiepermana-angular-component-card.mjs +0 -152
  164. package/fesm2022/ojiepermana-angular-component-card.mjs.map +0 -1
  165. package/fesm2022/ojiepermana-angular-component-carousel.mjs +0 -334
  166. package/fesm2022/ojiepermana-angular-component-carousel.mjs.map +0 -1
  167. package/fesm2022/ojiepermana-angular-component-chart-area.mjs +0 -6
  168. package/fesm2022/ojiepermana-angular-component-chart-area.mjs.map +0 -1
  169. package/fesm2022/ojiepermana-angular-component-chart-bar.mjs +0 -6
  170. package/fesm2022/ojiepermana-angular-component-chart-bar.mjs.map +0 -1
  171. package/fesm2022/ojiepermana-angular-component-chart-line.mjs +0 -6
  172. package/fesm2022/ojiepermana-angular-component-chart-line.mjs.map +0 -1
  173. package/fesm2022/ojiepermana-angular-component-chart-pie.mjs +0 -6
  174. package/fesm2022/ojiepermana-angular-component-chart-pie.mjs.map +0 -1
  175. package/fesm2022/ojiepermana-angular-component-chart-radar.mjs +0 -6
  176. package/fesm2022/ojiepermana-angular-component-chart-radar.mjs.map +0 -1
  177. package/fesm2022/ojiepermana-angular-component-chart-radial.mjs +0 -6
  178. package/fesm2022/ojiepermana-angular-component-chart-radial.mjs.map +0 -1
  179. package/fesm2022/ojiepermana-angular-component-chart-scatter.mjs +0 -6
  180. package/fesm2022/ojiepermana-angular-component-chart-scatter.mjs.map +0 -1
  181. package/fesm2022/ojiepermana-angular-component-chart.mjs +0 -3925
  182. package/fesm2022/ojiepermana-angular-component-chart.mjs.map +0 -1
  183. package/fesm2022/ojiepermana-angular-component-checkbox.mjs +0 -114
  184. package/fesm2022/ojiepermana-angular-component-checkbox.mjs.map +0 -1
  185. package/fesm2022/ojiepermana-angular-component-collapsible.mjs +0 -124
  186. package/fesm2022/ojiepermana-angular-component-collapsible.mjs.map +0 -1
  187. package/fesm2022/ojiepermana-angular-component-combobox.mjs +0 -272
  188. package/fesm2022/ojiepermana-angular-component-combobox.mjs.map +0 -1
  189. package/fesm2022/ojiepermana-angular-component-command.mjs +0 -293
  190. package/fesm2022/ojiepermana-angular-component-command.mjs.map +0 -1
  191. package/fesm2022/ojiepermana-angular-component-composer.mjs +0 -352
  192. package/fesm2022/ojiepermana-angular-component-composer.mjs.map +0 -1
  193. package/fesm2022/ojiepermana-angular-component-context-menu.mjs +0 -103
  194. package/fesm2022/ojiepermana-angular-component-context-menu.mjs.map +0 -1
  195. package/fesm2022/ojiepermana-angular-component-date-picker.mjs +0 -170
  196. package/fesm2022/ojiepermana-angular-component-date-picker.mjs.map +0 -1
  197. package/fesm2022/ojiepermana-angular-component-dialog.mjs +0 -279
  198. package/fesm2022/ojiepermana-angular-component-dialog.mjs.map +0 -1
  199. package/fesm2022/ojiepermana-angular-component-drawer.mjs +0 -6
  200. package/fesm2022/ojiepermana-angular-component-drawer.mjs.map +0 -1
  201. package/fesm2022/ojiepermana-angular-component-dropdown-menu.mjs +0 -492
  202. package/fesm2022/ojiepermana-angular-component-dropdown-menu.mjs.map +0 -1
  203. package/fesm2022/ojiepermana-angular-component-editor.mjs +0 -717
  204. package/fesm2022/ojiepermana-angular-component-editor.mjs.map +0 -1
  205. package/fesm2022/ojiepermana-angular-component-empty.mjs +0 -145
  206. package/fesm2022/ojiepermana-angular-component-empty.mjs.map +0 -1
  207. package/fesm2022/ojiepermana-angular-component-form.mjs +0 -366
  208. package/fesm2022/ojiepermana-angular-component-form.mjs.map +0 -1
  209. package/fesm2022/ojiepermana-angular-component-hover-card.mjs +0 -297
  210. package/fesm2022/ojiepermana-angular-component-hover-card.mjs.map +0 -1
  211. package/fesm2022/ojiepermana-angular-component-input-group.mjs +0 -179
  212. package/fesm2022/ojiepermana-angular-component-input-group.mjs.map +0 -1
  213. package/fesm2022/ojiepermana-angular-component-input-otp.mjs +0 -514
  214. package/fesm2022/ojiepermana-angular-component-input-otp.mjs.map +0 -1
  215. package/fesm2022/ojiepermana-angular-component-input.mjs +0 -45
  216. package/fesm2022/ojiepermana-angular-component-input.mjs.map +0 -1
  217. package/fesm2022/ojiepermana-angular-component-item.mjs +0 -264
  218. package/fesm2022/ojiepermana-angular-component-item.mjs.map +0 -1
  219. package/fesm2022/ojiepermana-angular-component-kanban.mjs +0 -314
  220. package/fesm2022/ojiepermana-angular-component-kanban.mjs.map +0 -1
  221. package/fesm2022/ojiepermana-angular-component-kbd.mjs +0 -55
  222. package/fesm2022/ojiepermana-angular-component-kbd.mjs.map +0 -1
  223. package/fesm2022/ojiepermana-angular-component-label.mjs +0 -33
  224. package/fesm2022/ojiepermana-angular-component-label.mjs.map +0 -1
  225. package/fesm2022/ojiepermana-angular-component-menubar.mjs +0 -308
  226. package/fesm2022/ojiepermana-angular-component-menubar.mjs.map +0 -1
  227. package/fesm2022/ojiepermana-angular-component-native-select.mjs +0 -67
  228. package/fesm2022/ojiepermana-angular-component-native-select.mjs.map +0 -1
  229. package/fesm2022/ojiepermana-angular-component-navigation-menu.mjs +0 -413
  230. package/fesm2022/ojiepermana-angular-component-navigation-menu.mjs.map +0 -1
  231. package/fesm2022/ojiepermana-angular-component-pagination.mjs +0 -226
  232. package/fesm2022/ojiepermana-angular-component-pagination.mjs.map +0 -1
  233. package/fesm2022/ojiepermana-angular-component-pillbox.mjs +0 -812
  234. package/fesm2022/ojiepermana-angular-component-pillbox.mjs.map +0 -1
  235. package/fesm2022/ojiepermana-angular-component-popover.mjs +0 -169
  236. package/fesm2022/ojiepermana-angular-component-popover.mjs.map +0 -1
  237. package/fesm2022/ojiepermana-angular-component-progress.mjs +0 -60
  238. package/fesm2022/ojiepermana-angular-component-progress.mjs.map +0 -1
  239. package/fesm2022/ojiepermana-angular-component-radio.mjs +0 -122
  240. package/fesm2022/ojiepermana-angular-component-radio.mjs.map +0 -1
  241. package/fesm2022/ojiepermana-angular-component-resizable.mjs +0 -481
  242. package/fesm2022/ojiepermana-angular-component-resizable.mjs.map +0 -1
  243. package/fesm2022/ojiepermana-angular-component-scroll-area.mjs +0 -54
  244. package/fesm2022/ojiepermana-angular-component-scroll-area.mjs.map +0 -1
  245. package/fesm2022/ojiepermana-angular-component-select.mjs +0 -176
  246. package/fesm2022/ojiepermana-angular-component-select.mjs.map +0 -1
  247. package/fesm2022/ojiepermana-angular-component-separator.mjs +0 -37
  248. package/fesm2022/ojiepermana-angular-component-separator.mjs.map +0 -1
  249. package/fesm2022/ojiepermana-angular-component-sheet.mjs +0 -284
  250. package/fesm2022/ojiepermana-angular-component-sheet.mjs.map +0 -1
  251. package/fesm2022/ojiepermana-angular-component-skeleton.mjs +0 -31
  252. package/fesm2022/ojiepermana-angular-component-skeleton.mjs.map +0 -1
  253. package/fesm2022/ojiepermana-angular-component-slider.mjs +0 -423
  254. package/fesm2022/ojiepermana-angular-component-slider.mjs.map +0 -1
  255. package/fesm2022/ojiepermana-angular-component-spinner.mjs +0 -60
  256. package/fesm2022/ojiepermana-angular-component-spinner.mjs.map +0 -1
  257. package/fesm2022/ojiepermana-angular-component-switch.mjs +0 -116
  258. package/fesm2022/ojiepermana-angular-component-switch.mjs.map +0 -1
  259. package/fesm2022/ojiepermana-angular-component-table.mjs +0 -155
  260. package/fesm2022/ojiepermana-angular-component-table.mjs.map +0 -1
  261. package/fesm2022/ojiepermana-angular-component-tabs.mjs +0 -272
  262. package/fesm2022/ojiepermana-angular-component-tabs.mjs.map +0 -1
  263. package/fesm2022/ojiepermana-angular-component-textarea.mjs +0 -39
  264. package/fesm2022/ojiepermana-angular-component-textarea.mjs.map +0 -1
  265. package/fesm2022/ojiepermana-angular-component-timeline.mjs +0 -237
  266. package/fesm2022/ojiepermana-angular-component-timeline.mjs.map +0 -1
  267. package/fesm2022/ojiepermana-angular-component-toast.mjs +0 -71
  268. package/fesm2022/ojiepermana-angular-component-toast.mjs.map +0 -1
  269. package/fesm2022/ojiepermana-angular-component-toggle-group.mjs +0 -289
  270. package/fesm2022/ojiepermana-angular-component-toggle-group.mjs.map +0 -1
  271. package/fesm2022/ojiepermana-angular-component-toggle.mjs +0 -82
  272. package/fesm2022/ojiepermana-angular-component-toggle.mjs.map +0 -1
  273. package/fesm2022/ojiepermana-angular-component-tooltip.mjs +0 -354
  274. package/fesm2022/ojiepermana-angular-component-tooltip.mjs.map +0 -1
  275. package/fesm2022/ojiepermana-angular-component-utils.mjs +0 -13
  276. package/fesm2022/ojiepermana-angular-component-utils.mjs.map +0 -1
  277. package/fesm2022/ojiepermana-angular-generator-api.mjs +0 -68
  278. package/fesm2022/ojiepermana-angular-generator-api.mjs.map +0 -1
  279. package/fesm2022/ojiepermana-angular-layout-component.mjs +0 -602
  280. package/fesm2022/ojiepermana-angular-layout-component.mjs.map +0 -1
  281. package/fesm2022/ojiepermana-angular-layout-provider.mjs +0 -21
  282. package/fesm2022/ojiepermana-angular-layout-provider.mjs.map +0 -1
  283. package/fesm2022/ojiepermana-angular-layout-services.mjs +0 -116
  284. package/fesm2022/ojiepermana-angular-layout-services.mjs.map +0 -1
  285. package/fesm2022/ojiepermana-angular-layout-shell.mjs +0 -48
  286. package/fesm2022/ojiepermana-angular-layout-shell.mjs.map +0 -1
  287. package/fesm2022/ojiepermana-angular-layout-token-directive.mjs +0 -30
  288. package/fesm2022/ojiepermana-angular-layout-token-directive.mjs.map +0 -1
  289. package/fesm2022/ojiepermana-angular-layout-token.mjs +0 -33
  290. package/fesm2022/ojiepermana-angular-layout-token.mjs.map +0 -1
  291. package/fesm2022/ojiepermana-angular-layout-type-empty.mjs +0 -49
  292. package/fesm2022/ojiepermana-angular-layout-type-empty.mjs.map +0 -1
  293. package/fesm2022/ojiepermana-angular-layout-type-horizontal.mjs +0 -128
  294. package/fesm2022/ojiepermana-angular-layout-type-horizontal.mjs.map +0 -1
  295. package/fesm2022/ojiepermana-angular-layout-type-vertical.mjs +0 -123
  296. package/fesm2022/ojiepermana-angular-layout-type-vertical.mjs.map +0 -1
  297. package/fesm2022/ojiepermana-angular-layout.mjs +0 -485
  298. package/fesm2022/ojiepermana-angular-layout.mjs.map +0 -1
  299. package/fesm2022/ojiepermana-angular-navigation-demo-data.mjs +0 -334
  300. package/fesm2022/ojiepermana-angular-navigation-demo-data.mjs.map +0 -1
  301. package/fesm2022/ojiepermana-angular-navigation-icon.mjs +0 -63
  302. package/fesm2022/ojiepermana-angular-navigation-icon.mjs.map +0 -1
  303. package/fesm2022/ojiepermana-angular-navigation-item.mjs +0 -559
  304. package/fesm2022/ojiepermana-angular-navigation-item.mjs.map +0 -1
  305. package/fesm2022/ojiepermana-angular-navigation-service.mjs +0 -213
  306. package/fesm2022/ojiepermana-angular-navigation-service.mjs.map +0 -1
  307. package/fesm2022/ojiepermana-angular-navigation-sidebar.mjs +0 -401
  308. package/fesm2022/ojiepermana-angular-navigation-sidebar.mjs.map +0 -1
  309. package/fesm2022/ojiepermana-angular-navigation-topbar.mjs +0 -670
  310. package/fesm2022/ojiepermana-angular-navigation-topbar.mjs.map +0 -1
  311. package/fesm2022/ojiepermana-angular-navigation-types.mjs +0 -4
  312. package/fesm2022/ojiepermana-angular-navigation-types.mjs.map +0 -1
  313. package/fesm2022/ojiepermana-angular-theme-provider.mjs +0 -35
  314. package/fesm2022/ojiepermana-angular-theme-provider.mjs.map +0 -1
  315. package/fesm2022/ojiepermana-angular-theme-services.mjs +0 -294
  316. package/fesm2022/ojiepermana-angular-theme-services.mjs.map +0 -1
  317. package/fesm2022/ojiepermana-angular-theme-token.mjs +0 -56
  318. package/fesm2022/ojiepermana-angular-theme-token.mjs.map +0 -1
  319. package/fesm2022/ojiepermana-angular-theme.mjs.map +0 -1
  320. package/fesm2022/ojiepermana-angular.mjs.map +0 -1
  321. package/generator/api/README.md +0 -252
  322. package/generator/api/bin/package.json +0 -3
  323. package/generator/api/bin/schematics/init/index.js +0 -90
  324. package/generator/api/bin/schematics/ng-add/index.js +0 -131
  325. package/generator/api/bin/schematics/sdk/index.js +0 -76
  326. package/generator/api/bin/src/config/loader.js +0 -41
  327. package/generator/api/bin/src/config/schema.js +0 -57
  328. package/generator/api/bin/src/emit/client.js +0 -248
  329. package/generator/api/bin/src/emit/metadata.js +0 -295
  330. package/generator/api/bin/src/emit/models.js +0 -106
  331. package/generator/api/bin/src/emit/navigation.js +0 -56
  332. package/generator/api/bin/src/emit/operations.js +0 -122
  333. package/generator/api/bin/src/emit/public-api.js +0 -54
  334. package/generator/api/bin/src/emit/services.js +0 -87
  335. package/generator/api/bin/src/engine.js +0 -65
  336. package/generator/api/bin/src/layout/per-domain.js +0 -359
  337. package/generator/api/bin/src/parser/bundle.js +0 -25
  338. package/generator/api/bin/src/parser/ir.js +0 -320
  339. package/generator/api/bin/src/parser/types.js +0 -7
  340. package/generator/api/bin/src/render/template.js +0 -58
  341. package/generator/api/bin/src/writer/index.js +0 -278
  342. package/generator/api/package.json +0 -4
  343. package/generator/api/schematics/init/schema.json +0 -19
  344. package/generator/api/schematics/ng-add/schema.json +0 -14
  345. package/generator/api/schematics/sdk/schema.json +0 -19
  346. package/generator/api/sdk.config.example.json +0 -24
  347. package/generator/guide/README.md +0 -84
  348. package/generator/guide/bin/package.json +0 -3
  349. package/generator/guide/bin/schematics/build/index.js +0 -36
  350. package/generator/guide/bin/schematics/init/index.js +0 -70
  351. package/generator/guide/bin/src/config/loader.js +0 -50
  352. package/generator/guide/bin/src/config/schema.js +0 -12
  353. package/generator/guide/bin/src/engine/component.js +0 -74
  354. package/generator/guide/bin/src/engine/frontmatter.js +0 -42
  355. package/generator/guide/bin/src/engine/index.js +0 -42
  356. package/generator/guide/bin/src/engine/naming.js +0 -39
  357. package/generator/guide/bin/src/engine/render.js +0 -36
  358. package/generator/guide/bin/src/engine/routes.js +0 -106
  359. package/generator/guide/bin/src/engine/walk.js +0 -35
  360. package/generator/guide/guide.config.example.json +0 -9
  361. package/generator/guide/schematics/build/schema.json +0 -14
  362. package/generator/guide/schematics/init/schema.json +0 -19
  363. package/layout/component/package.json +0 -4
  364. package/layout/package.json +0 -4
  365. package/layout/provider/package.json +0 -4
  366. package/layout/services/package.json +0 -4
  367. package/layout/shell/package.json +0 -4
  368. package/layout/token/directive/package.json +0 -4
  369. package/layout/token/package.json +0 -4
  370. package/layout/type/empty/package.json +0 -4
  371. package/layout/type/horizontal/package.json +0 -4
  372. package/layout/type/vertical/package.json +0 -4
  373. package/navigation/demo-data/package.json +0 -4
  374. package/navigation/icon/package.json +0 -4
  375. package/navigation/item/package.json +0 -4
  376. package/navigation/service/package.json +0 -4
  377. package/navigation/sidebar/package.json +0 -4
  378. package/navigation/topbar/README.md +0 -196
  379. package/navigation/topbar/package.json +0 -4
  380. package/navigation/types/package.json +0 -4
  381. package/theme/README.md +0 -174
  382. package/theme/package.json +0 -4
  383. package/theme/provider/package.json +0 -4
  384. package/theme/services/package.json +0 -4
  385. package/theme/styles/foundation/components.css +0 -81
  386. package/theme/styles/foundation/layers.css +0 -15
  387. package/theme/styles/foundation/tokens.css +0 -55
  388. package/theme/styles/index.css +0 -37
  389. package/theme/styles/integrations/material/autocomplete.css +0 -178
  390. package/theme/styles/integrations/material/button.css +0 -468
  391. package/theme/styles/integrations/material/dialog.css +0 -152
  392. package/theme/styles/integrations/material/select.css +0 -175
  393. package/theme/styles/integrations/material/slide-toggle.css +0 -234
  394. package/theme/styles/integrations/material/slider.css +0 -194
  395. package/theme/styles/integrations/material/tabs.css +0 -229
  396. package/theme/styles/integrations/material.css +0 -264
  397. package/theme/styles/integrations/tailwind.css +0 -114
  398. package/theme/styles/variants/color/amber.css +0 -31
  399. package/theme/styles/variants/color/base.css +0 -36
  400. package/theme/styles/variants/color/blue.css +0 -31
  401. package/theme/styles/variants/color/cyan.css +0 -31
  402. package/theme/styles/variants/color/emerald.css +0 -31
  403. package/theme/styles/variants/color/fuchsia.css +0 -31
  404. package/theme/styles/variants/color/green.css +0 -31
  405. package/theme/styles/variants/color/index.css +0 -22
  406. package/theme/styles/variants/color/indigo.css +0 -31
  407. package/theme/styles/variants/color/lime.css +0 -31
  408. package/theme/styles/variants/color/orange.css +0 -31
  409. package/theme/styles/variants/color/pink.css +0 -31
  410. package/theme/styles/variants/color/purple.css +0 -31
  411. package/theme/styles/variants/color/red.css +0 -31
  412. package/theme/styles/variants/color/rose.css +0 -31
  413. package/theme/styles/variants/color/sky.css +0 -31
  414. package/theme/styles/variants/color/teal.css +0 -31
  415. package/theme/styles/variants/color/violet.css +0 -31
  416. package/theme/styles/variants/color/yellow.css +0 -31
  417. package/theme/styles/variants/mode/dark.css +0 -20
  418. package/theme/styles/variants/mode/index.css +0 -6
  419. package/theme/styles/variants/mode/light.css +0 -24
  420. package/theme/styles/variants/style/brutal.css +0 -50
  421. package/theme/styles/variants/style/default.css +0 -54
  422. package/theme/styles/variants/style/index.css +0 -8
  423. package/theme/styles/variants/style/sharp.css +0 -50
  424. package/theme/styles/variants/style/soft.css +0 -50
  425. package/theme/token/package.json +0 -4
  426. package/types/ojiepermana-angular-component-accordion.d.ts +0 -51
  427. package/types/ojiepermana-angular-component-alert-dialog.d.ts +0 -93
  428. package/types/ojiepermana-angular-component-alert.d.ts +0 -37
  429. package/types/ojiepermana-angular-component-aspect-ratio.d.ts +0 -12
  430. package/types/ojiepermana-angular-component-avatar.d.ts +0 -51
  431. package/types/ojiepermana-angular-component-badge.d.ts +0 -19
  432. package/types/ojiepermana-angular-component-breadcrumb.d.ts +0 -46
  433. package/types/ojiepermana-angular-component-button-group.d.ts +0 -26
  434. package/types/ojiepermana-angular-component-button.d.ts +0 -22
  435. package/types/ojiepermana-angular-component-calendar.d.ts +0 -33
  436. package/types/ojiepermana-angular-component-card.d.ts +0 -60
  437. package/types/ojiepermana-angular-component-carousel.d.ts +0 -86
  438. package/types/ojiepermana-angular-component-chart-area.d.ts +0 -1
  439. package/types/ojiepermana-angular-component-chart-bar.d.ts +0 -1
  440. package/types/ojiepermana-angular-component-chart-line.d.ts +0 -1
  441. package/types/ojiepermana-angular-component-chart-pie.d.ts +0 -1
  442. package/types/ojiepermana-angular-component-chart-radar.d.ts +0 -1
  443. package/types/ojiepermana-angular-component-chart-radial.d.ts +0 -1
  444. package/types/ojiepermana-angular-component-chart-scatter.d.ts +0 -1
  445. package/types/ojiepermana-angular-component-chart.d.ts +0 -1094
  446. package/types/ojiepermana-angular-component-checkbox.d.ts +0 -35
  447. package/types/ojiepermana-angular-component-collapsible.d.ts +0 -42
  448. package/types/ojiepermana-angular-component-combobox.d.ts +0 -50
  449. package/types/ojiepermana-angular-component-command.d.ts +0 -99
  450. package/types/ojiepermana-angular-component-composer.d.ts +0 -90
  451. package/types/ojiepermana-angular-component-context-menu.d.ts +0 -35
  452. package/types/ojiepermana-angular-component-date-picker.d.ts +0 -41
  453. package/types/ojiepermana-angular-component-dialog.d.ts +0 -87
  454. package/types/ojiepermana-angular-component-drawer.d.ts +0 -1
  455. package/types/ojiepermana-angular-component-dropdown-menu.d.ts +0 -137
  456. package/types/ojiepermana-angular-component-editor.d.ts +0 -123
  457. package/types/ojiepermana-angular-component-empty.d.ts +0 -50
  458. package/types/ojiepermana-angular-component-form.d.ts +0 -141
  459. package/types/ojiepermana-angular-component-hover-card.d.ts +0 -74
  460. package/types/ojiepermana-angular-component-input-group.d.ts +0 -51
  461. package/types/ojiepermana-angular-component-input-otp.d.ts +0 -136
  462. package/types/ojiepermana-angular-component-input.d.ts +0 -16
  463. package/types/ojiepermana-angular-component-item.d.ts +0 -88
  464. package/types/ojiepermana-angular-component-kanban.d.ts +0 -70
  465. package/types/ojiepermana-angular-component-kbd.d.ts +0 -16
  466. package/types/ojiepermana-angular-component-label.d.ts +0 -11
  467. package/types/ojiepermana-angular-component-menubar.d.ts +0 -67
  468. package/types/ojiepermana-angular-component-native-select.d.ts +0 -26
  469. package/types/ojiepermana-angular-component-navigation-menu.d.ts +0 -96
  470. package/types/ojiepermana-angular-component-pagination.d.ts +0 -33
  471. package/types/ojiepermana-angular-component-pillbox.d.ts +0 -157
  472. package/types/ojiepermana-angular-component-popover.d.ts +0 -43
  473. package/types/ojiepermana-angular-component-progress.d.ts +0 -17
  474. package/types/ojiepermana-angular-component-radio.d.ts +0 -40
  475. package/types/ojiepermana-angular-component-resizable.d.ts +0 -99
  476. package/types/ojiepermana-angular-component-scroll-area.d.ts +0 -19
  477. package/types/ojiepermana-angular-component-select.d.ts +0 -57
  478. package/types/ojiepermana-angular-component-separator.d.ts +0 -14
  479. package/types/ojiepermana-angular-component-sheet.d.ts +0 -76
  480. package/types/ojiepermana-angular-component-skeleton.d.ts +0 -10
  481. package/types/ojiepermana-angular-component-slider.d.ts +0 -74
  482. package/types/ojiepermana-angular-component-spinner.d.ts +0 -13
  483. package/types/ojiepermana-angular-component-switch.d.ts +0 -40
  484. package/types/ojiepermana-angular-component-table.d.ts +0 -52
  485. package/types/ojiepermana-angular-component-tabs.d.ts +0 -92
  486. package/types/ojiepermana-angular-component-textarea.d.ts +0 -12
  487. package/types/ojiepermana-angular-component-timeline.d.ts +0 -63
  488. package/types/ojiepermana-angular-component-toast.d.ts +0 -38
  489. package/types/ojiepermana-angular-component-toggle-group.d.ts +0 -89
  490. package/types/ojiepermana-angular-component-toggle.d.ts +0 -25
  491. package/types/ojiepermana-angular-component-tooltip.d.ts +0 -89
  492. package/types/ojiepermana-angular-component-utils.d.ts +0 -5
  493. package/types/ojiepermana-angular-generator-api.d.ts +0 -86
  494. package/types/ojiepermana-angular-layout-component.d.ts +0 -205
  495. package/types/ojiepermana-angular-layout-provider.d.ts +0 -6
  496. package/types/ojiepermana-angular-layout-services.d.ts +0 -25
  497. package/types/ojiepermana-angular-layout-shell.d.ts +0 -8
  498. package/types/ojiepermana-angular-layout-token-directive.d.ts +0 -13
  499. package/types/ojiepermana-angular-layout-token.d.ts +0 -36
  500. package/types/ojiepermana-angular-layout-type-empty.d.ts +0 -22
  501. package/types/ojiepermana-angular-layout-type-horizontal.d.ts +0 -36
  502. package/types/ojiepermana-angular-layout-type-vertical.d.ts +0 -38
  503. package/types/ojiepermana-angular-layout.d.ts +0 -164
  504. package/types/ojiepermana-angular-navigation-demo-data.d.ts +0 -5
  505. package/types/ojiepermana-angular-navigation-icon.d.ts +0 -17
  506. package/types/ojiepermana-angular-navigation-item.d.ts +0 -54
  507. package/types/ojiepermana-angular-navigation-service.d.ts +0 -77
  508. package/types/ojiepermana-angular-navigation-sidebar.d.ts +0 -75
  509. package/types/ojiepermana-angular-navigation-topbar.d.ts +0 -74
  510. package/types/ojiepermana-angular-navigation-types.d.ts +0 -135
  511. package/types/ojiepermana-angular-theme-provider.d.ts +0 -11
  512. package/types/ojiepermana-angular-theme-services.d.ts +0 -55
  513. 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":"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"}
@@ -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