@ojiepermana/angular 21.3.0 → 21.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (441) hide show
  1. package/README.md +76 -12
  2. package/component/accordion/package.json +4 -0
  3. package/component/alert/package.json +4 -0
  4. package/component/alert-dialog/package.json +4 -0
  5. package/component/aspect-ratio/package.json +4 -0
  6. package/component/avatar/package.json +4 -0
  7. package/component/badge/package.json +4 -0
  8. package/component/breadcrumb/package.json +4 -0
  9. package/component/button/package.json +4 -0
  10. package/component/button-group/package.json +4 -0
  11. package/component/calendar/package.json +4 -0
  12. package/component/card/package.json +4 -0
  13. package/component/carousel/package.json +4 -0
  14. package/component/chart/area/package.json +4 -0
  15. package/component/chart/bar/package.json +4 -0
  16. package/component/chart/line/package.json +4 -0
  17. package/component/chart/package.json +4 -0
  18. package/component/chart/pie/package.json +4 -0
  19. package/component/chart/radar/package.json +4 -0
  20. package/component/chart/radial/package.json +4 -0
  21. package/component/chart/scatter/package.json +4 -0
  22. package/component/checkbox/package.json +4 -0
  23. package/component/collapsible/package.json +4 -0
  24. package/component/combobox/package.json +4 -0
  25. package/component/command/package.json +4 -0
  26. package/component/context-menu/package.json +4 -0
  27. package/component/date-picker/package.json +4 -0
  28. package/component/dialog/package.json +4 -0
  29. package/component/drawer/package.json +4 -0
  30. package/component/dropdown-menu/package.json +4 -0
  31. package/component/form/package.json +4 -0
  32. package/component/input/package.json +4 -0
  33. package/component/input-group/package.json +4 -0
  34. package/component/item/package.json +4 -0
  35. package/component/label/package.json +4 -0
  36. package/component/pagination/package.json +4 -0
  37. package/component/popover/package.json +4 -0
  38. package/component/progress/package.json +4 -0
  39. package/component/radio/package.json +4 -0
  40. package/component/scroll-area/package.json +4 -0
  41. package/component/select/package.json +4 -0
  42. package/component/separator/package.json +4 -0
  43. package/component/sheet/package.json +4 -0
  44. package/component/skeleton/package.json +4 -0
  45. package/component/slider/package.json +4 -0
  46. package/component/switch/package.json +4 -0
  47. package/component/table/package.json +4 -0
  48. package/component/tabs/package.json +4 -0
  49. package/component/textarea/package.json +4 -0
  50. package/component/toast/package.json +4 -0
  51. package/component/tooltip/package.json +4 -0
  52. package/component/utils/package.json +4 -0
  53. package/fesm2022/{ojiepermana-angular-ui-component-accordion.mjs → ojiepermana-angular-component-accordion.mjs} +1 -1
  54. package/fesm2022/ojiepermana-angular-component-accordion.mjs.map +1 -0
  55. package/fesm2022/{ojiepermana-angular-ui-component-alert-dialog.mjs → ojiepermana-angular-component-alert-dialog.mjs} +1 -1
  56. package/fesm2022/ojiepermana-angular-component-alert-dialog.mjs.map +1 -0
  57. package/fesm2022/{ojiepermana-angular-ui-component-alert.mjs → ojiepermana-angular-component-alert.mjs} +1 -1
  58. package/fesm2022/ojiepermana-angular-component-alert.mjs.map +1 -0
  59. package/fesm2022/{ojiepermana-angular-ui-component-aspect-ratio.mjs → ojiepermana-angular-component-aspect-ratio.mjs} +1 -1
  60. package/fesm2022/ojiepermana-angular-component-aspect-ratio.mjs.map +1 -0
  61. package/fesm2022/{ojiepermana-angular-ui-component-avatar.mjs → ojiepermana-angular-component-avatar.mjs} +1 -1
  62. package/fesm2022/ojiepermana-angular-component-avatar.mjs.map +1 -0
  63. package/fesm2022/{ojiepermana-angular-ui-component-badge.mjs → ojiepermana-angular-component-badge.mjs} +1 -1
  64. package/fesm2022/ojiepermana-angular-component-badge.mjs.map +1 -0
  65. package/fesm2022/{ojiepermana-angular-ui-component-breadcrumb.mjs → ojiepermana-angular-component-breadcrumb.mjs} +1 -1
  66. package/fesm2022/ojiepermana-angular-component-breadcrumb.mjs.map +1 -0
  67. package/fesm2022/{ojiepermana-angular-ui-component-button-group.mjs → ojiepermana-angular-component-button-group.mjs} +1 -1
  68. package/fesm2022/ojiepermana-angular-component-button-group.mjs.map +1 -0
  69. package/fesm2022/{ojiepermana-angular-ui-component-button.mjs → ojiepermana-angular-component-button.mjs} +1 -1
  70. package/fesm2022/ojiepermana-angular-component-button.mjs.map +1 -0
  71. package/fesm2022/{ojiepermana-angular-ui-component-calendar.mjs → ojiepermana-angular-component-calendar.mjs} +1 -1
  72. package/fesm2022/ojiepermana-angular-component-calendar.mjs.map +1 -0
  73. package/fesm2022/{ojiepermana-angular-ui-component-card.mjs → ojiepermana-angular-component-card.mjs} +1 -1
  74. package/fesm2022/ojiepermana-angular-component-card.mjs.map +1 -0
  75. package/fesm2022/{ojiepermana-angular-ui-component-carousel.mjs → ojiepermana-angular-component-carousel.mjs} +1 -1
  76. package/fesm2022/ojiepermana-angular-component-carousel.mjs.map +1 -0
  77. package/fesm2022/{ojiepermana-angular-ui-component-chart-area.mjs → ojiepermana-angular-component-chart-area.mjs} +1 -1
  78. package/fesm2022/ojiepermana-angular-component-chart-area.mjs.map +1 -0
  79. package/fesm2022/{ojiepermana-angular-ui-component-chart-bar.mjs → ojiepermana-angular-component-chart-bar.mjs} +1 -1
  80. package/fesm2022/ojiepermana-angular-component-chart-bar.mjs.map +1 -0
  81. package/fesm2022/{ojiepermana-angular-ui-component-chart-line.mjs → ojiepermana-angular-component-chart-line.mjs} +1 -1
  82. package/fesm2022/ojiepermana-angular-component-chart-line.mjs.map +1 -0
  83. package/fesm2022/{ojiepermana-angular-ui-component-chart-pie.mjs → ojiepermana-angular-component-chart-pie.mjs} +1 -1
  84. package/fesm2022/ojiepermana-angular-component-chart-pie.mjs.map +1 -0
  85. package/fesm2022/{ojiepermana-angular-ui-component-chart-radar.mjs → ojiepermana-angular-component-chart-radar.mjs} +1 -1
  86. package/fesm2022/ojiepermana-angular-component-chart-radar.mjs.map +1 -0
  87. package/fesm2022/{ojiepermana-angular-ui-component-chart-radial.mjs → ojiepermana-angular-component-chart-radial.mjs} +1 -1
  88. package/fesm2022/ojiepermana-angular-component-chart-radial.mjs.map +1 -0
  89. package/fesm2022/{ojiepermana-angular-ui-component-chart-scatter.mjs → ojiepermana-angular-component-chart-scatter.mjs} +1 -1
  90. package/fesm2022/ojiepermana-angular-component-chart-scatter.mjs.map +1 -0
  91. package/fesm2022/{ojiepermana-angular-ui-component-chart.mjs → ojiepermana-angular-component-chart.mjs} +1 -1
  92. package/fesm2022/ojiepermana-angular-component-chart.mjs.map +1 -0
  93. package/fesm2022/{ojiepermana-angular-ui-component-checkbox.mjs → ojiepermana-angular-component-checkbox.mjs} +1 -1
  94. package/fesm2022/ojiepermana-angular-component-checkbox.mjs.map +1 -0
  95. package/fesm2022/{ojiepermana-angular-ui-component-collapsible.mjs → ojiepermana-angular-component-collapsible.mjs} +1 -1
  96. package/fesm2022/ojiepermana-angular-component-collapsible.mjs.map +1 -0
  97. package/fesm2022/{ojiepermana-angular-ui-component-combobox.mjs → ojiepermana-angular-component-combobox.mjs} +1 -1
  98. package/fesm2022/ojiepermana-angular-component-combobox.mjs.map +1 -0
  99. package/fesm2022/{ojiepermana-angular-ui-component-command.mjs → ojiepermana-angular-component-command.mjs} +1 -1
  100. package/fesm2022/ojiepermana-angular-component-command.mjs.map +1 -0
  101. package/fesm2022/{ojiepermana-angular-ui-component-context-menu.mjs → ojiepermana-angular-component-context-menu.mjs} +1 -1
  102. package/fesm2022/ojiepermana-angular-component-context-menu.mjs.map +1 -0
  103. package/fesm2022/{ojiepermana-angular-ui-component-date-picker.mjs → ojiepermana-angular-component-date-picker.mjs} +1 -1
  104. package/fesm2022/ojiepermana-angular-component-date-picker.mjs.map +1 -0
  105. package/fesm2022/{ojiepermana-angular-ui-component-dialog.mjs → ojiepermana-angular-component-dialog.mjs} +1 -1
  106. package/fesm2022/ojiepermana-angular-component-dialog.mjs.map +1 -0
  107. package/fesm2022/{ojiepermana-angular-ui-component-drawer.mjs → ojiepermana-angular-component-drawer.mjs} +1 -1
  108. package/fesm2022/ojiepermana-angular-component-drawer.mjs.map +1 -0
  109. package/fesm2022/{ojiepermana-angular-ui-component-dropdown-menu.mjs → ojiepermana-angular-component-dropdown-menu.mjs} +1 -1
  110. package/fesm2022/ojiepermana-angular-component-dropdown-menu.mjs.map +1 -0
  111. package/fesm2022/{ojiepermana-angular-ui-component-form.mjs → ojiepermana-angular-component-form.mjs} +1 -1
  112. package/fesm2022/ojiepermana-angular-component-form.mjs.map +1 -0
  113. package/fesm2022/{ojiepermana-angular-ui-component-input-group.mjs → ojiepermana-angular-component-input-group.mjs} +1 -1
  114. package/fesm2022/ojiepermana-angular-component-input-group.mjs.map +1 -0
  115. package/fesm2022/{ojiepermana-angular-ui-component-input.mjs → ojiepermana-angular-component-input.mjs} +1 -1
  116. package/fesm2022/ojiepermana-angular-component-input.mjs.map +1 -0
  117. package/fesm2022/{ojiepermana-angular-ui-component-item.mjs → ojiepermana-angular-component-item.mjs} +1 -1
  118. package/fesm2022/ojiepermana-angular-component-item.mjs.map +1 -0
  119. package/fesm2022/{ojiepermana-angular-ui-component-label.mjs → ojiepermana-angular-component-label.mjs} +1 -1
  120. package/fesm2022/ojiepermana-angular-component-label.mjs.map +1 -0
  121. package/fesm2022/{ojiepermana-angular-ui-component-pagination.mjs → ojiepermana-angular-component-pagination.mjs} +1 -1
  122. package/fesm2022/ojiepermana-angular-component-pagination.mjs.map +1 -0
  123. package/fesm2022/{ojiepermana-angular-ui-component-popover.mjs → ojiepermana-angular-component-popover.mjs} +1 -1
  124. package/fesm2022/ojiepermana-angular-component-popover.mjs.map +1 -0
  125. package/fesm2022/{ojiepermana-angular-ui-component-progress.mjs → ojiepermana-angular-component-progress.mjs} +1 -1
  126. package/fesm2022/ojiepermana-angular-component-progress.mjs.map +1 -0
  127. package/fesm2022/{ojiepermana-angular-ui-component-radio.mjs → ojiepermana-angular-component-radio.mjs} +1 -1
  128. package/fesm2022/ojiepermana-angular-component-radio.mjs.map +1 -0
  129. package/fesm2022/{ojiepermana-angular-ui-component-scroll-area.mjs → ojiepermana-angular-component-scroll-area.mjs} +1 -1
  130. package/fesm2022/ojiepermana-angular-component-scroll-area.mjs.map +1 -0
  131. package/fesm2022/{ojiepermana-angular-ui-component-select.mjs → ojiepermana-angular-component-select.mjs} +1 -1
  132. package/fesm2022/ojiepermana-angular-component-select.mjs.map +1 -0
  133. package/fesm2022/{ojiepermana-angular-ui-component-separator.mjs → ojiepermana-angular-component-separator.mjs} +1 -1
  134. package/fesm2022/ojiepermana-angular-component-separator.mjs.map +1 -0
  135. package/fesm2022/{ojiepermana-angular-ui-component-sheet.mjs → ojiepermana-angular-component-sheet.mjs} +1 -1
  136. package/fesm2022/ojiepermana-angular-component-sheet.mjs.map +1 -0
  137. package/fesm2022/{ojiepermana-angular-ui-component-skeleton.mjs → ojiepermana-angular-component-skeleton.mjs} +1 -1
  138. package/fesm2022/ojiepermana-angular-component-skeleton.mjs.map +1 -0
  139. package/fesm2022/{ojiepermana-angular-ui-component-slider.mjs → ojiepermana-angular-component-slider.mjs} +1 -1
  140. package/fesm2022/ojiepermana-angular-component-slider.mjs.map +1 -0
  141. package/fesm2022/{ojiepermana-angular-ui-component-switch.mjs → ojiepermana-angular-component-switch.mjs} +1 -1
  142. package/fesm2022/ojiepermana-angular-component-switch.mjs.map +1 -0
  143. package/fesm2022/{ojiepermana-angular-ui-component-table.mjs → ojiepermana-angular-component-table.mjs} +1 -1
  144. package/fesm2022/ojiepermana-angular-component-table.mjs.map +1 -0
  145. package/fesm2022/{ojiepermana-angular-ui-component-tabs.mjs → ojiepermana-angular-component-tabs.mjs} +1 -1
  146. package/fesm2022/ojiepermana-angular-component-tabs.mjs.map +1 -0
  147. package/fesm2022/{ojiepermana-angular-ui-component-textarea.mjs → ojiepermana-angular-component-textarea.mjs} +1 -1
  148. package/fesm2022/ojiepermana-angular-component-textarea.mjs.map +1 -0
  149. package/fesm2022/{ojiepermana-angular-ui-component-toast.mjs → ojiepermana-angular-component-toast.mjs} +1 -1
  150. package/fesm2022/ojiepermana-angular-component-toast.mjs.map +1 -0
  151. package/fesm2022/{ojiepermana-angular-ui-component-tooltip.mjs → ojiepermana-angular-component-tooltip.mjs} +1 -1
  152. package/fesm2022/ojiepermana-angular-component-tooltip.mjs.map +1 -0
  153. package/fesm2022/{ojiepermana-angular-ui-component-utils.mjs → ojiepermana-angular-component-utils.mjs} +1 -1
  154. package/fesm2022/ojiepermana-angular-component-utils.mjs.map +1 -0
  155. package/fesm2022/ojiepermana-angular-generator-api.mjs +2 -1
  156. package/fesm2022/ojiepermana-angular-generator-api.mjs.map +1 -1
  157. package/fesm2022/{ojiepermana-angular-layout-theme.mjs → ojiepermana-angular-layout-component.mjs} +1 -1
  158. package/fesm2022/ojiepermana-angular-layout-component.mjs.map +1 -0
  159. package/fesm2022/ojiepermana-angular-layout-empty.mjs +49 -0
  160. package/fesm2022/ojiepermana-angular-layout-empty.mjs.map +1 -0
  161. package/fesm2022/ojiepermana-angular-layout-horizontal.mjs +119 -0
  162. package/fesm2022/ojiepermana-angular-layout-horizontal.mjs.map +1 -0
  163. package/fesm2022/ojiepermana-angular-layout-provider.mjs +21 -0
  164. package/fesm2022/ojiepermana-angular-layout-provider.mjs.map +1 -0
  165. package/fesm2022/ojiepermana-angular-layout-services.mjs +114 -0
  166. package/fesm2022/ojiepermana-angular-layout-services.mjs.map +1 -0
  167. package/fesm2022/ojiepermana-angular-layout-shell.mjs +48 -0
  168. package/fesm2022/ojiepermana-angular-layout-shell.mjs.map +1 -0
  169. package/fesm2022/ojiepermana-angular-layout-token-directive.mjs +27 -0
  170. package/fesm2022/ojiepermana-angular-layout-token-directive.mjs.map +1 -0
  171. package/fesm2022/ojiepermana-angular-layout-token.mjs +33 -0
  172. package/fesm2022/ojiepermana-angular-layout-token.mjs.map +1 -0
  173. package/fesm2022/ojiepermana-angular-layout-vertical.mjs +113 -0
  174. package/fesm2022/ojiepermana-angular-layout-vertical.mjs.map +1 -0
  175. package/fesm2022/ojiepermana-angular-layout.mjs +140 -137
  176. package/fesm2022/ojiepermana-angular-layout.mjs.map +1 -1
  177. package/fesm2022/ojiepermana-angular-navigation-demo-data.mjs +334 -0
  178. package/fesm2022/ojiepermana-angular-navigation-demo-data.mjs.map +1 -0
  179. package/fesm2022/ojiepermana-angular-navigation-icon.mjs.map +1 -1
  180. package/fesm2022/ojiepermana-angular-navigation-item.mjs +548 -0
  181. package/fesm2022/ojiepermana-angular-navigation-item.mjs.map +1 -0
  182. package/fesm2022/ojiepermana-angular-navigation-service.mjs +204 -0
  183. package/fesm2022/ojiepermana-angular-navigation-service.mjs.map +1 -0
  184. package/fesm2022/ojiepermana-angular-navigation-sidebar.mjs +373 -0
  185. package/fesm2022/ojiepermana-angular-navigation-sidebar.mjs.map +1 -0
  186. package/fesm2022/ojiepermana-angular-navigation-topbar.mjs +433 -0
  187. package/fesm2022/ojiepermana-angular-navigation-topbar.mjs.map +1 -0
  188. package/fesm2022/ojiepermana-angular-navigation-types.mjs +4 -0
  189. package/fesm2022/ojiepermana-angular-navigation-types.mjs.map +1 -0
  190. package/fesm2022/ojiepermana-angular-theme-provider.mjs +35 -0
  191. package/fesm2022/ojiepermana-angular-theme-provider.mjs.map +1 -0
  192. package/fesm2022/ojiepermana-angular-theme-services.mjs +286 -0
  193. package/fesm2022/ojiepermana-angular-theme-services.mjs.map +1 -0
  194. package/fesm2022/ojiepermana-angular-theme-token.mjs +56 -0
  195. package/fesm2022/ojiepermana-angular-theme-token.mjs.map +1 -0
  196. package/fesm2022/ojiepermana-angular-theme.mjs +31 -56
  197. package/fesm2022/ojiepermana-angular-theme.mjs.map +1 -1
  198. package/fesm2022/ojiepermana-angular.mjs +3 -4
  199. package/fesm2022/ojiepermana-angular.mjs.map +1 -1
  200. package/generator/api/README.md +18 -15
  201. package/generator/api/bin/schematics/init/index.js +4 -2
  202. package/generator/api/bin/src/config/schema.js +2 -1
  203. package/generator/api/bin/src/emit/navigation.js +1 -1
  204. package/generator/api/bin/src/layout/per-domain.js +7 -3
  205. package/generator/api/sdk.config.example.json +4 -2
  206. package/layout/component/package.json +4 -0
  207. package/layout/empty/package.json +4 -0
  208. package/layout/horizontal/package.json +4 -0
  209. package/layout/provider/package.json +4 -0
  210. package/layout/services/package.json +4 -0
  211. package/layout/shell/package.json +4 -0
  212. package/layout/token/directive/package.json +4 -0
  213. package/layout/token/package.json +4 -0
  214. package/layout/vertical/package.json +4 -0
  215. package/navigation/demo-data/package.json +4 -0
  216. package/navigation/icon/package.json +4 -0
  217. package/navigation/item/package.json +4 -0
  218. package/navigation/service/package.json +4 -0
  219. package/navigation/sidebar/package.json +4 -0
  220. package/navigation/topbar/package.json +4 -0
  221. package/navigation/types/package.json +4 -0
  222. package/package.json +196 -128
  223. package/theme/README.md +67 -0
  224. package/theme/provider/package.json +4 -0
  225. package/theme/services/package.json +4 -0
  226. package/theme/styles/index.css +12 -7
  227. package/theme/token/package.json +4 -0
  228. package/types/{ojiepermana-angular-ui-component-chart.d.ts → ojiepermana-angular-component-chart.d.ts} +15 -15
  229. package/types/ojiepermana-angular-generator-api.d.ts +2 -1
  230. package/types/ojiepermana-angular-layout-empty.d.ts +22 -0
  231. package/types/ojiepermana-angular-layout-horizontal.d.ts +36 -0
  232. package/types/ojiepermana-angular-layout-provider.d.ts +6 -0
  233. package/types/ojiepermana-angular-layout-services.d.ts +25 -0
  234. package/types/ojiepermana-angular-layout-shell.d.ts +8 -0
  235. package/types/ojiepermana-angular-layout-token-directive.d.ts +13 -0
  236. package/types/ojiepermana-angular-layout-token.d.ts +36 -0
  237. package/types/ojiepermana-angular-layout-vertical.d.ts +38 -0
  238. package/types/ojiepermana-angular-layout.d.ts +26 -25
  239. package/types/ojiepermana-angular-navigation-demo-data.d.ts +5 -0
  240. package/types/ojiepermana-angular-navigation-item.d.ts +54 -0
  241. package/types/ojiepermana-angular-navigation-service.d.ts +77 -0
  242. package/types/ojiepermana-angular-navigation-sidebar.d.ts +75 -0
  243. package/types/ojiepermana-angular-navigation-topbar.d.ts +54 -0
  244. package/types/ojiepermana-angular-navigation-types.d.ts +129 -0
  245. package/types/ojiepermana-angular-theme-provider.d.ts +11 -0
  246. package/types/ojiepermana-angular-theme-services.d.ts +55 -0
  247. package/types/ojiepermana-angular-theme-token.d.ts +57 -0
  248. package/types/ojiepermana-angular-theme.d.ts +11 -66
  249. package/fesm2022/ojiepermana-angular-layout-theme.mjs.map +0 -1
  250. package/fesm2022/ojiepermana-angular-navigation.mjs +0 -2317
  251. package/fesm2022/ojiepermana-angular-navigation.mjs.map +0 -1
  252. package/fesm2022/ojiepermana-angular-ui-component-accordion.mjs.map +0 -1
  253. package/fesm2022/ojiepermana-angular-ui-component-alert-dialog.mjs.map +0 -1
  254. package/fesm2022/ojiepermana-angular-ui-component-alert.mjs.map +0 -1
  255. package/fesm2022/ojiepermana-angular-ui-component-aspect-ratio.mjs.map +0 -1
  256. package/fesm2022/ojiepermana-angular-ui-component-avatar.mjs.map +0 -1
  257. package/fesm2022/ojiepermana-angular-ui-component-badge.mjs.map +0 -1
  258. package/fesm2022/ojiepermana-angular-ui-component-breadcrumb.mjs.map +0 -1
  259. package/fesm2022/ojiepermana-angular-ui-component-button-group.mjs.map +0 -1
  260. package/fesm2022/ojiepermana-angular-ui-component-button.mjs.map +0 -1
  261. package/fesm2022/ojiepermana-angular-ui-component-calendar.mjs.map +0 -1
  262. package/fesm2022/ojiepermana-angular-ui-component-card.mjs.map +0 -1
  263. package/fesm2022/ojiepermana-angular-ui-component-carousel.mjs.map +0 -1
  264. package/fesm2022/ojiepermana-angular-ui-component-chart-area.mjs.map +0 -1
  265. package/fesm2022/ojiepermana-angular-ui-component-chart-bar.mjs.map +0 -1
  266. package/fesm2022/ojiepermana-angular-ui-component-chart-line.mjs.map +0 -1
  267. package/fesm2022/ojiepermana-angular-ui-component-chart-pie.mjs.map +0 -1
  268. package/fesm2022/ojiepermana-angular-ui-component-chart-radar.mjs.map +0 -1
  269. package/fesm2022/ojiepermana-angular-ui-component-chart-radial.mjs.map +0 -1
  270. package/fesm2022/ojiepermana-angular-ui-component-chart-scatter.mjs.map +0 -1
  271. package/fesm2022/ojiepermana-angular-ui-component-chart.mjs.map +0 -1
  272. package/fesm2022/ojiepermana-angular-ui-component-checkbox.mjs.map +0 -1
  273. package/fesm2022/ojiepermana-angular-ui-component-collapsible.mjs.map +0 -1
  274. package/fesm2022/ojiepermana-angular-ui-component-combobox.mjs.map +0 -1
  275. package/fesm2022/ojiepermana-angular-ui-component-command.mjs.map +0 -1
  276. package/fesm2022/ojiepermana-angular-ui-component-context-menu.mjs.map +0 -1
  277. package/fesm2022/ojiepermana-angular-ui-component-date-picker.mjs.map +0 -1
  278. package/fesm2022/ojiepermana-angular-ui-component-dialog.mjs.map +0 -1
  279. package/fesm2022/ojiepermana-angular-ui-component-drawer.mjs.map +0 -1
  280. package/fesm2022/ojiepermana-angular-ui-component-dropdown-menu.mjs.map +0 -1
  281. package/fesm2022/ojiepermana-angular-ui-component-form.mjs.map +0 -1
  282. package/fesm2022/ojiepermana-angular-ui-component-input-group.mjs.map +0 -1
  283. package/fesm2022/ojiepermana-angular-ui-component-input.mjs.map +0 -1
  284. package/fesm2022/ojiepermana-angular-ui-component-item.mjs.map +0 -1
  285. package/fesm2022/ojiepermana-angular-ui-component-label.mjs.map +0 -1
  286. package/fesm2022/ojiepermana-angular-ui-component-pagination.mjs.map +0 -1
  287. package/fesm2022/ojiepermana-angular-ui-component-popover.mjs.map +0 -1
  288. package/fesm2022/ojiepermana-angular-ui-component-progress.mjs.map +0 -1
  289. package/fesm2022/ojiepermana-angular-ui-component-radio.mjs.map +0 -1
  290. package/fesm2022/ojiepermana-angular-ui-component-scroll-area.mjs.map +0 -1
  291. package/fesm2022/ojiepermana-angular-ui-component-select.mjs.map +0 -1
  292. package/fesm2022/ojiepermana-angular-ui-component-separator.mjs.map +0 -1
  293. package/fesm2022/ojiepermana-angular-ui-component-sheet.mjs.map +0 -1
  294. package/fesm2022/ojiepermana-angular-ui-component-skeleton.mjs.map +0 -1
  295. package/fesm2022/ojiepermana-angular-ui-component-slider.mjs.map +0 -1
  296. package/fesm2022/ojiepermana-angular-ui-component-switch.mjs.map +0 -1
  297. package/fesm2022/ojiepermana-angular-ui-component-table.mjs.map +0 -1
  298. package/fesm2022/ojiepermana-angular-ui-component-tabs.mjs.map +0 -1
  299. package/fesm2022/ojiepermana-angular-ui-component-textarea.mjs.map +0 -1
  300. package/fesm2022/ojiepermana-angular-ui-component-toast.mjs.map +0 -1
  301. package/fesm2022/ojiepermana-angular-ui-component-tooltip.mjs.map +0 -1
  302. package/fesm2022/ojiepermana-angular-ui-component-utils.mjs.map +0 -1
  303. package/layout/theme/package.json +0 -4
  304. package/navigation/package.json +0 -4
  305. package/navigation-icon/package.json +0 -4
  306. package/types/ojiepermana-angular-navigation.d.ts +0 -375
  307. package/ui/component/accordion/package.json +0 -4
  308. package/ui/component/alert/package.json +0 -4
  309. package/ui/component/alert-dialog/package.json +0 -4
  310. package/ui/component/aspect-ratio/package.json +0 -4
  311. package/ui/component/avatar/package.json +0 -4
  312. package/ui/component/badge/package.json +0 -4
  313. package/ui/component/breadcrumb/package.json +0 -4
  314. package/ui/component/button/package.json +0 -4
  315. package/ui/component/button-group/package.json +0 -4
  316. package/ui/component/calendar/package.json +0 -4
  317. package/ui/component/card/package.json +0 -4
  318. package/ui/component/carousel/package.json +0 -4
  319. package/ui/component/chart/area/package.json +0 -4
  320. package/ui/component/chart/bar/package.json +0 -4
  321. package/ui/component/chart/line/package.json +0 -4
  322. package/ui/component/chart/package.json +0 -4
  323. package/ui/component/chart/pie/package.json +0 -4
  324. package/ui/component/chart/radar/package.json +0 -4
  325. package/ui/component/chart/radial/package.json +0 -4
  326. package/ui/component/chart/scatter/package.json +0 -4
  327. package/ui/component/checkbox/package.json +0 -4
  328. package/ui/component/collapsible/package.json +0 -4
  329. package/ui/component/combobox/package.json +0 -4
  330. package/ui/component/command/package.json +0 -4
  331. package/ui/component/context-menu/package.json +0 -4
  332. package/ui/component/date-picker/package.json +0 -4
  333. package/ui/component/dialog/package.json +0 -4
  334. package/ui/component/drawer/package.json +0 -4
  335. package/ui/component/dropdown-menu/package.json +0 -4
  336. package/ui/component/form/package.json +0 -4
  337. package/ui/component/input/package.json +0 -4
  338. package/ui/component/input-group/package.json +0 -4
  339. package/ui/component/item/package.json +0 -4
  340. package/ui/component/label/package.json +0 -4
  341. package/ui/component/pagination/package.json +0 -4
  342. package/ui/component/popover/package.json +0 -4
  343. package/ui/component/progress/package.json +0 -4
  344. package/ui/component/radio/package.json +0 -4
  345. package/ui/component/scroll-area/package.json +0 -4
  346. package/ui/component/select/package.json +0 -4
  347. package/ui/component/separator/package.json +0 -4
  348. package/ui/component/sheet/package.json +0 -4
  349. package/ui/component/skeleton/package.json +0 -4
  350. package/ui/component/slider/package.json +0 -4
  351. package/ui/component/switch/package.json +0 -4
  352. package/ui/component/table/package.json +0 -4
  353. package/ui/component/tabs/package.json +0 -4
  354. package/ui/component/textarea/package.json +0 -4
  355. package/ui/component/toast/package.json +0 -4
  356. package/ui/component/tooltip/package.json +0 -4
  357. package/ui/component/utils/package.json +0 -4
  358. /package/{ui/component → component}/chart/README.md +0 -0
  359. /package/theme/styles/{themes/library/_components.css → foundation/components.css} +0 -0
  360. /package/theme/styles/{themes/library/_layers.css → foundation/layers.css} +0 -0
  361. /package/theme/styles/{themes/library/_tokens.css → foundation/tokens.css} +0 -0
  362. /package/theme/styles/{themes/library/_material-overrides.css → integrations/material.css} +0 -0
  363. /package/theme/styles/{themes → integrations}/tailwind.css +0 -0
  364. /package/theme/styles/{themes/library → variants}/color/amber.css +0 -0
  365. /package/theme/styles/{themes/library → variants}/color/base.css +0 -0
  366. /package/theme/styles/{themes/library → variants}/color/blue.css +0 -0
  367. /package/theme/styles/{themes/library → variants}/color/cyan.css +0 -0
  368. /package/theme/styles/{themes/library → variants}/color/emerald.css +0 -0
  369. /package/theme/styles/{themes/library → variants}/color/fuchsia.css +0 -0
  370. /package/theme/styles/{themes/library → variants}/color/green.css +0 -0
  371. /package/theme/styles/{themes/library → variants}/color/index.css +0 -0
  372. /package/theme/styles/{themes/library → variants}/color/indigo.css +0 -0
  373. /package/theme/styles/{themes/library → variants}/color/lime.css +0 -0
  374. /package/theme/styles/{themes/library → variants}/color/orange.css +0 -0
  375. /package/theme/styles/{themes/library → variants}/color/pink.css +0 -0
  376. /package/theme/styles/{themes/library → variants}/color/purple.css +0 -0
  377. /package/theme/styles/{themes/library → variants}/color/red.css +0 -0
  378. /package/theme/styles/{themes/library → variants}/color/rose.css +0 -0
  379. /package/theme/styles/{themes/library → variants}/color/sky.css +0 -0
  380. /package/theme/styles/{themes/library → variants}/color/teal.css +0 -0
  381. /package/theme/styles/{themes/library → variants}/color/violet.css +0 -0
  382. /package/theme/styles/{themes/library → variants}/color/yellow.css +0 -0
  383. /package/theme/styles/{themes → variants}/mode/dark.css +0 -0
  384. /package/theme/styles/{themes → variants}/mode/index.css +0 -0
  385. /package/theme/styles/{themes → variants}/mode/light.css +0 -0
  386. /package/theme/styles/{themes/library → variants}/style/brutal.css +0 -0
  387. /package/theme/styles/{themes/library → variants}/style/default.css +0 -0
  388. /package/theme/styles/{themes/library → variants}/style/index.css +0 -0
  389. /package/theme/styles/{themes/library → variants}/style/sharp.css +0 -0
  390. /package/theme/styles/{themes/library → variants}/style/soft.css +0 -0
  391. /package/types/{ojiepermana-angular-ui-component-accordion.d.ts → ojiepermana-angular-component-accordion.d.ts} +0 -0
  392. /package/types/{ojiepermana-angular-ui-component-alert-dialog.d.ts → ojiepermana-angular-component-alert-dialog.d.ts} +0 -0
  393. /package/types/{ojiepermana-angular-ui-component-alert.d.ts → ojiepermana-angular-component-alert.d.ts} +0 -0
  394. /package/types/{ojiepermana-angular-ui-component-aspect-ratio.d.ts → ojiepermana-angular-component-aspect-ratio.d.ts} +0 -0
  395. /package/types/{ojiepermana-angular-ui-component-avatar.d.ts → ojiepermana-angular-component-avatar.d.ts} +0 -0
  396. /package/types/{ojiepermana-angular-ui-component-badge.d.ts → ojiepermana-angular-component-badge.d.ts} +0 -0
  397. /package/types/{ojiepermana-angular-ui-component-breadcrumb.d.ts → ojiepermana-angular-component-breadcrumb.d.ts} +0 -0
  398. /package/types/{ojiepermana-angular-ui-component-button-group.d.ts → ojiepermana-angular-component-button-group.d.ts} +0 -0
  399. /package/types/{ojiepermana-angular-ui-component-button.d.ts → ojiepermana-angular-component-button.d.ts} +0 -0
  400. /package/types/{ojiepermana-angular-ui-component-calendar.d.ts → ojiepermana-angular-component-calendar.d.ts} +0 -0
  401. /package/types/{ojiepermana-angular-ui-component-card.d.ts → ojiepermana-angular-component-card.d.ts} +0 -0
  402. /package/types/{ojiepermana-angular-ui-component-carousel.d.ts → ojiepermana-angular-component-carousel.d.ts} +0 -0
  403. /package/types/{ojiepermana-angular-ui-component-chart-area.d.ts → ojiepermana-angular-component-chart-area.d.ts} +0 -0
  404. /package/types/{ojiepermana-angular-ui-component-chart-bar.d.ts → ojiepermana-angular-component-chart-bar.d.ts} +0 -0
  405. /package/types/{ojiepermana-angular-ui-component-chart-line.d.ts → ojiepermana-angular-component-chart-line.d.ts} +0 -0
  406. /package/types/{ojiepermana-angular-ui-component-chart-pie.d.ts → ojiepermana-angular-component-chart-pie.d.ts} +0 -0
  407. /package/types/{ojiepermana-angular-ui-component-chart-radar.d.ts → ojiepermana-angular-component-chart-radar.d.ts} +0 -0
  408. /package/types/{ojiepermana-angular-ui-component-chart-radial.d.ts → ojiepermana-angular-component-chart-radial.d.ts} +0 -0
  409. /package/types/{ojiepermana-angular-ui-component-chart-scatter.d.ts → ojiepermana-angular-component-chart-scatter.d.ts} +0 -0
  410. /package/types/{ojiepermana-angular-ui-component-checkbox.d.ts → ojiepermana-angular-component-checkbox.d.ts} +0 -0
  411. /package/types/{ojiepermana-angular-ui-component-collapsible.d.ts → ojiepermana-angular-component-collapsible.d.ts} +0 -0
  412. /package/types/{ojiepermana-angular-ui-component-combobox.d.ts → ojiepermana-angular-component-combobox.d.ts} +0 -0
  413. /package/types/{ojiepermana-angular-ui-component-command.d.ts → ojiepermana-angular-component-command.d.ts} +0 -0
  414. /package/types/{ojiepermana-angular-ui-component-context-menu.d.ts → ojiepermana-angular-component-context-menu.d.ts} +0 -0
  415. /package/types/{ojiepermana-angular-ui-component-date-picker.d.ts → ojiepermana-angular-component-date-picker.d.ts} +0 -0
  416. /package/types/{ojiepermana-angular-ui-component-dialog.d.ts → ojiepermana-angular-component-dialog.d.ts} +0 -0
  417. /package/types/{ojiepermana-angular-ui-component-drawer.d.ts → ojiepermana-angular-component-drawer.d.ts} +0 -0
  418. /package/types/{ojiepermana-angular-ui-component-dropdown-menu.d.ts → ojiepermana-angular-component-dropdown-menu.d.ts} +0 -0
  419. /package/types/{ojiepermana-angular-ui-component-form.d.ts → ojiepermana-angular-component-form.d.ts} +0 -0
  420. /package/types/{ojiepermana-angular-ui-component-input-group.d.ts → ojiepermana-angular-component-input-group.d.ts} +0 -0
  421. /package/types/{ojiepermana-angular-ui-component-input.d.ts → ojiepermana-angular-component-input.d.ts} +0 -0
  422. /package/types/{ojiepermana-angular-ui-component-item.d.ts → ojiepermana-angular-component-item.d.ts} +0 -0
  423. /package/types/{ojiepermana-angular-ui-component-label.d.ts → ojiepermana-angular-component-label.d.ts} +0 -0
  424. /package/types/{ojiepermana-angular-ui-component-pagination.d.ts → ojiepermana-angular-component-pagination.d.ts} +0 -0
  425. /package/types/{ojiepermana-angular-ui-component-popover.d.ts → ojiepermana-angular-component-popover.d.ts} +0 -0
  426. /package/types/{ojiepermana-angular-ui-component-progress.d.ts → ojiepermana-angular-component-progress.d.ts} +0 -0
  427. /package/types/{ojiepermana-angular-ui-component-radio.d.ts → ojiepermana-angular-component-radio.d.ts} +0 -0
  428. /package/types/{ojiepermana-angular-ui-component-scroll-area.d.ts → ojiepermana-angular-component-scroll-area.d.ts} +0 -0
  429. /package/types/{ojiepermana-angular-ui-component-select.d.ts → ojiepermana-angular-component-select.d.ts} +0 -0
  430. /package/types/{ojiepermana-angular-ui-component-separator.d.ts → ojiepermana-angular-component-separator.d.ts} +0 -0
  431. /package/types/{ojiepermana-angular-ui-component-sheet.d.ts → ojiepermana-angular-component-sheet.d.ts} +0 -0
  432. /package/types/{ojiepermana-angular-ui-component-skeleton.d.ts → ojiepermana-angular-component-skeleton.d.ts} +0 -0
  433. /package/types/{ojiepermana-angular-ui-component-slider.d.ts → ojiepermana-angular-component-slider.d.ts} +0 -0
  434. /package/types/{ojiepermana-angular-ui-component-switch.d.ts → ojiepermana-angular-component-switch.d.ts} +0 -0
  435. /package/types/{ojiepermana-angular-ui-component-table.d.ts → ojiepermana-angular-component-table.d.ts} +0 -0
  436. /package/types/{ojiepermana-angular-ui-component-tabs.d.ts → ojiepermana-angular-component-tabs.d.ts} +0 -0
  437. /package/types/{ojiepermana-angular-ui-component-textarea.d.ts → ojiepermana-angular-component-textarea.d.ts} +0 -0
  438. /package/types/{ojiepermana-angular-ui-component-toast.d.ts → ojiepermana-angular-component-toast.d.ts} +0 -0
  439. /package/types/{ojiepermana-angular-ui-component-tooltip.d.ts → ojiepermana-angular-component-tooltip.d.ts} +0 -0
  440. /package/types/{ojiepermana-angular-ui-component-utils.d.ts → ojiepermana-angular-component-utils.d.ts} +0 -0
  441. /package/types/{ojiepermana-angular-layout-theme.d.ts → ojiepermana-angular-layout-component.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ojiepermana-angular-layout-component.mjs","sources":["../../../projects/angular/layout/component/src/lib/theme-panel.component.ts","../../../projects/angular/layout/component/ojiepermana-angular-layout-component.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n InjectionToken,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n type Signal,\n} from '@angular/core';\nimport { DomSanitizer, type SafeHtml } from '@angular/platform-browser';\nimport { ButtonComponent } from '@ojiepermana/angular/component/button';\nimport { cn } from '@ojiepermana/angular/component/utils';\n\nexport type ThemePanelColor =\n | 'base'\n | 'red'\n | 'orange'\n | 'amber'\n | 'yellow'\n | 'lime'\n | 'green'\n | 'emerald'\n | 'teal'\n | 'cyan'\n | 'sky'\n | 'blue'\n | 'indigo'\n | 'violet'\n | 'purple'\n | 'fuchsia'\n | 'pink'\n | 'rose';\n\nexport type ThemePanelMode = 'light' | 'dark' | 'system';\n\nexport type ThemePanelStyle = 'default' | 'sharp' | 'brutal' | 'soft';\n\nexport type ThemePanelLayoutMode = 'vertical' | 'horizontal' | 'empty';\n\nexport type ThemePanelLayoutWidth = 'full' | 'container' | 'wide';\n\nexport interface ThemePanelThemePort {\n readonly color: Signal<ThemePanelColor>;\n readonly scheme: Signal<ThemePanelMode>;\n readonly style: Signal<ThemePanelStyle>;\n setColor(color: ThemePanelColor): void;\n setScheme(mode: ThemePanelMode): void;\n setStyle(style: ThemePanelStyle): void;\n}\n\nexport interface ThemePanelLayoutPort {\n readonly mode: Signal<ThemePanelLayoutMode>;\n readonly width: Signal<ThemePanelLayoutWidth>;\n setMode(mode: ThemePanelLayoutMode): void;\n setWidth(width: ThemePanelLayoutWidth): void;\n}\n\nexport const THEME_PANEL_THEME_PORT = new InjectionToken<ThemePanelThemePort>('THEME_PANEL_THEME_PORT');\n\nexport const THEME_PANEL_LAYOUT_PORT = new InjectionToken<ThemePanelLayoutPort>('THEME_PANEL_LAYOUT_PORT');\n\ntype ThemePanelIconName =\n | 'sun'\n | 'moon'\n | 'system'\n | 'default-style'\n | 'sharp-style'\n | 'brutal-style'\n | 'soft-style'\n | 'vertical-layout'\n | 'horizontal-layout'\n | 'empty-layout'\n | 'full-width'\n | 'container-width'\n | 'wide-width';\n\ninterface ThemePanelOption<T extends string> {\n readonly value: T;\n readonly label: string;\n readonly icon?: ThemePanelIconName;\n readonly swatchClass?: string;\n}\n\nconst THEME_COLOR_OPTIONS = [\n { value: 'base', label: 'Base', swatchClass: 'bg-zinc-800' },\n { value: 'red', label: 'Red', swatchClass: 'bg-red-500' },\n { value: 'orange', label: 'Orange', swatchClass: 'bg-orange-500' },\n { value: 'amber', label: 'Amber', swatchClass: 'bg-amber-400' },\n { value: 'yellow', label: 'Yellow', swatchClass: 'bg-yellow-400' },\n { value: 'lime', label: 'Lime', swatchClass: 'bg-lime-400' },\n { value: 'green', label: 'Green', swatchClass: 'bg-green-600' },\n { value: 'emerald', label: 'Emerald', swatchClass: 'bg-emerald-600' },\n { value: 'teal', label: 'Teal', swatchClass: 'bg-teal-600' },\n { value: 'cyan', label: 'Cyan', swatchClass: 'bg-cyan-600' },\n { value: 'sky', label: 'Sky', swatchClass: 'bg-sky-600' },\n { value: 'blue', label: 'Blue', swatchClass: 'bg-blue-500' },\n { value: 'indigo', label: 'Indigo', swatchClass: 'bg-indigo-500' },\n { value: 'violet', label: 'Violet', swatchClass: 'bg-violet-500' },\n { value: 'purple', label: 'Purple', swatchClass: 'bg-purple-500' },\n { value: 'fuchsia', label: 'Fuchsia', swatchClass: 'bg-fuchsia-600' },\n { value: 'pink', label: 'Pink', swatchClass: 'bg-pink-600' },\n { value: 'rose', label: 'Rose', swatchClass: 'bg-rose-500' },\n] as const satisfies readonly ThemePanelOption<ThemePanelColor>[];\n\nconst THEME_MODE_OPTIONS = [\n { value: 'light', label: 'Light', icon: 'sun' },\n { value: 'dark', label: 'Dark', icon: 'moon' },\n { value: 'system', label: 'System', icon: 'system' },\n] as const satisfies readonly ThemePanelOption<ThemePanelMode>[];\n\nconst THEME_STYLE_OPTIONS = [\n { value: 'default', label: 'Default', icon: 'default-style' },\n { value: 'sharp', label: 'Sharp', icon: 'sharp-style' },\n { value: 'brutal', label: 'Brutal', icon: 'brutal-style' },\n { value: 'soft', label: 'Soft', icon: 'soft-style' },\n] as const satisfies readonly ThemePanelOption<ThemePanelStyle>[];\n\nconst LAYOUT_MODE_OPTIONS = [\n { value: 'vertical', label: 'Vertical', icon: 'vertical-layout' },\n { value: 'horizontal', label: 'Horizontal', icon: 'horizontal-layout' },\n { value: 'empty', label: 'Empty', icon: 'empty-layout' },\n] as const satisfies readonly ThemePanelOption<ThemePanelLayoutMode>[];\n\nconst LAYOUT_WIDTH_OPTIONS = [\n { value: 'full', label: 'Full', icon: 'full-width' },\n { value: 'container', label: 'Container', icon: 'container-width' },\n { value: 'wide', label: 'Wide', icon: 'wide-width' },\n] as const satisfies readonly ThemePanelOption<ThemePanelLayoutWidth>[];\n\n@Component({\n selector: 'ui-theme-panel',\n imports: [ButtonComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n },\n template: `\n <div class=\"flex flex-col gap-4 p-4\">\n @if (hasUserHeader()) {\n <header class=\"flex items-center gap-3 px-1 pt-1\">\n <span class=\"flex size-14 items-center justify-center rounded-full bg-primary/10 text-primary\">\n <span\n class=\"flex size-11 items-center justify-center rounded-full bg-primary text-xs font-semibold tracking-[0.22em] text-primary-foreground\">\n {{ resolvedUserInitials() }}\n </span>\n </span>\n\n <div class=\"min-w-0 flex-1\">\n <h2 class=\"truncate text-[1.05rem] font-semibold leading-none tracking-tight text-foreground\">\n {{ userName() }}\n </h2>\n @if (userSubtitle(); as subtitle) {\n <p class=\"mt-1 text-sm leading-none text-muted-foreground\">{{ subtitle }}</p>\n }\n </div>\n </header>\n } @else {\n <header class=\"space-y-1 px-1 pt-1\">\n <h2 class=\"text-base font-semibold tracking-tight text-foreground\">{{ title() }}</h2>\n @if (description(); as text) {\n <p class=\"text-sm leading-6 text-muted-foreground\">{{ text }}</p>\n }\n </header>\n }\n\n <div class=\"grid gap-4\">\n <section data-setting=\"theme-mode\" [attr.data-current]=\"currentThemeMode()\" class=\"space-y-2\">\n <div class=\"px-1\">\n <p [class]=\"sectionEyebrowClasses()\">Mode</p>\n </div>\n\n <div class=\"rounded-(--layout-frame-radius) bg-muted/65 p-0.5\">\n <div class=\"grid grid-cols-3 gap-1\" role=\"group\" aria-label=\"Theme mode\">\n @for (option of themeModeOptions; track option.value) {\n <button\n type=\"button\"\n ui-button\n size=\"sm\"\n variant=\"ghost\"\n data-setting-option=\"theme-mode\"\n [attr.data-value]=\"option.value\"\n [attr.aria-pressed]=\"currentThemeMode() === option.value\"\n [class]=\"segmentedOptionClasses(currentThemeMode() === option.value)\"\n (click)=\"setThemeMode(option.value)\">\n <span class=\"inline-flex items-center gap-2.5\">\n <span\n aria-hidden=\"true\"\n [class]=\"optionIconClasses(currentThemeMode() === option.value)\"\n [innerHTML]=\"iconSvg(option.icon!)\"></span>\n <span class=\"text-sm font-semibold leading-none\">{{ option.label }}</span>\n </span>\n </button>\n }\n </div>\n </div>\n </section>\n\n <section data-setting=\"theme-color\" [attr.data-current]=\"currentThemeColor()\" class=\"space-y-2\">\n <div class=\"flex items-center justify-between gap-3 px-1\">\n <p [class]=\"sectionEyebrowClasses()\">Color</p>\n <p class=\"text-xs font-semibold text-muted-foreground\">{{ currentThemeColorLabel() }}</p>\n </div>\n\n <div class=\"rounded-(--layout-frame-radius) bg-muted/65 p-1\">\n <div class=\"grid grid-cols-6 justify-items-center gap-1\" role=\"group\" aria-label=\"Theme color\">\n @for (option of themeColorOptions; track option.value) {\n <button\n type=\"button\"\n ui-button\n size=\"icon\"\n variant=\"ghost\"\n data-setting-option=\"theme-color\"\n [attr.data-value]=\"option.value\"\n [attr.aria-label]=\"'Theme color ' + option.label\"\n [attr.aria-pressed]=\"currentThemeColor() === option.value\"\n [class]=\"swatchButtonClasses(currentThemeColor() === option.value)\"\n (click)=\"setThemeColor(option.value)\">\n <span\n aria-hidden=\"true\"\n [class]=\"colorSwatchClasses(option.swatchClass, currentThemeColor() === option.value)\"></span>\n <span class=\"sr-only\">{{ option.label }}</span>\n </button>\n }\n </div>\n </div>\n </section>\n\n <section data-setting=\"theme-style\" [attr.data-current]=\"currentThemeStyle()\" class=\"space-y-2\">\n <div class=\"px-1\">\n <p [class]=\"sectionEyebrowClasses()\">Style</p>\n </div>\n\n <div class=\"rounded-(--layout-frame-radius) bg-muted/65 p-0.5\">\n <div class=\"grid grid-cols-2 gap-1 sm:grid-cols-4\" role=\"group\" aria-label=\"Theme style\">\n @for (option of themeStyleOptions; track option.value) {\n <button\n type=\"button\"\n ui-button\n size=\"sm\"\n variant=\"ghost\"\n data-setting-option=\"theme-style\"\n [attr.data-value]=\"option.value\"\n [attr.aria-pressed]=\"currentThemeStyle() === option.value\"\n [class]=\"segmentedOptionClasses(currentThemeStyle() === option.value)\"\n (click)=\"setThemeStyle(option.value)\">\n <span class=\"inline-flex items-center gap-2.5\">\n <span\n aria-hidden=\"true\"\n [class]=\"optionIconClasses(currentThemeStyle() === option.value)\"\n [innerHTML]=\"iconSvg(option.icon!)\"></span>\n <span class=\"text-sm font-semibold leading-none\">{{ option.label }}</span>\n </span>\n </button>\n }\n </div>\n </div>\n </section>\n\n <section data-setting=\"layout-mode\" [attr.data-current]=\"currentLayoutMode()\" class=\"space-y-2\">\n <div class=\"px-1\">\n <p [class]=\"sectionEyebrowClasses()\">Layout</p>\n </div>\n\n <div class=\"rounded-(--layout-frame-radius) bg-muted/65 p-0.5\">\n <div class=\"grid grid-cols-3 gap-1\" role=\"group\" aria-label=\"Layout mode\">\n @for (option of layoutModeOptions; track option.value) {\n <button\n type=\"button\"\n ui-button\n size=\"sm\"\n variant=\"ghost\"\n data-setting-option=\"layout-mode\"\n [attr.data-value]=\"option.value\"\n [attr.aria-pressed]=\"currentLayoutMode() === option.value\"\n [class]=\"segmentedOptionClasses(currentLayoutMode() === option.value)\"\n (click)=\"setLayoutMode(option.value)\">\n <span class=\"inline-flex items-center gap-2.5\">\n <span\n aria-hidden=\"true\"\n [class]=\"optionIconClasses(currentLayoutMode() === option.value)\"\n [innerHTML]=\"iconSvg(option.icon!)\"></span>\n <span class=\"text-sm font-semibold leading-none\">{{ option.label }}</span>\n </span>\n </button>\n }\n </div>\n </div>\n </section>\n\n <section data-setting=\"layout-width\" [attr.data-current]=\"currentLayoutWidth()\" class=\"space-y-2\">\n <div class=\"px-1\">\n <p [class]=\"sectionEyebrowClasses()\">Width</p>\n </div>\n\n <div class=\"rounded-(--layout-frame-radius) bg-muted/65 p-0.5\">\n <div class=\"grid grid-cols-3 gap-1\" role=\"group\" aria-label=\"Layout width\">\n @for (option of layoutWidthOptions; track option.value) {\n <button\n type=\"button\"\n ui-button\n size=\"sm\"\n variant=\"ghost\"\n data-setting-option=\"layout-width\"\n [attr.data-value]=\"option.value\"\n [attr.aria-pressed]=\"currentLayoutWidth() === option.value\"\n [class]=\"segmentedOptionClasses(currentLayoutWidth() === option.value)\"\n (click)=\"setLayoutWidth(option.value)\">\n <span class=\"inline-flex items-center gap-2.5\">\n <span\n aria-hidden=\"true\"\n [class]=\"optionIconClasses(currentLayoutWidth() === option.value)\"\n [innerHTML]=\"iconSvg(option.icon!)\"></span>\n <span class=\"text-sm font-semibold leading-none\">{{ option.label }}</span>\n </span>\n </button>\n }\n </div>\n </div>\n </section>\n </div>\n </div>\n `,\n})\nexport class ThemePanelComponent {\n private readonly sanitizer = inject(DomSanitizer);\n private readonly themePort = inject(THEME_PANEL_THEME_PORT, { optional: true });\n private readonly layoutPort = inject(THEME_PANEL_LAYOUT_PORT, { optional: true });\n\n readonly connected = input<boolean>(true);\n readonly class = input<string>('');\n readonly title = input<string>('Theme panel');\n readonly description = input<string>('');\n readonly userName = input<string>('');\n readonly userSubtitle = input<string>('');\n readonly userInitials = input<string>('');\n readonly themeColor = input<ThemePanelColor>('base');\n readonly themeMode = input<ThemePanelMode>('light');\n readonly themeStyle = input<ThemePanelStyle>('default');\n readonly layoutMode = input<ThemePanelLayoutMode>('vertical');\n readonly layoutWidth = input<ThemePanelLayoutWidth>('container');\n\n readonly themeColorChange = output<ThemePanelColor>();\n readonly themeModeChange = output<ThemePanelMode>();\n readonly themeStyleChange = output<ThemePanelStyle>();\n readonly layoutModeChange = output<ThemePanelLayoutMode>();\n readonly layoutWidthChange = output<ThemePanelLayoutWidth>();\n\n protected readonly currentThemeColor = signal<ThemePanelColor>(this.themeColor());\n protected readonly currentThemeMode = signal<ThemePanelMode>(this.themeMode());\n protected readonly currentThemeStyle = signal<ThemePanelStyle>(this.themeStyle());\n protected readonly currentLayoutMode = signal<ThemePanelLayoutMode>(this.layoutMode());\n protected readonly currentLayoutWidth = signal<ThemePanelLayoutWidth>(this.layoutWidth());\n\n protected readonly themeColorOptions = THEME_COLOR_OPTIONS;\n protected readonly themeModeOptions = THEME_MODE_OPTIONS;\n protected readonly themeStyleOptions = THEME_STYLE_OPTIONS;\n protected readonly layoutModeOptions = LAYOUT_MODE_OPTIONS;\n protected readonly layoutWidthOptions = LAYOUT_WIDTH_OPTIONS;\n\n protected readonly hostClasses = computed(() =>\n cn('block overflow-hidden rounded-lg border border-border/70 bg-card text-card-foreground shadow-sm', this.class()),\n );\n protected readonly hasUserHeader = computed(() => !!this.userName().trim() || !!this.userSubtitle().trim());\n protected readonly resolvedUserInitials = computed(\n () => this.userInitials().trim() || this.toInitials(this.userName() || this.title()),\n );\n protected readonly currentThemeColorLabel = computed(\n () => this.themeColorOptions.find((option) => option.value === this.currentThemeColor())?.label ?? '',\n );\n\n constructor() {\n effect(() => {\n this.currentThemeColor.set(this.connected() && this.themePort ? this.themePort.color() : this.themeColor());\n });\n effect(() => {\n this.currentThemeMode.set(this.connected() && this.themePort ? this.themePort.scheme() : this.themeMode());\n });\n effect(() => {\n this.currentThemeStyle.set(this.connected() && this.themePort ? this.themePort.style() : this.themeStyle());\n });\n effect(() => {\n this.currentLayoutMode.set(this.connected() && this.layoutPort ? this.layoutPort.mode() : this.layoutMode());\n });\n effect(() => {\n this.currentLayoutWidth.set(this.connected() && this.layoutPort ? this.layoutPort.width() : this.layoutWidth());\n });\n }\n\n protected setThemeColor(color: ThemePanelColor): void {\n this.currentThemeColor.set(color);\n this.themePort?.setColor(color);\n this.themeColorChange.emit(color);\n }\n\n protected setThemeMode(mode: ThemePanelMode): void {\n this.currentThemeMode.set(mode);\n this.themePort?.setScheme(mode);\n this.themeModeChange.emit(mode);\n }\n\n protected setThemeStyle(style: ThemePanelStyle): void {\n this.currentThemeStyle.set(style);\n this.themePort?.setStyle(style);\n this.themeStyleChange.emit(style);\n }\n\n protected setLayoutMode(mode: ThemePanelLayoutMode): void {\n this.currentLayoutMode.set(mode);\n this.layoutPort?.setMode(mode);\n this.layoutModeChange.emit(mode);\n }\n\n protected setLayoutWidth(width: ThemePanelLayoutWidth): void {\n this.currentLayoutWidth.set(width);\n this.layoutPort?.setWidth(width);\n this.layoutWidthChange.emit(width);\n }\n\n protected sectionEyebrowClasses(): string {\n return 'text-[0.72rem] font-semibold uppercase tracking-[0.22em] text-muted-foreground';\n }\n\n protected segmentedOptionClasses(active: boolean): string {\n return cn(\n 'rounded-[calc(var(--layout-frame-radius)-2px)] px-3',\n active\n ? 'border border-border/70 bg-background shadow-sm hover:bg-background'\n : 'text-muted-foreground hover:bg-background/70 hover:text-foreground',\n );\n }\n\n protected swatchButtonClasses(active: boolean): string {\n return cn(\n 'size-9 rounded-full p-0',\n active\n ? 'border border-border/70 bg-background shadow-sm hover:bg-background'\n : 'border border-transparent hover:bg-background/70',\n );\n }\n\n protected optionIconClasses(active: boolean): string {\n return cn(\n 'inline-flex size-4 shrink-0 items-center justify-center [&_svg]:size-4',\n active ? 'text-foreground' : 'text-muted-foreground',\n );\n }\n\n protected colorSwatchClasses(swatchClass: string | undefined, isActive: boolean): string {\n return cn(\n 'size-4 rounded-full border border-black/10 shadow-sm',\n swatchClass,\n isActive ? 'ring-2 ring-ring ring-offset-2 ring-offset-background' : '',\n );\n }\n\n protected iconSvg(name: ThemePanelIconName): SafeHtml {\n return this.sanitizer.bypassSecurityTrustHtml(this.rawIconSvg(name));\n }\n\n private rawIconSvg(name: ThemePanelIconName): string {\n switch (name) {\n case 'sun':\n return '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"4\"></circle><path d=\"M12 2.5v2.2\"></path><path d=\"M12 19.3v2.2\"></path><path d=\"M4.93 4.93 6.5 6.5\"></path><path d=\"M17.5 17.5 19.07 19.07\"></path><path d=\"M2.5 12h2.2\"></path><path d=\"M19.3 12h2.2\"></path><path d=\"M4.93 19.07 6.5 17.5\"></path><path d=\"M17.5 6.5 19.07 4.93\"></path></svg>';\n case 'moon':\n return '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20.4 14.8A8.8 8.8 0 1 1 9.2 3.6a7.2 7.2 0 0 0 11.2 11.2Z\"></path></svg>';\n case 'system':\n return '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3.5\" y=\"4.5\" width=\"17\" height=\"11.5\" rx=\"1.8\"></rect><path d=\"M9 19.5h6\"></path><path d=\"M12 16v3.5\"></path></svg>';\n case 'default-style':\n return '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"5\" y=\"5\" width=\"14\" height=\"14\" rx=\"4\"></rect></svg>';\n case 'sharp-style':\n return '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"5\" y=\"5\" width=\"14\" height=\"14\" rx=\"1\"></rect></svg>';\n case 'brutal-style':\n return '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M5 7.5h14\"></path><path d=\"M5 12h14\"></path><path d=\"M5 16.5h14\"></path></svg>';\n case 'soft-style':\n return '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M7.5 9A4.5 4.5 0 0 1 12 4.5h1A4.5 4.5 0 0 1 17.5 9v1A4.5 4.5 0 0 1 13 14.5h-1A4.5 4.5 0 0 1 7.5 10Z\"></path><path d=\"M6.5 15.5c1.3 2 3.2 3 5.5 3s4.2-1 5.5-3\"></path></svg>';\n case 'vertical-layout':\n return '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"4\" y=\"5\" width=\"16\" height=\"14\" rx=\"2\"></rect><path d=\"M9 5v14\"></path></svg>';\n case 'horizontal-layout':\n return '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"4\" y=\"5\" width=\"16\" height=\"14\" rx=\"2\"></rect><path d=\"M4 10h16\"></path></svg>';\n case 'empty-layout':\n return '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"4.5\" y=\"5.5\" width=\"15\" height=\"13\" rx=\"2\"></rect></svg>';\n case 'full-width':\n return '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M4 8V5h3\"></path><path d=\"M20 8V5h-3\"></path><path d=\"M4 16v3h3\"></path><path d=\"M20 16v3h-3\"></path><path d=\"M8 5H4\"></path><path d=\"M20 5h-4\"></path><path d=\"M8 19H4\"></path><path d=\"M20 19h-4\"></path></svg>';\n case 'container-width':\n return '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"4\" y=\"6\" width=\"16\" height=\"12\" rx=\"2\"></rect><path d=\"M9 9.5h6\"></path><path d=\"M9 14.5h6\"></path></svg>';\n case 'wide-width':\n return '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"6\" width=\"18\" height=\"12\" rx=\"2\"></rect><path d=\"M7 9.5h10\"></path><path d=\"M7 14.5h10\"></path></svg>';\n }\n }\n\n private toInitials(value: string): string {\n const words = value\n .split(/\\s+/)\n .map((item) => item.trim())\n .filter(Boolean)\n .slice(0, 2);\n\n if (!words.length) {\n return 'UI';\n }\n\n return words.map((word) => word[0]?.toUpperCase() ?? '').join('');\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import * as i0 from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import { RouterOutlet } from '@angular/router';
4
+
5
+ /**
6
+ * Empty layout — full-viewport, flex-centered main.
7
+ *
8
+ * Cocok untuk halaman login / error / onboarding (pola shadcn `login-05`).
9
+ * Konten dirender lewat `<router-outlet>`; consumer men-style card / form
10
+ * milik halaman route sendiri.
11
+ *
12
+ * Markup:
13
+ * ```html
14
+ * <empty>
15
+ * <!-- router-outlet dirender oleh komponen -->
16
+ * </empty>
17
+ * ```
18
+ */
19
+ class EmptyLayoutComponent {
20
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: EmptyLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
21
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.14", type: EmptyLayoutComponent, isStandalone: true, selector: "empty", host: { classAttribute: "flex min-h-dvh w-full items-center justify-center bg-background p-6 text-foreground" }, ngImport: i0, template: `
22
+ <main class="w-full max-w-sm">
23
+ <router-outlet />
24
+ </main>
25
+ `, isInline: true, dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
26
+ }
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: EmptyLayoutComponent, decorators: [{
28
+ type: Component,
29
+ args: [{
30
+ selector: 'empty',
31
+ changeDetection: ChangeDetectionStrategy.OnPush,
32
+ imports: [RouterOutlet],
33
+ host: {
34
+ class: 'flex min-h-dvh w-full items-center justify-center bg-background p-6 text-foreground',
35
+ },
36
+ template: `
37
+ <main class="w-full max-w-sm">
38
+ <router-outlet />
39
+ </main>
40
+ `,
41
+ }]
42
+ }] });
43
+
44
+ /**
45
+ * Generated bundle index. Do not edit.
46
+ */
47
+
48
+ export { EmptyLayoutComponent };
49
+ //# sourceMappingURL=ojiepermana-angular-layout-empty.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ojiepermana-angular-layout-empty.mjs","sources":["../../../projects/angular/layout/empty/src/lib/empty.component.ts","../../../projects/angular/layout/empty/ojiepermana-angular-layout-empty.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\n\n/**\n * Empty layout — full-viewport, flex-centered main.\n *\n * Cocok untuk halaman login / error / onboarding (pola shadcn `login-05`).\n * Konten dirender lewat `<router-outlet>`; consumer men-style card / form\n * milik halaman route sendiri.\n *\n * Markup:\n * ```html\n * <empty>\n * <!-- router-outlet dirender oleh komponen -->\n * </empty>\n * ```\n */\n@Component({\n selector: 'empty',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [RouterOutlet],\n host: {\n class: 'flex min-h-dvh w-full items-center justify-center bg-background p-6 text-foreground',\n },\n template: `\n <main class=\"w-full max-w-sm\">\n <router-outlet />\n </main>\n `,\n})\nexport class EmptyLayoutComponent {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;AAGA;;;;;;;;;;;;;AAaG;MAcU,oBAAoB,CAAA;wGAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,OAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,qFAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EANrB;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EARS,YAAY,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAUX,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAbhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,OAAO;oBACjB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,qFAAqF;AAC7F,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;AAIT,EAAA,CAAA;AACF,iBAAA;;;AC7BD;;AAEG;;;;"}
@@ -0,0 +1,119 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, input, computed, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import { RouterOutlet } from '@angular/router';
4
+ import { LayoutService } from '@ojiepermana/angular/layout/services';
5
+ import { TopbarComponent } from '@ojiepermana/angular/navigation/topbar';
6
+ import { ThemeService } from '@ojiepermana/angular/theme';
7
+
8
+ /**
9
+ * Horizontal layout — themed topbar + main (scrollable).
10
+ *
11
+ * Data navigasi diambil dari `NavigationService`.
12
+ * Consumer app dapat memproyeksikan brand kiri dan profile kanan.
13
+ *
14
+ * Markup:
15
+ * ```html
16
+ * <horizontal>
17
+ * <a ui-layout-brand>Brand</a>
18
+ * <button ui-layout-profile type="button">Profile</button>
19
+ * </horizontal>
20
+ * ```
21
+ */
22
+ class HorizontalLayoutComponent {
23
+ layout = inject(LayoutService);
24
+ theme = inject(ThemeService);
25
+ topbarAppearance = input('default', ...(ngDevMode ? [{ debugName: "topbarAppearance" }] : /* istanbul ignore next */ []));
26
+ ariaLabel = input('Primary', ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
27
+ layoutWidth = this.layout.width;
28
+ themeStyle = this.theme.style;
29
+ isConstrainedWidth = computed(() => this.layoutWidth() !== 'full', ...(ngDevMode ? [{ debugName: "isConstrainedWidth" }] : /* istanbul ignore next */ []));
30
+ isWideWidth = computed(() => this.layoutWidth() === 'wide', ...(ngDevMode ? [{ debugName: "isWideWidth" }] : /* istanbul ignore next */ []));
31
+ shellBorderWidth = computed(() => (this.isConstrainedWidth() ? 'var(--border-width)' : null), ...(ngDevMode ? [{ debugName: "shellBorderWidth" }] : /* istanbul ignore next */ []));
32
+ dividerBorderWidth = computed(() => 'var(--border-width)', ...(ngDevMode ? [{ debugName: "dividerBorderWidth" }] : /* istanbul ignore next */ []));
33
+ hostClasses = computed(() => {
34
+ const classes = ['block', 'h-dvh', 'w-full', 'overflow-hidden', 'text-foreground'];
35
+ if (this.isConstrainedWidth()) {
36
+ classes.push('bg-primary/10', 'box-border', 'lg:p-8');
37
+ }
38
+ else {
39
+ classes.push('bg-background');
40
+ }
41
+ return classes.join(' ');
42
+ }, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
43
+ frameClasses = computed(() => {
44
+ const classes = ['flex', 'h-full', 'w-full', 'flex-col', 'overflow-hidden', 'bg-background'];
45
+ if (this.isConstrainedWidth()) {
46
+ classes.push('lg:border', 'lg:border-primary/30', 'lg:rounded-lg', 'lg:shadow-sm');
47
+ }
48
+ return classes.join(' ');
49
+ }, ...(ngDevMode ? [{ debugName: "frameClasses" }] : /* istanbul ignore next */ []));
50
+ mainClasses = computed(() => {
51
+ const classes = ['min-w-0', 'flex-1', 'overflow-auto'];
52
+ if (this.layoutWidth() === 'container') {
53
+ classes.push('mx-auto', 'w-full', 'max-w-7xl');
54
+ }
55
+ else if (this.isWideWidth()) {
56
+ classes.push('mx-auto', 'w-full', 'max-w-screen-2xl');
57
+ }
58
+ return classes.join(' ');
59
+ }, ...(ngDevMode ? [{ debugName: "mainClasses" }] : /* istanbul ignore next */ []));
60
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: HorizontalLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
61
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.14", type: HorizontalLayoutComponent, isStandalone: true, selector: "horizontal", inputs: { topbarAppearance: { classPropertyName: "topbarAppearance", publicName: "topbarAppearance", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "hostClasses()", "attr.data-layout-width": "layoutWidth()", "attr.data-style": "themeStyle()" } }, ngImport: i0, template: `
62
+ <div [class]="frameClasses()" [style.border-width]="shellBorderWidth()">
63
+ <topbar
64
+ class="w-full shrink-0 border-b border-border"
65
+ [style.border-bottom-width]="dividerBorderWidth()"
66
+ [appearance]="topbarAppearance()"
67
+ [ariaLabel]="ariaLabel()">
68
+ <div topbar-start class="flex min-w-0 items-center">
69
+ <ng-content select="[ui-layout-brand],[topbar-start]" />
70
+ </div>
71
+ <div topbar-end class="flex min-w-0 items-center">
72
+ <ng-content select="[ui-layout-profile],[topbar-end]" />
73
+ </div>
74
+ </topbar>
75
+ <main [class]="mainClasses()">
76
+ <router-outlet />
77
+ </main>
78
+ </div>
79
+ `, isInline: true, dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: TopbarComponent, selector: "topbar", inputs: ["items", "navigationId", "appearance", "ariaLabel", "class", "autoRegister", "showHamburger", "hamburgerLabel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
80
+ }
81
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: HorizontalLayoutComponent, decorators: [{
82
+ type: Component,
83
+ args: [{
84
+ selector: 'horizontal',
85
+ changeDetection: ChangeDetectionStrategy.OnPush,
86
+ imports: [RouterOutlet, TopbarComponent],
87
+ host: {
88
+ '[class]': 'hostClasses()',
89
+ '[attr.data-layout-width]': 'layoutWidth()',
90
+ '[attr.data-style]': 'themeStyle()',
91
+ },
92
+ template: `
93
+ <div [class]="frameClasses()" [style.border-width]="shellBorderWidth()">
94
+ <topbar
95
+ class="w-full shrink-0 border-b border-border"
96
+ [style.border-bottom-width]="dividerBorderWidth()"
97
+ [appearance]="topbarAppearance()"
98
+ [ariaLabel]="ariaLabel()">
99
+ <div topbar-start class="flex min-w-0 items-center">
100
+ <ng-content select="[ui-layout-brand],[topbar-start]" />
101
+ </div>
102
+ <div topbar-end class="flex min-w-0 items-center">
103
+ <ng-content select="[ui-layout-profile],[topbar-end]" />
104
+ </div>
105
+ </topbar>
106
+ <main [class]="mainClasses()">
107
+ <router-outlet />
108
+ </main>
109
+ </div>
110
+ `,
111
+ }]
112
+ }], propDecorators: { topbarAppearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "topbarAppearance", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }] } });
113
+
114
+ /**
115
+ * Generated bundle index. Do not edit.
116
+ */
117
+
118
+ export { HorizontalLayoutComponent };
119
+ //# sourceMappingURL=ojiepermana-angular-layout-horizontal.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ojiepermana-angular-layout-horizontal.mjs","sources":["../../../projects/angular/layout/horizontal/src/lib/horizontal.component.ts","../../../projects/angular/layout/horizontal/ojiepermana-angular-layout-horizontal.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\nimport { LayoutService } from '@ojiepermana/angular/layout/services';\nimport { TopbarComponent } from '@ojiepermana/angular/navigation/topbar';\nimport type { TopbarAppearance } from '@ojiepermana/angular/navigation/types';\nimport { ThemeService } from '@ojiepermana/angular/theme';\n\n/**\n * Horizontal layout — themed topbar + main (scrollable).\n *\n * Data navigasi diambil dari `NavigationService`.\n * Consumer app dapat memproyeksikan brand kiri dan profile kanan.\n *\n * Markup:\n * ```html\n * <horizontal>\n * <a ui-layout-brand>Brand</a>\n * <button ui-layout-profile type=\"button\">Profile</button>\n * </horizontal>\n * ```\n */\n@Component({\n selector: 'horizontal',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [RouterOutlet, TopbarComponent],\n host: {\n '[class]': 'hostClasses()',\n '[attr.data-layout-width]': 'layoutWidth()',\n '[attr.data-style]': 'themeStyle()',\n },\n template: `\n <div [class]=\"frameClasses()\" [style.border-width]=\"shellBorderWidth()\">\n <topbar\n class=\"w-full shrink-0 border-b border-border\"\n [style.border-bottom-width]=\"dividerBorderWidth()\"\n [appearance]=\"topbarAppearance()\"\n [ariaLabel]=\"ariaLabel()\">\n <div topbar-start class=\"flex min-w-0 items-center\">\n <ng-content select=\"[ui-layout-brand],[topbar-start]\" />\n </div>\n <div topbar-end class=\"flex min-w-0 items-center\">\n <ng-content select=\"[ui-layout-profile],[topbar-end]\" />\n </div>\n </topbar>\n <main [class]=\"mainClasses()\">\n <router-outlet />\n </main>\n </div>\n `,\n})\nexport class HorizontalLayoutComponent {\n private readonly layout = inject(LayoutService);\n private readonly theme = inject(ThemeService);\n\n readonly topbarAppearance = input<TopbarAppearance>('default');\n readonly ariaLabel = input<string>('Primary');\n\n protected readonly layoutWidth = this.layout.width;\n protected readonly themeStyle = this.theme.style;\n protected readonly isConstrainedWidth = computed(() => this.layoutWidth() !== 'full');\n protected readonly isWideWidth = computed(() => this.layoutWidth() === 'wide');\n protected readonly shellBorderWidth = computed(() => (this.isConstrainedWidth() ? 'var(--border-width)' : null));\n protected readonly dividerBorderWidth = computed(() => 'var(--border-width)');\n\n protected readonly hostClasses = computed(() => {\n const classes = ['block', 'h-dvh', 'w-full', 'overflow-hidden', 'text-foreground'];\n if (this.isConstrainedWidth()) {\n classes.push('bg-primary/10', 'box-border', 'lg:p-8');\n } else {\n classes.push('bg-background');\n }\n return classes.join(' ');\n });\n\n protected readonly frameClasses = computed(() => {\n const classes = ['flex', 'h-full', 'w-full', 'flex-col', 'overflow-hidden', 'bg-background'];\n if (this.isConstrainedWidth()) {\n classes.push('lg:border', 'lg:border-primary/30', 'lg:rounded-lg', 'lg:shadow-sm');\n }\n return classes.join(' ');\n });\n\n protected readonly mainClasses = computed(() => {\n const classes = ['min-w-0', 'flex-1', 'overflow-auto'];\n if (this.layoutWidth() === 'container') {\n classes.push('mx-auto', 'w-full', 'max-w-7xl');\n } else if (this.isWideWidth()) {\n classes.push('mx-auto', 'w-full', 'max-w-screen-2xl');\n }\n return classes.join(' ');\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { makeEnvironmentProviders, provideEnvironmentInitializer, inject } from '@angular/core';
2
+ import { THEME_PANEL_LAYOUT_PORT } from '@ojiepermana/angular/layout/component';
3
+ import { LayoutService } from '@ojiepermana/angular/layout/services';
4
+ import { MATERIAL_LAYOUT_CONFIG } from '@ojiepermana/angular/layout/token';
5
+
6
+ function provideMaterialLayout(config = {}) {
7
+ return makeEnvironmentProviders([
8
+ { provide: MATERIAL_LAYOUT_CONFIG, useValue: config },
9
+ { provide: THEME_PANEL_LAYOUT_PORT, useExisting: LayoutService },
10
+ provideEnvironmentInitializer(() => {
11
+ inject(LayoutService);
12
+ }),
13
+ ]);
14
+ }
15
+
16
+ /**
17
+ * Generated bundle index. Do not edit.
18
+ */
19
+
20
+ export { provideMaterialLayout };
21
+ //# sourceMappingURL=ojiepermana-angular-layout-provider.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ojiepermana-angular-layout-provider.mjs","sources":["../../../projects/angular/layout/provider/src/lib/layout.provider.ts","../../../projects/angular/layout/provider/ojiepermana-angular-layout-provider.ts"],"sourcesContent":["import {\n inject,\n type EnvironmentProviders,\n makeEnvironmentProviders,\n provideEnvironmentInitializer,\n} from '@angular/core';\nimport { THEME_PANEL_LAYOUT_PORT } from '@ojiepermana/angular/layout/component';\nimport { LayoutService } from '@ojiepermana/angular/layout/services';\nimport { MATERIAL_LAYOUT_CONFIG, type MaterialLayoutConfig } from '@ojiepermana/angular/layout/token';\n\nexport function provideMaterialLayout(config: MaterialLayoutConfig = {}): EnvironmentProviders {\n return makeEnvironmentProviders([\n { provide: MATERIAL_LAYOUT_CONFIG, useValue: config },\n { provide: THEME_PANEL_LAYOUT_PORT, useExisting: LayoutService },\n provideEnvironmentInitializer(() => {\n inject(LayoutService);\n }),\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;AAUM,SAAU,qBAAqB,CAAC,MAAA,GAA+B,EAAE,EAAA;AACrE,IAAA,OAAO,wBAAwB,CAAC;AAC9B,QAAA,EAAE,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,EAAE;AACrD,QAAA,EAAE,OAAO,EAAE,uBAAuB,EAAE,WAAW,EAAE,aAAa,EAAE;QAChE,6BAA6B,CAAC,MAAK;YACjC,MAAM,CAAC,aAAa,CAAC;AACvB,QAAA,CAAC,CAAC;AACH,KAAA,CAAC;AACJ;;AClBA;;AAEG;;;;"}
@@ -0,0 +1,114 @@
1
+ import { DOCUMENT } from '@angular/common';
2
+ import * as i0 from '@angular/core';
3
+ import { inject, signal, effect, Injectable } from '@angular/core';
4
+ import { LAYOUT_WIDTHS, MATERIAL_LAYOUT_CONFIG, DEFAULT_MATERIAL_LAYOUT_CONFIG, normalizeLayoutWidth, isLayoutMode } from '@ojiepermana/angular/layout/token';
5
+
6
+ class LayoutService {
7
+ document = inject(DOCUMENT);
8
+ config = this.resolveConfig();
9
+ _mode = signal(this.readPersistedMode() ?? this.config.defaultMode, ...(ngDevMode ? [{ debugName: "_mode" }] : /* istanbul ignore next */ []));
10
+ _width = signal(this.readPersistedWidth() ?? this.config.defaultWidth, ...(ngDevMode ? [{ debugName: "_width" }] : /* istanbul ignore next */ []));
11
+ mode = this._mode.asReadonly();
12
+ width = this._width.asReadonly();
13
+ constructor() {
14
+ effect(() => {
15
+ this.persistMode(this._mode());
16
+ });
17
+ effect(() => {
18
+ this.persistWidth(this._width());
19
+ });
20
+ }
21
+ setMode(mode) {
22
+ this._mode.set(mode);
23
+ }
24
+ toggleMode() {
25
+ this._mode.update((mode) => {
26
+ if (mode === 'vertical') {
27
+ return 'horizontal';
28
+ }
29
+ if (mode === 'horizontal') {
30
+ return 'vertical';
31
+ }
32
+ return 'vertical';
33
+ });
34
+ }
35
+ setWidth(width) {
36
+ this._width.set(width);
37
+ }
38
+ toggleWidth() {
39
+ this._width.update((width) => {
40
+ const currentIndex = LAYOUT_WIDTHS.indexOf(width);
41
+ return LAYOUT_WIDTHS[(currentIndex + 1) % LAYOUT_WIDTHS.length] ?? LAYOUT_WIDTHS[0];
42
+ });
43
+ }
44
+ resolveConfig() {
45
+ const config = inject(MATERIAL_LAYOUT_CONFIG, { optional: true }) ?? {};
46
+ const configuredMode = config.mode ?? config.defaultMode;
47
+ const configuredWidth = config.width;
48
+ return {
49
+ defaultMode: isLayoutMode(configuredMode) ? configuredMode : DEFAULT_MATERIAL_LAYOUT_CONFIG.defaultMode,
50
+ defaultWidth: normalizeLayoutWidth(configuredWidth) ?? DEFAULT_MATERIAL_LAYOUT_CONFIG.defaultWidth,
51
+ storageKey: config.storageKey ?? DEFAULT_MATERIAL_LAYOUT_CONFIG.storageKey,
52
+ widthStorageKey: config.widthStorageKey ?? DEFAULT_MATERIAL_LAYOUT_CONFIG.widthStorageKey,
53
+ };
54
+ }
55
+ readPersistedMode() {
56
+ const key = this.config.storageKey;
57
+ if (!key)
58
+ return null;
59
+ try {
60
+ const value = this.document.defaultView?.localStorage?.getItem(key);
61
+ return isLayoutMode(value) ? value : null;
62
+ }
63
+ catch {
64
+ return null;
65
+ }
66
+ }
67
+ readPersistedWidth() {
68
+ const key = this.config.widthStorageKey;
69
+ if (!key)
70
+ return null;
71
+ try {
72
+ const value = this.document.defaultView?.localStorage?.getItem(key);
73
+ return normalizeLayoutWidth(value);
74
+ }
75
+ catch {
76
+ return null;
77
+ }
78
+ }
79
+ persistMode(mode) {
80
+ const key = this.config.storageKey;
81
+ if (!key)
82
+ return;
83
+ try {
84
+ this.document.defaultView?.localStorage?.setItem(key, mode);
85
+ }
86
+ catch {
87
+ /* ignore */
88
+ }
89
+ }
90
+ persistWidth(width) {
91
+ const key = this.config.widthStorageKey;
92
+ if (!key)
93
+ return;
94
+ try {
95
+ this.document.defaultView?.localStorage?.setItem(key, width);
96
+ }
97
+ catch {
98
+ /* ignore */
99
+ }
100
+ }
101
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: LayoutService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
102
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: LayoutService, providedIn: 'root' });
103
+ }
104
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: LayoutService, decorators: [{
105
+ type: Injectable,
106
+ args: [{ providedIn: 'root' }]
107
+ }], ctorParameters: () => [] });
108
+
109
+ /**
110
+ * Generated bundle index. Do not edit.
111
+ */
112
+
113
+ export { LayoutService };
114
+ //# sourceMappingURL=ojiepermana-angular-layout-services.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ojiepermana-angular-layout-services.mjs","sources":["../../../projects/angular/layout/services/src/lib/layout.service.ts","../../../projects/angular/layout/services/ojiepermana-angular-layout-services.ts"],"sourcesContent":["import { DOCUMENT } from '@angular/common';\nimport { Injectable, effect, inject, signal } from '@angular/core';\nimport {\n DEFAULT_MATERIAL_LAYOUT_CONFIG,\n LAYOUT_WIDTHS,\n MATERIAL_LAYOUT_CONFIG,\n isLayoutMode,\n normalizeLayoutWidth,\n type LayoutMode,\n type LayoutWidth,\n type ResolvedMaterialLayoutConfig,\n} from '@ojiepermana/angular/layout/token';\n\n@Injectable({ providedIn: 'root' })\nexport class LayoutService {\n private readonly document = inject(DOCUMENT);\n private readonly config = this.resolveConfig();\n\n private readonly _mode = signal<LayoutMode>(this.readPersistedMode() ?? this.config.defaultMode);\n private readonly _width = signal<LayoutWidth>(this.readPersistedWidth() ?? this.config.defaultWidth);\n\n readonly mode = this._mode.asReadonly();\n readonly width = this._width.asReadonly();\n\n constructor() {\n effect(() => {\n this.persistMode(this._mode());\n });\n\n effect(() => {\n this.persistWidth(this._width());\n });\n }\n\n setMode(mode: LayoutMode): void {\n this._mode.set(mode);\n }\n\n toggleMode(): void {\n this._mode.update((mode) => {\n if (mode === 'vertical') {\n return 'horizontal';\n }\n\n if (mode === 'horizontal') {\n return 'vertical';\n }\n\n return 'vertical';\n });\n }\n\n setWidth(width: LayoutWidth): void {\n this._width.set(width);\n }\n\n toggleWidth(): void {\n this._width.update((width) => {\n const currentIndex = LAYOUT_WIDTHS.indexOf(width);\n return LAYOUT_WIDTHS[(currentIndex + 1) % LAYOUT_WIDTHS.length] ?? LAYOUT_WIDTHS[0];\n });\n }\n\n private resolveConfig(): ResolvedMaterialLayoutConfig {\n const config = inject(MATERIAL_LAYOUT_CONFIG, { optional: true }) ?? {};\n const configuredMode = config.mode ?? config.defaultMode;\n const configuredWidth = config.width;\n\n return {\n defaultMode: isLayoutMode(configuredMode) ? configuredMode : DEFAULT_MATERIAL_LAYOUT_CONFIG.defaultMode,\n defaultWidth: normalizeLayoutWidth(configuredWidth) ?? DEFAULT_MATERIAL_LAYOUT_CONFIG.defaultWidth,\n storageKey: config.storageKey ?? DEFAULT_MATERIAL_LAYOUT_CONFIG.storageKey,\n widthStorageKey: config.widthStorageKey ?? DEFAULT_MATERIAL_LAYOUT_CONFIG.widthStorageKey,\n };\n }\n\n private readPersistedMode(): LayoutMode | null {\n const key = this.config.storageKey;\n if (!key) return null;\n try {\n const value = this.document.defaultView?.localStorage?.getItem(key);\n return isLayoutMode(value) ? value : null;\n } catch {\n return null;\n }\n }\n\n private readPersistedWidth(): LayoutWidth | null {\n const key = this.config.widthStorageKey;\n if (!key) return null;\n try {\n const value = this.document.defaultView?.localStorage?.getItem(key);\n return normalizeLayoutWidth(value);\n } catch {\n return null;\n }\n }\n\n private persistMode(mode: LayoutMode): void {\n const key = this.config.storageKey;\n if (!key) return;\n try {\n this.document.defaultView?.localStorage?.setItem(key, mode);\n } catch {\n /* ignore */\n }\n }\n\n private persistWidth(width: LayoutWidth): void {\n const key = this.config.widthStorageKey;\n if (!key) return;\n try {\n this.document.defaultView?.localStorage?.setItem(key, width);\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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"}
@@ -0,0 +1,48 @@
1
+ import * as i0 from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
3
+
4
+ class ShellPagesComponent {
5
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ShellPagesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.14", type: ShellPagesComponent, isStandalone: true, selector: "shell-pages", host: { classAttribute: "block h-full min-h-0" }, ngImport: i0, template: `
7
+ <div class="flex h-full flex-col overflow-hidden">
8
+ <header class="flex h-12 min-w-0 shrink-0 items-center gap-2 border-b border-primary/30 px-2">
9
+ <ng-content select="[shell-pages-header]" />
10
+ </header>
11
+
12
+ <main class="min-h-0 flex-1 overflow-y-auto scrollbar-thin scrollbar-thumb-primary scrollbar-track-primary/10">
13
+ <ng-content select="[shell-pages-main]" />
14
+ </main>
15
+
16
+ <footer class="flex h-12 min-w-0 shrink-0 items-center gap-2 border-t border-primary/30 px-2">
17
+ <ng-content select="[shell-pages-footer]" />
18
+ </footer>
19
+ </div>
20
+ `, isInline: true, styles: ["footer:empty{display:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
21
+ }
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ShellPagesComponent, decorators: [{
23
+ type: Component,
24
+ args: [{ selector: 'shell-pages', changeDetection: ChangeDetectionStrategy.OnPush, host: {
25
+ class: 'block h-full min-h-0',
26
+ }, template: `
27
+ <div class="flex h-full flex-col overflow-hidden">
28
+ <header class="flex h-12 min-w-0 shrink-0 items-center gap-2 border-b border-primary/30 px-2">
29
+ <ng-content select="[shell-pages-header]" />
30
+ </header>
31
+
32
+ <main class="min-h-0 flex-1 overflow-y-auto scrollbar-thin scrollbar-thumb-primary scrollbar-track-primary/10">
33
+ <ng-content select="[shell-pages-main]" />
34
+ </main>
35
+
36
+ <footer class="flex h-12 min-w-0 shrink-0 items-center gap-2 border-t border-primary/30 px-2">
37
+ <ng-content select="[shell-pages-footer]" />
38
+ </footer>
39
+ </div>
40
+ `, styles: ["footer:empty{display:none}\n"] }]
41
+ }] });
42
+
43
+ /**
44
+ * Generated bundle index. Do not edit.
45
+ */
46
+
47
+ export { ShellPagesComponent };
48
+ //# sourceMappingURL=ojiepermana-angular-layout-shell.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ojiepermana-angular-layout-shell.mjs","sources":["../../../projects/angular/layout/shell/src/lib/shell-pages.ts","../../../projects/angular/layout/shell/ojiepermana-angular-layout-shell.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'shell-pages',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'block h-full min-h-0',\n },\n template: `\n <div class=\"flex h-full flex-col overflow-hidden\">\n <header class=\"flex h-12 min-w-0 shrink-0 items-center gap-2 border-b border-primary/30 px-2\">\n <ng-content select=\"[shell-pages-header]\" />\n </header>\n\n <main class=\"min-h-0 flex-1 overflow-y-auto scrollbar-thin scrollbar-thumb-primary scrollbar-track-primary/10\">\n <ng-content select=\"[shell-pages-main]\" />\n </main>\n\n <footer class=\"flex h-12 min-w-0 shrink-0 items-center gap-2 border-t border-primary/30 px-2\">\n <ng-content select=\"[shell-pages-footer]\" />\n </footer>\n </div>\n `,\n styles: `\n footer:empty {\n display: none;\n }\n `,\n})\nexport class ShellPagesComponent {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;MA6Ba,mBAAmB,CAAA;wGAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArBpB;;;;;;;;;;;;;;AAcT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAOU,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBA3B/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,eAAA,EACN,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,KAAK,EAAE,sBAAsB;qBAC9B,EAAA,QAAA,EACS;;;;;;;;;;;;;;AAcT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,CAAA,EAAA;;;ACtBH;;AAEG;;;;"}
@@ -0,0 +1,27 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, computed, Directive } from '@angular/core';
3
+ import { POPOVER_TRIGGER_DEFAULTS } from '@ojiepermana/angular/component/popover';
4
+ import { LayoutService } from '@ojiepermana/angular/layout/services';
5
+
6
+ class LayoutProfilePopoverDefaultsDirective {
7
+ layout = inject(LayoutService);
8
+ side = computed(() => (this.layout.mode() === 'horizontal' ? 'bottom' : 'right'), ...(ngDevMode ? [{ debugName: "side" }] : /* istanbul ignore next */ []));
9
+ align = computed(() => 'end', ...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
10
+ sideOffset = computed(() => (this.layout.mode() === 'horizontal' ? -20 : 12), ...(ngDevMode ? [{ debugName: "sideOffset" }] : /* istanbul ignore next */ []));
11
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: LayoutProfilePopoverDefaultsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
12
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.14", type: LayoutProfilePopoverDefaultsDirective, isStandalone: true, selector: "[ui-layout-profile][uiPopoverTrigger]", providers: [{ provide: POPOVER_TRIGGER_DEFAULTS, useExisting: LayoutProfilePopoverDefaultsDirective }], ngImport: i0 });
13
+ }
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: LayoutProfilePopoverDefaultsDirective, decorators: [{
15
+ type: Directive,
16
+ args: [{
17
+ selector: '[ui-layout-profile][uiPopoverTrigger]',
18
+ providers: [{ provide: POPOVER_TRIGGER_DEFAULTS, useExisting: LayoutProfilePopoverDefaultsDirective }],
19
+ }]
20
+ }] });
21
+
22
+ /**
23
+ * Generated bundle index. Do not edit.
24
+ */
25
+
26
+ export { LayoutProfilePopoverDefaultsDirective };
27
+ //# sourceMappingURL=ojiepermana-angular-layout-token-directive.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ojiepermana-angular-layout-token-directive.mjs","sources":["../../../projects/angular/layout/token/directive/src/lib/layout-profile-popover-defaults.directive.ts","../../../projects/angular/layout/token/directive/ojiepermana-angular-layout-token-directive.ts"],"sourcesContent":["import { Directive, computed, inject } from '@angular/core';\nimport {\n POPOVER_TRIGGER_DEFAULTS,\n type PopoverAlign,\n type PopoverSide,\n type PopoverTriggerDefaults,\n} from '@ojiepermana/angular/component/popover';\nimport { LayoutService } from '@ojiepermana/angular/layout/services';\n\n@Directive({\n selector: '[ui-layout-profile][uiPopoverTrigger]',\n providers: [{ provide: POPOVER_TRIGGER_DEFAULTS, useExisting: LayoutProfilePopoverDefaultsDirective }],\n})\nexport class LayoutProfilePopoverDefaultsDirective implements PopoverTriggerDefaults {\n private readonly layout = inject(LayoutService);\n\n readonly side = computed<PopoverSide>(() => (this.layout.mode() === 'horizontal' ? 'bottom' : 'right'));\n readonly align = computed<PopoverAlign>(() => 'end');\n readonly sideOffset = computed(() => (this.layout.mode() === 'horizontal' ? -20 : 12));\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;MAaa,qCAAqC,CAAA;AAC/B,IAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;IAEtC,IAAI,GAAG,QAAQ,CAAc,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,YAAY,GAAG,QAAQ,GAAG,OAAO,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;IAC9F,KAAK,GAAG,QAAQ,CAAe,MAAM,KAAK,4EAAC;IAC3C,UAAU,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,YAAY,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;wGAL3E,qCAAqC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAArC,qCAAqC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,SAAA,EAFrC,CAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,WAAW,EAAE,qCAAqC,EAAE,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAE3F,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBAJjD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uCAAuC;oBACjD,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,WAAW,EAAA,qCAAuC,EAAE,CAAC;AACvG,iBAAA;;;ACZD;;AAEG;;;;"}
@@ -0,0 +1,33 @@
1
+ import { InjectionToken } from '@angular/core';
2
+
3
+ const LAYOUT_MODES = ['vertical', 'horizontal', 'empty'];
4
+ const LAYOUT_WIDTHS = ['full', 'container', 'wide'];
5
+ const MATERIAL_LAYOUT_CONFIG = new InjectionToken('MATERIAL_LAYOUT_CONFIG');
6
+ const DEFAULT_MATERIAL_LAYOUT_CONFIG = {
7
+ defaultMode: 'vertical',
8
+ defaultWidth: 'wide',
9
+ storageKey: 'layout-mode',
10
+ widthStorageKey: 'layout-width',
11
+ };
12
+ function isLayoutMode(value) {
13
+ return LAYOUT_MODES.some((mode) => mode === value);
14
+ }
15
+ function isLayoutWidth(value) {
16
+ return LAYOUT_WIDTHS.some((width) => width === value);
17
+ }
18
+ function normalizeLayoutWidth(value) {
19
+ if (isLayoutWidth(value)) {
20
+ return value;
21
+ }
22
+ if (value === 'fixed') {
23
+ return 'container';
24
+ }
25
+ return null;
26
+ }
27
+
28
+ /**
29
+ * Generated bundle index. Do not edit.
30
+ */
31
+
32
+ export { DEFAULT_MATERIAL_LAYOUT_CONFIG, LAYOUT_MODES, LAYOUT_WIDTHS, MATERIAL_LAYOUT_CONFIG, isLayoutMode, isLayoutWidth, normalizeLayoutWidth };
33
+ //# sourceMappingURL=ojiepermana-angular-layout-token.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ojiepermana-angular-layout-token.mjs","sources":["../../../projects/angular/layout/token/src/lib/layout.tokens.ts","../../../projects/angular/layout/token/ojiepermana-angular-layout-token.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport const LAYOUT_MODES = ['vertical', 'horizontal', 'empty'] as const;\n\nexport type LayoutMode = (typeof LAYOUT_MODES)[number];\n\nexport const LAYOUT_WIDTHS = ['full', 'container', 'wide'] as const;\n\nexport type LayoutWidth = (typeof LAYOUT_WIDTHS)[number];\n\n/** @deprecated Use `container` instead. */\nexport type LegacyLayoutWidth = 'fixed';\n\nexport type ConfiguredLayoutWidth = LayoutWidth | LegacyLayoutWidth;\n\nexport interface MaterialLayoutConfig {\n /** Initial layout mode. */\n readonly mode?: LayoutMode;\n /** Initial layout width. */\n readonly width?: ConfiguredLayoutWidth;\n /** @deprecated Use `mode` instead. */\n /** Initial layout mode. Defaults to `vertical`. */\n readonly defaultMode?: LayoutMode;\n /** localStorage key used to persist the layout mode. Set to `null` to disable persistence. */\n readonly storageKey?: string | null;\n /** localStorage key used to persist the layout width. Set to `null` to disable persistence. */\n readonly widthStorageKey?: string | null;\n}\n\nexport interface ResolvedMaterialLayoutConfig {\n readonly defaultMode: LayoutMode;\n readonly defaultWidth: LayoutWidth;\n readonly storageKey: string | null;\n readonly widthStorageKey: string | null;\n}\n\nexport const MATERIAL_LAYOUT_CONFIG = new InjectionToken<MaterialLayoutConfig>('MATERIAL_LAYOUT_CONFIG');\n\nexport const DEFAULT_MATERIAL_LAYOUT_CONFIG: ResolvedMaterialLayoutConfig = {\n defaultMode: 'vertical',\n defaultWidth: 'wide',\n storageKey: 'layout-mode',\n widthStorageKey: 'layout-width',\n};\n\nexport function isLayoutMode(value: string | null | undefined): value is LayoutMode {\n return LAYOUT_MODES.some((mode) => mode === value);\n}\n\nexport function isLayoutWidth(value: string | null | undefined): value is LayoutWidth {\n return LAYOUT_WIDTHS.some((width) => width === value);\n}\n\nexport function normalizeLayoutWidth(value: string | null | undefined): LayoutWidth | null {\n if (isLayoutWidth(value)) {\n return value;\n }\n\n if (value === 'fixed') {\n return 'container';\n }\n\n return null;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;AAEO,MAAM,YAAY,GAAG,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO;AAIvD,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM;MA8B5C,sBAAsB,GAAG,IAAI,cAAc,CAAuB,wBAAwB;AAEhG,MAAM,8BAA8B,GAAiC;AAC1E,IAAA,WAAW,EAAE,UAAU;AACvB,IAAA,YAAY,EAAE,MAAM;AACpB,IAAA,UAAU,EAAE,aAAa;AACzB,IAAA,eAAe,EAAE,cAAc;;AAG3B,SAAU,YAAY,CAAC,KAAgC,EAAA;AAC3D,IAAA,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,KAAK,CAAC;AACpD;AAEM,SAAU,aAAa,CAAC,KAAgC,EAAA;AAC5D,IAAA,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,CAAC;AACvD;AAEM,SAAU,oBAAoB,CAAC,KAAgC,EAAA;AACnE,IAAA,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE;AACxB,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,IAAI,KAAK,KAAK,OAAO,EAAE;AACrB,QAAA,OAAO,WAAW;IACpB;AAEA,IAAA,OAAO,IAAI;AACb;;AC/DA;;AAEG;;;;"}