@ojiepermana/angular 21.3.0 → 21.3.4

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 (442) 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 +25 -19
  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/bin/src/writer/index.js +45 -3
  206. package/generator/api/sdk.config.example.json +4 -2
  207. package/layout/component/package.json +4 -0
  208. package/layout/empty/package.json +4 -0
  209. package/layout/horizontal/package.json +4 -0
  210. package/layout/provider/package.json +4 -0
  211. package/layout/services/package.json +4 -0
  212. package/layout/shell/package.json +4 -0
  213. package/layout/token/directive/package.json +4 -0
  214. package/layout/token/package.json +4 -0
  215. package/layout/vertical/package.json +4 -0
  216. package/navigation/demo-data/package.json +4 -0
  217. package/navigation/icon/package.json +4 -0
  218. package/navigation/item/package.json +4 -0
  219. package/navigation/service/package.json +4 -0
  220. package/navigation/sidebar/package.json +4 -0
  221. package/navigation/topbar/package.json +4 -0
  222. package/navigation/types/package.json +4 -0
  223. package/package.json +196 -128
  224. package/theme/README.md +67 -0
  225. package/theme/provider/package.json +4 -0
  226. package/theme/services/package.json +4 -0
  227. package/theme/styles/index.css +12 -7
  228. package/theme/token/package.json +4 -0
  229. package/types/{ojiepermana-angular-ui-component-chart.d.ts → ojiepermana-angular-component-chart.d.ts} +15 -15
  230. package/types/ojiepermana-angular-generator-api.d.ts +2 -1
  231. package/types/ojiepermana-angular-layout-empty.d.ts +22 -0
  232. package/types/ojiepermana-angular-layout-horizontal.d.ts +36 -0
  233. package/types/ojiepermana-angular-layout-provider.d.ts +6 -0
  234. package/types/ojiepermana-angular-layout-services.d.ts +25 -0
  235. package/types/ojiepermana-angular-layout-shell.d.ts +8 -0
  236. package/types/ojiepermana-angular-layout-token-directive.d.ts +13 -0
  237. package/types/ojiepermana-angular-layout-token.d.ts +36 -0
  238. package/types/ojiepermana-angular-layout-vertical.d.ts +38 -0
  239. package/types/ojiepermana-angular-layout.d.ts +26 -25
  240. package/types/ojiepermana-angular-navigation-demo-data.d.ts +5 -0
  241. package/types/ojiepermana-angular-navigation-item.d.ts +54 -0
  242. package/types/ojiepermana-angular-navigation-service.d.ts +77 -0
  243. package/types/ojiepermana-angular-navigation-sidebar.d.ts +75 -0
  244. package/types/ojiepermana-angular-navigation-topbar.d.ts +54 -0
  245. package/types/ojiepermana-angular-navigation-types.d.ts +129 -0
  246. package/types/ojiepermana-angular-theme-provider.d.ts +11 -0
  247. package/types/ojiepermana-angular-theme-services.d.ts +55 -0
  248. package/types/ojiepermana-angular-theme-token.d.ts +57 -0
  249. package/types/ojiepermana-angular-theme.d.ts +11 -66
  250. package/fesm2022/ojiepermana-angular-layout-theme.mjs.map +0 -1
  251. package/fesm2022/ojiepermana-angular-navigation.mjs +0 -2317
  252. package/fesm2022/ojiepermana-angular-navigation.mjs.map +0 -1
  253. package/fesm2022/ojiepermana-angular-ui-component-accordion.mjs.map +0 -1
  254. package/fesm2022/ojiepermana-angular-ui-component-alert-dialog.mjs.map +0 -1
  255. package/fesm2022/ojiepermana-angular-ui-component-alert.mjs.map +0 -1
  256. package/fesm2022/ojiepermana-angular-ui-component-aspect-ratio.mjs.map +0 -1
  257. package/fesm2022/ojiepermana-angular-ui-component-avatar.mjs.map +0 -1
  258. package/fesm2022/ojiepermana-angular-ui-component-badge.mjs.map +0 -1
  259. package/fesm2022/ojiepermana-angular-ui-component-breadcrumb.mjs.map +0 -1
  260. package/fesm2022/ojiepermana-angular-ui-component-button-group.mjs.map +0 -1
  261. package/fesm2022/ojiepermana-angular-ui-component-button.mjs.map +0 -1
  262. package/fesm2022/ojiepermana-angular-ui-component-calendar.mjs.map +0 -1
  263. package/fesm2022/ojiepermana-angular-ui-component-card.mjs.map +0 -1
  264. package/fesm2022/ojiepermana-angular-ui-component-carousel.mjs.map +0 -1
  265. package/fesm2022/ojiepermana-angular-ui-component-chart-area.mjs.map +0 -1
  266. package/fesm2022/ojiepermana-angular-ui-component-chart-bar.mjs.map +0 -1
  267. package/fesm2022/ojiepermana-angular-ui-component-chart-line.mjs.map +0 -1
  268. package/fesm2022/ojiepermana-angular-ui-component-chart-pie.mjs.map +0 -1
  269. package/fesm2022/ojiepermana-angular-ui-component-chart-radar.mjs.map +0 -1
  270. package/fesm2022/ojiepermana-angular-ui-component-chart-radial.mjs.map +0 -1
  271. package/fesm2022/ojiepermana-angular-ui-component-chart-scatter.mjs.map +0 -1
  272. package/fesm2022/ojiepermana-angular-ui-component-chart.mjs.map +0 -1
  273. package/fesm2022/ojiepermana-angular-ui-component-checkbox.mjs.map +0 -1
  274. package/fesm2022/ojiepermana-angular-ui-component-collapsible.mjs.map +0 -1
  275. package/fesm2022/ojiepermana-angular-ui-component-combobox.mjs.map +0 -1
  276. package/fesm2022/ojiepermana-angular-ui-component-command.mjs.map +0 -1
  277. package/fesm2022/ojiepermana-angular-ui-component-context-menu.mjs.map +0 -1
  278. package/fesm2022/ojiepermana-angular-ui-component-date-picker.mjs.map +0 -1
  279. package/fesm2022/ojiepermana-angular-ui-component-dialog.mjs.map +0 -1
  280. package/fesm2022/ojiepermana-angular-ui-component-drawer.mjs.map +0 -1
  281. package/fesm2022/ojiepermana-angular-ui-component-dropdown-menu.mjs.map +0 -1
  282. package/fesm2022/ojiepermana-angular-ui-component-form.mjs.map +0 -1
  283. package/fesm2022/ojiepermana-angular-ui-component-input-group.mjs.map +0 -1
  284. package/fesm2022/ojiepermana-angular-ui-component-input.mjs.map +0 -1
  285. package/fesm2022/ojiepermana-angular-ui-component-item.mjs.map +0 -1
  286. package/fesm2022/ojiepermana-angular-ui-component-label.mjs.map +0 -1
  287. package/fesm2022/ojiepermana-angular-ui-component-pagination.mjs.map +0 -1
  288. package/fesm2022/ojiepermana-angular-ui-component-popover.mjs.map +0 -1
  289. package/fesm2022/ojiepermana-angular-ui-component-progress.mjs.map +0 -1
  290. package/fesm2022/ojiepermana-angular-ui-component-radio.mjs.map +0 -1
  291. package/fesm2022/ojiepermana-angular-ui-component-scroll-area.mjs.map +0 -1
  292. package/fesm2022/ojiepermana-angular-ui-component-select.mjs.map +0 -1
  293. package/fesm2022/ojiepermana-angular-ui-component-separator.mjs.map +0 -1
  294. package/fesm2022/ojiepermana-angular-ui-component-sheet.mjs.map +0 -1
  295. package/fesm2022/ojiepermana-angular-ui-component-skeleton.mjs.map +0 -1
  296. package/fesm2022/ojiepermana-angular-ui-component-slider.mjs.map +0 -1
  297. package/fesm2022/ojiepermana-angular-ui-component-switch.mjs.map +0 -1
  298. package/fesm2022/ojiepermana-angular-ui-component-table.mjs.map +0 -1
  299. package/fesm2022/ojiepermana-angular-ui-component-tabs.mjs.map +0 -1
  300. package/fesm2022/ojiepermana-angular-ui-component-textarea.mjs.map +0 -1
  301. package/fesm2022/ojiepermana-angular-ui-component-toast.mjs.map +0 -1
  302. package/fesm2022/ojiepermana-angular-ui-component-tooltip.mjs.map +0 -1
  303. package/fesm2022/ojiepermana-angular-ui-component-utils.mjs.map +0 -1
  304. package/layout/theme/package.json +0 -4
  305. package/navigation/package.json +0 -4
  306. package/navigation-icon/package.json +0 -4
  307. package/types/ojiepermana-angular-navigation.d.ts +0 -375
  308. package/ui/component/accordion/package.json +0 -4
  309. package/ui/component/alert/package.json +0 -4
  310. package/ui/component/alert-dialog/package.json +0 -4
  311. package/ui/component/aspect-ratio/package.json +0 -4
  312. package/ui/component/avatar/package.json +0 -4
  313. package/ui/component/badge/package.json +0 -4
  314. package/ui/component/breadcrumb/package.json +0 -4
  315. package/ui/component/button/package.json +0 -4
  316. package/ui/component/button-group/package.json +0 -4
  317. package/ui/component/calendar/package.json +0 -4
  318. package/ui/component/card/package.json +0 -4
  319. package/ui/component/carousel/package.json +0 -4
  320. package/ui/component/chart/area/package.json +0 -4
  321. package/ui/component/chart/bar/package.json +0 -4
  322. package/ui/component/chart/line/package.json +0 -4
  323. package/ui/component/chart/package.json +0 -4
  324. package/ui/component/chart/pie/package.json +0 -4
  325. package/ui/component/chart/radar/package.json +0 -4
  326. package/ui/component/chart/radial/package.json +0 -4
  327. package/ui/component/chart/scatter/package.json +0 -4
  328. package/ui/component/checkbox/package.json +0 -4
  329. package/ui/component/collapsible/package.json +0 -4
  330. package/ui/component/combobox/package.json +0 -4
  331. package/ui/component/command/package.json +0 -4
  332. package/ui/component/context-menu/package.json +0 -4
  333. package/ui/component/date-picker/package.json +0 -4
  334. package/ui/component/dialog/package.json +0 -4
  335. package/ui/component/drawer/package.json +0 -4
  336. package/ui/component/dropdown-menu/package.json +0 -4
  337. package/ui/component/form/package.json +0 -4
  338. package/ui/component/input/package.json +0 -4
  339. package/ui/component/input-group/package.json +0 -4
  340. package/ui/component/item/package.json +0 -4
  341. package/ui/component/label/package.json +0 -4
  342. package/ui/component/pagination/package.json +0 -4
  343. package/ui/component/popover/package.json +0 -4
  344. package/ui/component/progress/package.json +0 -4
  345. package/ui/component/radio/package.json +0 -4
  346. package/ui/component/scroll-area/package.json +0 -4
  347. package/ui/component/select/package.json +0 -4
  348. package/ui/component/separator/package.json +0 -4
  349. package/ui/component/sheet/package.json +0 -4
  350. package/ui/component/skeleton/package.json +0 -4
  351. package/ui/component/slider/package.json +0 -4
  352. package/ui/component/switch/package.json +0 -4
  353. package/ui/component/table/package.json +0 -4
  354. package/ui/component/tabs/package.json +0 -4
  355. package/ui/component/textarea/package.json +0 -4
  356. package/ui/component/toast/package.json +0 -4
  357. package/ui/component/tooltip/package.json +0 -4
  358. package/ui/component/utils/package.json +0 -4
  359. /package/{ui/component → component}/chart/README.md +0 -0
  360. /package/theme/styles/{themes/library/_components.css → foundation/components.css} +0 -0
  361. /package/theme/styles/{themes/library/_layers.css → foundation/layers.css} +0 -0
  362. /package/theme/styles/{themes/library/_tokens.css → foundation/tokens.css} +0 -0
  363. /package/theme/styles/{themes/library/_material-overrides.css → integrations/material.css} +0 -0
  364. /package/theme/styles/{themes → integrations}/tailwind.css +0 -0
  365. /package/theme/styles/{themes/library → variants}/color/amber.css +0 -0
  366. /package/theme/styles/{themes/library → variants}/color/base.css +0 -0
  367. /package/theme/styles/{themes/library → variants}/color/blue.css +0 -0
  368. /package/theme/styles/{themes/library → variants}/color/cyan.css +0 -0
  369. /package/theme/styles/{themes/library → variants}/color/emerald.css +0 -0
  370. /package/theme/styles/{themes/library → variants}/color/fuchsia.css +0 -0
  371. /package/theme/styles/{themes/library → variants}/color/green.css +0 -0
  372. /package/theme/styles/{themes/library → variants}/color/index.css +0 -0
  373. /package/theme/styles/{themes/library → variants}/color/indigo.css +0 -0
  374. /package/theme/styles/{themes/library → variants}/color/lime.css +0 -0
  375. /package/theme/styles/{themes/library → variants}/color/orange.css +0 -0
  376. /package/theme/styles/{themes/library → variants}/color/pink.css +0 -0
  377. /package/theme/styles/{themes/library → variants}/color/purple.css +0 -0
  378. /package/theme/styles/{themes/library → variants}/color/red.css +0 -0
  379. /package/theme/styles/{themes/library → variants}/color/rose.css +0 -0
  380. /package/theme/styles/{themes/library → variants}/color/sky.css +0 -0
  381. /package/theme/styles/{themes/library → variants}/color/teal.css +0 -0
  382. /package/theme/styles/{themes/library → variants}/color/violet.css +0 -0
  383. /package/theme/styles/{themes/library → variants}/color/yellow.css +0 -0
  384. /package/theme/styles/{themes → variants}/mode/dark.css +0 -0
  385. /package/theme/styles/{themes → variants}/mode/index.css +0 -0
  386. /package/theme/styles/{themes → variants}/mode/light.css +0 -0
  387. /package/theme/styles/{themes/library → variants}/style/brutal.css +0 -0
  388. /package/theme/styles/{themes/library → variants}/style/default.css +0 -0
  389. /package/theme/styles/{themes/library → variants}/style/index.css +0 -0
  390. /package/theme/styles/{themes/library → variants}/style/sharp.css +0 -0
  391. /package/theme/styles/{themes/library → variants}/style/soft.css +0 -0
  392. /package/types/{ojiepermana-angular-ui-component-accordion.d.ts → ojiepermana-angular-component-accordion.d.ts} +0 -0
  393. /package/types/{ojiepermana-angular-ui-component-alert-dialog.d.ts → ojiepermana-angular-component-alert-dialog.d.ts} +0 -0
  394. /package/types/{ojiepermana-angular-ui-component-alert.d.ts → ojiepermana-angular-component-alert.d.ts} +0 -0
  395. /package/types/{ojiepermana-angular-ui-component-aspect-ratio.d.ts → ojiepermana-angular-component-aspect-ratio.d.ts} +0 -0
  396. /package/types/{ojiepermana-angular-ui-component-avatar.d.ts → ojiepermana-angular-component-avatar.d.ts} +0 -0
  397. /package/types/{ojiepermana-angular-ui-component-badge.d.ts → ojiepermana-angular-component-badge.d.ts} +0 -0
  398. /package/types/{ojiepermana-angular-ui-component-breadcrumb.d.ts → ojiepermana-angular-component-breadcrumb.d.ts} +0 -0
  399. /package/types/{ojiepermana-angular-ui-component-button-group.d.ts → ojiepermana-angular-component-button-group.d.ts} +0 -0
  400. /package/types/{ojiepermana-angular-ui-component-button.d.ts → ojiepermana-angular-component-button.d.ts} +0 -0
  401. /package/types/{ojiepermana-angular-ui-component-calendar.d.ts → ojiepermana-angular-component-calendar.d.ts} +0 -0
  402. /package/types/{ojiepermana-angular-ui-component-card.d.ts → ojiepermana-angular-component-card.d.ts} +0 -0
  403. /package/types/{ojiepermana-angular-ui-component-carousel.d.ts → ojiepermana-angular-component-carousel.d.ts} +0 -0
  404. /package/types/{ojiepermana-angular-ui-component-chart-area.d.ts → ojiepermana-angular-component-chart-area.d.ts} +0 -0
  405. /package/types/{ojiepermana-angular-ui-component-chart-bar.d.ts → ojiepermana-angular-component-chart-bar.d.ts} +0 -0
  406. /package/types/{ojiepermana-angular-ui-component-chart-line.d.ts → ojiepermana-angular-component-chart-line.d.ts} +0 -0
  407. /package/types/{ojiepermana-angular-ui-component-chart-pie.d.ts → ojiepermana-angular-component-chart-pie.d.ts} +0 -0
  408. /package/types/{ojiepermana-angular-ui-component-chart-radar.d.ts → ojiepermana-angular-component-chart-radar.d.ts} +0 -0
  409. /package/types/{ojiepermana-angular-ui-component-chart-radial.d.ts → ojiepermana-angular-component-chart-radial.d.ts} +0 -0
  410. /package/types/{ojiepermana-angular-ui-component-chart-scatter.d.ts → ojiepermana-angular-component-chart-scatter.d.ts} +0 -0
  411. /package/types/{ojiepermana-angular-ui-component-checkbox.d.ts → ojiepermana-angular-component-checkbox.d.ts} +0 -0
  412. /package/types/{ojiepermana-angular-ui-component-collapsible.d.ts → ojiepermana-angular-component-collapsible.d.ts} +0 -0
  413. /package/types/{ojiepermana-angular-ui-component-combobox.d.ts → ojiepermana-angular-component-combobox.d.ts} +0 -0
  414. /package/types/{ojiepermana-angular-ui-component-command.d.ts → ojiepermana-angular-component-command.d.ts} +0 -0
  415. /package/types/{ojiepermana-angular-ui-component-context-menu.d.ts → ojiepermana-angular-component-context-menu.d.ts} +0 -0
  416. /package/types/{ojiepermana-angular-ui-component-date-picker.d.ts → ojiepermana-angular-component-date-picker.d.ts} +0 -0
  417. /package/types/{ojiepermana-angular-ui-component-dialog.d.ts → ojiepermana-angular-component-dialog.d.ts} +0 -0
  418. /package/types/{ojiepermana-angular-ui-component-drawer.d.ts → ojiepermana-angular-component-drawer.d.ts} +0 -0
  419. /package/types/{ojiepermana-angular-ui-component-dropdown-menu.d.ts → ojiepermana-angular-component-dropdown-menu.d.ts} +0 -0
  420. /package/types/{ojiepermana-angular-ui-component-form.d.ts → ojiepermana-angular-component-form.d.ts} +0 -0
  421. /package/types/{ojiepermana-angular-ui-component-input-group.d.ts → ojiepermana-angular-component-input-group.d.ts} +0 -0
  422. /package/types/{ojiepermana-angular-ui-component-input.d.ts → ojiepermana-angular-component-input.d.ts} +0 -0
  423. /package/types/{ojiepermana-angular-ui-component-item.d.ts → ojiepermana-angular-component-item.d.ts} +0 -0
  424. /package/types/{ojiepermana-angular-ui-component-label.d.ts → ojiepermana-angular-component-label.d.ts} +0 -0
  425. /package/types/{ojiepermana-angular-ui-component-pagination.d.ts → ojiepermana-angular-component-pagination.d.ts} +0 -0
  426. /package/types/{ojiepermana-angular-ui-component-popover.d.ts → ojiepermana-angular-component-popover.d.ts} +0 -0
  427. /package/types/{ojiepermana-angular-ui-component-progress.d.ts → ojiepermana-angular-component-progress.d.ts} +0 -0
  428. /package/types/{ojiepermana-angular-ui-component-radio.d.ts → ojiepermana-angular-component-radio.d.ts} +0 -0
  429. /package/types/{ojiepermana-angular-ui-component-scroll-area.d.ts → ojiepermana-angular-component-scroll-area.d.ts} +0 -0
  430. /package/types/{ojiepermana-angular-ui-component-select.d.ts → ojiepermana-angular-component-select.d.ts} +0 -0
  431. /package/types/{ojiepermana-angular-ui-component-separator.d.ts → ojiepermana-angular-component-separator.d.ts} +0 -0
  432. /package/types/{ojiepermana-angular-ui-component-sheet.d.ts → ojiepermana-angular-component-sheet.d.ts} +0 -0
  433. /package/types/{ojiepermana-angular-ui-component-skeleton.d.ts → ojiepermana-angular-component-skeleton.d.ts} +0 -0
  434. /package/types/{ojiepermana-angular-ui-component-slider.d.ts → ojiepermana-angular-component-slider.d.ts} +0 -0
  435. /package/types/{ojiepermana-angular-ui-component-switch.d.ts → ojiepermana-angular-component-switch.d.ts} +0 -0
  436. /package/types/{ojiepermana-angular-ui-component-table.d.ts → ojiepermana-angular-component-table.d.ts} +0 -0
  437. /package/types/{ojiepermana-angular-ui-component-tabs.d.ts → ojiepermana-angular-component-tabs.d.ts} +0 -0
  438. /package/types/{ojiepermana-angular-ui-component-textarea.d.ts → ojiepermana-angular-component-textarea.d.ts} +0 -0
  439. /package/types/{ojiepermana-angular-ui-component-toast.d.ts → ojiepermana-angular-component-toast.d.ts} +0 -0
  440. /package/types/{ojiepermana-angular-ui-component-tooltip.d.ts → ojiepermana-angular-component-tooltip.d.ts} +0 -0
  441. /package/types/{ojiepermana-angular-ui-component-utils.d.ts → ojiepermana-angular-component-utils.d.ts} +0 -0
  442. /package/types/{ojiepermana-angular-layout-theme.d.ts → ojiepermana-angular-layout-component.d.ts} +0 -0
@@ -0,0 +1,54 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { NavigationService } from '@ojiepermana/angular/navigation/service';
3
+ import { NavigationItem, TopbarAppearance, NavigationBasicItem, NavigationCollapsableItem, NavigationGroupItem } from '@ojiepermana/angular/navigation/types';
4
+ export { TopbarAppearance } from '@ojiepermana/angular/navigation/types';
5
+
6
+ /**
7
+ * Horizontal navigation (topbar) — shadcn-styled.
8
+ */
9
+ declare class TopbarComponent {
10
+ protected readonly nav: NavigationService;
11
+ private readonly overlay;
12
+ private readonly vcr;
13
+ private readonly host;
14
+ private readonly destroyRef;
15
+ readonly items: _angular_core.InputSignal<NavigationItem[]>;
16
+ /** Registry key di `NavigationService`. Default `'main'`. */
17
+ readonly navigationId: _angular_core.InputSignal<string>;
18
+ readonly appearance: _angular_core.InputSignal<TopbarAppearance>;
19
+ readonly ariaLabel: _angular_core.InputSignal<string>;
20
+ readonly class: _angular_core.InputSignal<string>;
21
+ /** Auto-register `items` ke `NavigationService` agar `activeTrail` bekerja. */
22
+ readonly autoRegister: _angular_core.InputSignal<boolean>;
23
+ /** Tampilkan hamburger di `< md` yang men-toggle mobile drawer sidebar. */
24
+ readonly showHamburger: _angular_core.InputSignal<boolean>;
25
+ readonly hamburgerLabel: _angular_core.InputSignal<string>;
26
+ protected readonly mobileOpen: _angular_core.WritableSignal<boolean>;
27
+ /** Resolved items: input jika disediakan, fallback ke registry NavigationService. */
28
+ protected readonly resolvedItems: _angular_core.Signal<readonly NavigationItem[]>;
29
+ protected readonly openId: _angular_core.WritableSignal<string | null>;
30
+ private active;
31
+ private readonly dropdownTpl;
32
+ constructor();
33
+ protected readonly hostClasses: _angular_core.Signal<string>;
34
+ protected readonly endSlotClasses: _angular_core.Signal<string>;
35
+ protected asBasic(i: NavigationItem): NavigationBasicItem;
36
+ protected asCollapsable(i: NavigationItem): NavigationCollapsableItem;
37
+ protected asGroup(i: NavigationItem): NavigationGroupItem;
38
+ protected isItemActive(id: string | undefined): boolean;
39
+ protected toggleMobile(): void;
40
+ protected toggleDropdown(trigger: HTMLElement, item: NavigationItem): void;
41
+ protected openDropdown(trigger: HTMLElement, item: NavigationItem): void;
42
+ private attach;
43
+ protected closeAll(): void;
44
+ /** Menubar keyboard navigation: ArrowLeft/Right antar trigger, Home/End, ArrowDown fokus panel. */
45
+ protected onMenubarKeydown(event: KeyboardEvent): void;
46
+ /** Arrow-key navigation dalam dropdown panel. */
47
+ protected onPanelKeydown(event: KeyboardEvent): void;
48
+ private collectPanelFocusables;
49
+ private focusFirstInPanel;
50
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TopbarComponent, never>;
51
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TopbarComponent, "topbar", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "navigationId": { "alias": "navigationId"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; "autoRegister": { "alias": "autoRegister"; "required": false; "isSignal": true; }; "showHamburger": { "alias": "showHamburger"; "required": false; "isSignal": true; }; "hamburgerLabel": { "alias": "hamburgerLabel"; "required": false; "isSignal": true; }; }, {}, never, ["[topbar-start]", "[topbar-end]"], true, never>;
52
+ }
53
+
54
+ export { TopbarComponent };
@@ -0,0 +1,129 @@
1
+ import { Params, QueryParamsHandling, IsActiveMatchOptions } from '@angular/router';
2
+
3
+ type NavigationItemType = 'aside' | 'basic' | 'collapsable' | 'divider' | 'group' | 'mega' | 'spacer';
4
+ interface NavigationItemClasses {
5
+ title?: string;
6
+ subtitle?: string;
7
+ icon?: string;
8
+ wrapper?: string;
9
+ }
10
+ interface NavigationItemBadge {
11
+ title?: string;
12
+ classes?: string;
13
+ }
14
+ type NavigationVisibilityHandler = (item: NavigationItem) => boolean;
15
+ type NavigationActionHandler = (item: NavigationItem) => void;
16
+ interface NavigationItemBase {
17
+ /** Unique identifier untuk item navigasi */
18
+ id?: string;
19
+ /** Judul/label yang ditampilkan */
20
+ title?: string;
21
+ /** Subtitle/deskripsi tambahan */
22
+ subtitle?: string;
23
+ /** Status aktif item */
24
+ active?: boolean;
25
+ /** Status disabled item */
26
+ disabled?: boolean;
27
+ /** Tooltip text saat hover */
28
+ tooltip?: string;
29
+ /** Custom CSS classes */
30
+ classes?: NavigationItemClasses;
31
+ /** Material Symbols icon name (ligature, e.g. `dashboard`, `menu_book`) */
32
+ icon?: string;
33
+ /** Badge configuration */
34
+ badge?: NavigationItemBadge;
35
+ /** Additional metadata */
36
+ meta?: Record<string, unknown>;
37
+ /** Function untuk hide/show item secara dinamis */
38
+ isHidden?: NavigationVisibilityHandler;
39
+ }
40
+ interface NavigationRoutableItemBase extends NavigationItemBase {
41
+ /** Angular router link */
42
+ link?: string;
43
+ /** URL fragment (#anchor) */
44
+ fragment?: string;
45
+ /** Preserve fragment saat navigasi */
46
+ preserveFragment?: boolean;
47
+ /** Query parameters untuk routing */
48
+ queryParams?: Params | null;
49
+ /** Cara handle query params */
50
+ queryParamsHandling?: QueryParamsHandling | null;
51
+ /** Flag untuk external link */
52
+ externalLink?: boolean;
53
+ /** Target untuk external link */
54
+ target?: '_blank' | '_self' | '_parent' | '_top' | string;
55
+ /** Exact match untuk active route */
56
+ exactMatch?: boolean;
57
+ /** Options untuk active match detection */
58
+ isActiveMatchOptions?: IsActiveMatchOptions;
59
+ /** Custom action yang dipanggil saat item diklik */
60
+ action?: NavigationActionHandler;
61
+ }
62
+ interface NavigationBasicItem extends NavigationRoutableItemBase {
63
+ type: 'basic';
64
+ children?: never;
65
+ }
66
+ interface NavigationAsideItem extends NavigationRoutableItemBase {
67
+ type: 'aside';
68
+ children: NavigationItem[];
69
+ }
70
+ interface NavigationCollapsableItem extends NavigationRoutableItemBase {
71
+ type: 'collapsable';
72
+ children: NavigationItem[];
73
+ }
74
+ interface NavigationGroupItem extends NavigationItemBase {
75
+ type: 'group';
76
+ children: NavigationItem[];
77
+ }
78
+ /**
79
+ * Mega menu branch — dirender sebagai panel full-width multi-kolom pada topbar.
80
+ * Children biasanya berupa `NavigationGroupItem` (per kolom) berisi `basic` items.
81
+ */
82
+ interface NavigationMegaItem extends NavigationItemBase {
83
+ type: 'mega';
84
+ /** Jumlah kolom saat viewport >= md (default: 4) */
85
+ columns?: number;
86
+ children: NavigationItem[];
87
+ }
88
+ interface NavigationDividerItem extends NavigationItemBase {
89
+ type: 'divider';
90
+ children?: never;
91
+ }
92
+ interface NavigationSpacerItem extends NavigationItemBase {
93
+ type: 'spacer';
94
+ children?: never;
95
+ }
96
+ type NavigationBranchItem = NavigationAsideItem | NavigationCollapsableItem | NavigationGroupItem | NavigationMegaItem;
97
+ type NavigationLeafItem = NavigationBasicItem | NavigationDividerItem | NavigationSpacerItem;
98
+ type NavigationItem = NavigationBranchItem | NavigationLeafItem;
99
+ /**
100
+ * Navigation Item Interface
101
+ *
102
+ * Interface ini mendefinisikan struktur data untuk setiap item navigasi
103
+ * Mendukung berbagai tipe item dan konfigurasi routing Angular
104
+ */
105
+ type NavigationStructuredItem = NavigationItem;
106
+ /**
107
+ * Sidebar Appearance
108
+ * - default: full width (lebar penuh) dengan label + icon
109
+ * - thin: icon-only, expand overlay saat hover
110
+ */
111
+ type SidebarAppearance = 'default' | 'thin';
112
+ /**
113
+ * Topbar Appearance
114
+ * - default: horizontal dengan dropdown untuk collapsable
115
+ * - megamenu: full-width panel multi-kolom untuk item `mega`
116
+ */
117
+ type TopbarAppearance = 'default' | 'megamenu';
118
+ /** Sidebar desktop border ownership */
119
+ type SidebarBorderSource = 'component' | 'layout';
120
+ /** Sidebar position */
121
+ type SidebarPosition = 'left' | 'right';
122
+ /** Sidebar display mode */
123
+ type SidebarMode = 'over' | 'side';
124
+ type VerticalNavigationAppearance = SidebarAppearance;
125
+ type VerticalNavigationBorderSource = SidebarBorderSource;
126
+ type VerticalNavigationMode = SidebarMode;
127
+ type VerticalNavigationPosition = SidebarPosition;
128
+
129
+ export type { NavigationActionHandler, NavigationAsideItem, NavigationBasicItem, NavigationBranchItem, NavigationCollapsableItem, NavigationDividerItem, NavigationGroupItem, NavigationItem, NavigationItemBadge, NavigationItemBase, NavigationItemClasses, NavigationItemType, NavigationLeafItem, NavigationMegaItem, NavigationRoutableItemBase, NavigationSpacerItem, NavigationStructuredItem, NavigationVisibilityHandler, SidebarAppearance, SidebarBorderSource, SidebarMode, SidebarPosition, TopbarAppearance, VerticalNavigationAppearance, VerticalNavigationBorderSource, VerticalNavigationMode, VerticalNavigationPosition };
@@ -0,0 +1,11 @@
1
+ import { Provider, EnvironmentProviders } from '@angular/core';
2
+ import { MaterialThemeConfig } from '@ojiepermana/angular/theme/token';
3
+
4
+ interface MaterialThemeFeature {
5
+ readonly providers: Provider[];
6
+ }
7
+ declare function provideMaterialTheme(config?: MaterialThemeConfig, ...features: MaterialThemeFeature[]): EnvironmentProviders;
8
+ declare function withMaterialDefaults(): MaterialThemeFeature;
9
+
10
+ export { provideMaterialTheme, withMaterialDefaults };
11
+ export type { MaterialThemeFeature };
@@ -0,0 +1,55 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { ThemeConfig, ThemeMode, ColorScheme, ThemeBrand, ThemeColor, ThemeStyle } from '@ojiepermana/angular/theme/token';
3
+
4
+ declare class ThemeService {
5
+ private readonly document;
6
+ private readonly destroyRef;
7
+ private readonly config;
8
+ private readonly initialBrand;
9
+ private readonly _modePreference;
10
+ private readonly _brand;
11
+ private readonly _color;
12
+ private readonly _style;
13
+ private readonly _systemPrefersDark;
14
+ readonly scheme: _angular_core.Signal<"light" | "dark" | "system">;
15
+ readonly brand: _angular_core.Signal<"etos" | null>;
16
+ readonly color: _angular_core.Signal<"base" | "red" | "orange" | "amber" | "yellow" | "lime" | "green" | "emerald" | "teal" | "cyan" | "sky" | "blue" | "indigo" | "violet" | "purple" | "fuchsia" | "pink" | "rose">;
17
+ readonly theme: _angular_core.Signal<"base" | "red" | "orange" | "amber" | "yellow" | "lime" | "green" | "emerald" | "teal" | "cyan" | "sky" | "blue" | "indigo" | "violet" | "purple" | "fuchsia" | "pink" | "rose">;
18
+ readonly style: _angular_core.Signal<"default" | "sharp" | "brutal" | "soft">;
19
+ readonly mode: _angular_core.Signal<"light" | "dark">;
20
+ readonly snapshot: _angular_core.Signal<ThemeConfig>;
21
+ readonly isDark: _angular_core.Signal<boolean>;
22
+ constructor();
23
+ setMode(mode: ThemeMode): void;
24
+ setScheme(scheme: ColorScheme): void;
25
+ setBrand(brand: ThemeBrand | null): void;
26
+ setColor(color: ThemeColor): void;
27
+ setTheme(theme: ThemeColor | string): void;
28
+ setStyle(style: ThemeStyle): void;
29
+ setAll(config: Partial<ThemeConfig> & {
30
+ readonly scheme?: ColorScheme;
31
+ }): void;
32
+ toggleScheme(): void;
33
+ toggleMode(): void;
34
+ reset(): void;
35
+ private resolveConfig;
36
+ private resolveMode;
37
+ private prefersDark;
38
+ private watchSystemScheme;
39
+ private readPersistedMode;
40
+ private readPersistedBrand;
41
+ private readPersistedColor;
42
+ private readPersistedStyle;
43
+ private persistMode;
44
+ private persistBrand;
45
+ private persistColor;
46
+ private persistStyle;
47
+ private clearPersistedBrand;
48
+ private clearPersistedColor;
49
+ private clearPersistedStyle;
50
+ private clearPersistedItem;
51
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ThemeService, never>;
52
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<ThemeService>;
53
+ }
54
+
55
+ export { ThemeService };
@@ -0,0 +1,57 @@
1
+ import { InjectionToken } from '@angular/core';
2
+
3
+ declare const MODES: readonly ["light", "dark"];
4
+ type ThemeMode = (typeof MODES)[number];
5
+ declare const COLOR_SCHEMES: readonly ["light", "dark", "system"];
6
+ type ColorScheme = (typeof COLOR_SCHEMES)[number];
7
+ declare const COLORS: readonly ["base", "red", "orange", "amber", "yellow", "lime", "green", "emerald", "teal", "cyan", "sky", "blue", "indigo", "violet", "purple", "fuchsia", "pink", "rose"];
8
+ type ThemeColor = (typeof COLORS)[number];
9
+ declare const STYLES: readonly ["default", "sharp", "brutal", "soft"];
10
+ type ThemeStyle = (typeof STYLES)[number];
11
+ declare const BRANDS: readonly ["etos"];
12
+ type ThemeBrand = (typeof BRANDS)[number];
13
+ interface ThemeConfig {
14
+ readonly mode: ThemeMode;
15
+ readonly brand: ThemeBrand | null;
16
+ readonly color: ThemeColor;
17
+ readonly style: ThemeStyle;
18
+ }
19
+ interface MaterialThemeConfig {
20
+ readonly mode?: ColorScheme;
21
+ readonly brand?: ThemeBrand | null;
22
+ readonly 'theme-brand'?: ThemeBrand | null;
23
+ readonly color?: ThemeColor;
24
+ readonly style?: ThemeStyle;
25
+ readonly defaultMode?: ColorScheme;
26
+ readonly defaultBrand?: ThemeBrand | null;
27
+ readonly defaultColor?: ThemeColor;
28
+ readonly defaultStyle?: ThemeStyle;
29
+ readonly defaultScheme?: ColorScheme;
30
+ readonly defaultTheme?: ThemeColor | string;
31
+ readonly storageKey?: string | null;
32
+ readonly schemeStorageKey?: string | null;
33
+ readonly themeStorageKey?: string | null;
34
+ readonly modeStorageKey?: string | null;
35
+ readonly brandStorageKey?: string | null;
36
+ readonly colorStorageKey?: string | null;
37
+ readonly styleStorageKey?: string | null;
38
+ }
39
+ interface ResolvedMaterialThemeConfig {
40
+ readonly defaultMode: ColorScheme;
41
+ readonly defaultBrand: ThemeBrand | null;
42
+ readonly defaultColor: ThemeColor;
43
+ readonly defaultStyle: ThemeStyle;
44
+ readonly modeStorageKey: string | null;
45
+ readonly brandStorageKey: string | null;
46
+ readonly colorStorageKey: string | null;
47
+ readonly styleStorageKey: string | null;
48
+ }
49
+ declare const MATERIAL_THEME_CONFIG: InjectionToken<MaterialThemeConfig>;
50
+ declare const DEFAULT_MATERIAL_THEME_CONFIG: ResolvedMaterialThemeConfig;
51
+ declare function isColorScheme(value: string | null | undefined): value is ColorScheme;
52
+ declare function isThemeColor(value: string | null | undefined): value is ThemeColor;
53
+ declare function isThemeStyle(value: string | null | undefined): value is ThemeStyle;
54
+ declare function isThemeBrand(value: string | null | undefined): value is ThemeBrand;
55
+
56
+ export { BRANDS, COLORS, COLOR_SCHEMES, DEFAULT_MATERIAL_THEME_CONFIG, MATERIAL_THEME_CONFIG, MODES, STYLES, isColorScheme, isThemeBrand, isThemeColor, isThemeStyle };
57
+ export type { ColorScheme, MaterialThemeConfig, ResolvedMaterialThemeConfig, ThemeBrand, ThemeColor, ThemeConfig, ThemeMode, ThemeStyle };
@@ -1,5 +1,6 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { InjectionToken, Provider, EnvironmentProviders } from '@angular/core';
3
+ import { ThemeConfig as ThemeConfig$1, ThemeMode as ThemeMode$1, ColorScheme as ColorScheme$1, ThemeBrand as ThemeBrand$1, ThemeColor as ThemeColor$1, ThemeStyle as ThemeStyle$1, MaterialThemeConfig as MaterialThemeConfig$1 } from '@ojiepermana/angular/theme/token';
3
4
 
4
5
  declare const MODES: readonly ["light", "dark"];
5
6
  type ThemeMode = (typeof MODES)[number];
@@ -18,41 +19,23 @@ interface ThemeConfig {
18
19
  readonly style: ThemeStyle;
19
20
  }
20
21
  interface MaterialThemeConfig {
21
- /** Initial mode preference. Supports `system` for first-visit OS detection. */
22
22
  readonly mode?: ColorScheme;
23
- /** Initial brand bundle. When set, it replaces the explicit color and style layers. */
24
23
  readonly brand?: ThemeBrand | null;
25
- /** Alias for `brand` to match the persisted `theme-brand` setting. */
26
24
  readonly 'theme-brand'?: ThemeBrand | null;
27
- /** Initial brand color layer. */
28
25
  readonly color?: ThemeColor;
29
- /** Initial style personality layer. */
30
26
  readonly style?: ThemeStyle;
31
- /** @deprecated Use `mode` instead. */
32
27
  readonly defaultMode?: ColorScheme;
33
- /** Default brand bundle. When set, it replaces the explicit color and style layers. */
34
28
  readonly defaultBrand?: ThemeBrand | null;
35
- /** @deprecated Use `color` instead. */
36
29
  readonly defaultColor?: ThemeColor;
37
- /** @deprecated Use `style` instead. */
38
30
  readonly defaultStyle?: ThemeStyle;
39
- /** @deprecated Use `defaultMode` instead. */
40
31
  readonly defaultScheme?: ColorScheme;
41
- /** @deprecated Use `defaultColor` instead. */
42
32
  readonly defaultTheme?: ThemeColor | string;
43
- /** @deprecated Use `modeStorageKey` instead. */
44
33
  readonly storageKey?: string | null;
45
- /** @deprecated Use `modeStorageKey` instead. */
46
34
  readonly schemeStorageKey?: string | null;
47
- /** @deprecated Use `colorStorageKey` instead. */
48
35
  readonly themeStorageKey?: string | null;
49
- /** localStorage key used to persist the mode preference. Set to `null` to disable persistence. */
50
36
  readonly modeStorageKey?: string | null;
51
- /** localStorage key used to persist the brand bundle. Set to `null` to disable persistence. */
52
37
  readonly brandStorageKey?: string | null;
53
- /** localStorage key used to persist the color layer. Set to `null` to disable persistence. */
54
38
  readonly colorStorageKey?: string | null;
55
- /** localStorage key used to persist the style layer. Set to `null` to disable persistence. */
56
39
  readonly styleStorageKey?: string | null;
57
40
  }
58
41
  interface ResolvedMaterialThemeConfig {
@@ -88,17 +71,17 @@ declare class ThemeService {
88
71
  readonly theme: _angular_core.Signal<"base" | "red" | "orange" | "amber" | "yellow" | "lime" | "green" | "emerald" | "teal" | "cyan" | "sky" | "blue" | "indigo" | "violet" | "purple" | "fuchsia" | "pink" | "rose">;
89
72
  readonly style: _angular_core.Signal<"default" | "sharp" | "brutal" | "soft">;
90
73
  readonly mode: _angular_core.Signal<"light" | "dark">;
91
- readonly snapshot: _angular_core.Signal<ThemeConfig>;
74
+ readonly snapshot: _angular_core.Signal<ThemeConfig$1>;
92
75
  readonly isDark: _angular_core.Signal<boolean>;
93
76
  constructor();
94
- setMode(mode: ThemeMode): void;
95
- setScheme(scheme: ColorScheme): void;
96
- setBrand(brand: ThemeBrand | null): void;
97
- setColor(color: ThemeColor): void;
98
- setTheme(theme: ThemeColor | string): void;
99
- setStyle(style: ThemeStyle): void;
100
- setAll(config: Partial<ThemeConfig> & {
101
- readonly scheme?: ColorScheme;
77
+ setMode(mode: ThemeMode$1): void;
78
+ setScheme(scheme: ColorScheme$1): void;
79
+ setBrand(brand: ThemeBrand$1 | null): void;
80
+ setColor(color: ThemeColor$1): void;
81
+ setTheme(theme: ThemeColor$1 | string): void;
82
+ setStyle(style: ThemeStyle$1): void;
83
+ setAll(config: Partial<ThemeConfig$1> & {
84
+ readonly scheme?: ColorScheme$1;
102
85
  }): void;
103
86
  toggleScheme(): void;
104
87
  toggleMode(): void;
@@ -123,48 +106,10 @@ declare class ThemeService {
123
106
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<ThemeService>;
124
107
  }
125
108
 
126
- /**
127
- * Opaque feature unit consumed by {@link provideMaterialTheme}. Mirrors
128
- * Angular's router/http feature pattern so add-ons can be composed without
129
- * widening the primary provider signature.
130
- */
131
109
  interface MaterialThemeFeature {
132
110
  readonly providers: Provider[];
133
111
  }
134
- /**
135
- * Bootstrap the shared theme for any `@ojiepermana/angular/*` entry point.
136
- *
137
- * By default wires up the theme config token and eagerly initializes `ThemeService`
138
- * so root theme attributes are applied during bootstrap. Opt in
139
- * to Angular Material defaults (ripple / form-field) via
140
- * {@link withMaterialDefaults}.
141
- * Supports shorthand `mode`, `color`, and `style` config keys.
142
- *
143
- * @example
144
- * export const appConfig: ApplicationConfig = {
145
- * providers: [
146
- * provideAnimations(),
147
- * provideMaterialTheme(
148
- * {
149
- * mode: 'system',
150
- * color: 'base',
151
- * style: 'soft',
152
- * },
153
- * withMaterialDefaults(),
154
- * ),
155
- * ],
156
- * };
157
- */
158
- declare function provideMaterialTheme(config?: MaterialThemeConfig, ...features: MaterialThemeFeature[]): EnvironmentProviders;
159
- /**
160
- * Opt-in Angular Material defaults tuned for the shared theme layer:
161
- *
162
- * - Disables the global Material ripple.
163
- * - Forces `appearance: 'outline'` + `subscriptSizing: 'dynamic'` on every
164
- * `mat-form-field`.
165
- *
166
- * Only apply when your app actually renders Angular Material components.
167
- */
112
+ declare function provideMaterialTheme(config?: MaterialThemeConfig$1, ...features: MaterialThemeFeature[]): EnvironmentProviders;
168
113
  declare function withMaterialDefaults(): MaterialThemeFeature;
169
114
 
170
115
  export { BRANDS, COLORS, COLOR_SCHEMES, DEFAULT_MATERIAL_THEME_CONFIG, MATERIAL_THEME_CONFIG, MODES, STYLES, ThemeService, isColorScheme, isThemeBrand, isThemeColor, isThemeStyle, provideMaterialTheme, withMaterialDefaults };
@@ -1 +0,0 @@
1
- {"version":3,"file":"ojiepermana-angular-layout-theme.mjs","sources":["../../../projects/angular/layout/theme/src/lib/theme-panel.component.ts","../../../projects/angular/layout/theme/ojiepermana-angular-layout-theme.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":";;;;;;MA4Da,sBAAsB,GAAG,IAAI,cAAc,CAAsB,wBAAwB;MAEzF,uBAAuB,GAAG,IAAI,cAAc,CAAuB,yBAAyB;AAwBzG,MAAM,mBAAmB,GAAG;IAC1B,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE;IAC5D,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE;IACzD,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE;IAClE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE;IAC/D,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE;IAClE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE;IAC5D,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE;IAC/D,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE;IACrE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE;IAC5D,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE;IAC5D,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE;IACzD,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE;IAC5D,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE;IAClE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE;IAClE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE;IAClE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE;IACrE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE;IAC5D,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE;CACG;AAEjE,MAAM,kBAAkB,GAAG;IACzB,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE;IAC/C,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;IAC9C,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;CACU;AAEhE,MAAM,mBAAmB,GAAG;IAC1B,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE;IAC7D,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE;IACvD,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE;IAC1D,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE;CACW;AAEjE,MAAM,mBAAmB,GAAG;IAC1B,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE;IACjE,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,mBAAmB,EAAE;IACvE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE;CACY;AAEtE,MAAM,oBAAoB,GAAG;IAC3B,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE;IACpD,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE;IACnE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE;CACiB;MAoM1D,mBAAmB,CAAA;AACb,IAAA,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC;IAChC,SAAS,GAAG,MAAM,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC9D,UAAU,GAAG,MAAM,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAExE,IAAA,SAAS,GAAG,KAAK,CAAU,IAAI,gFAAC;AAChC,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,4EAAC;AACzB,IAAA,KAAK,GAAG,KAAK,CAAS,aAAa,4EAAC;AACpC,IAAA,WAAW,GAAG,KAAK,CAAS,EAAE,kFAAC;AAC/B,IAAA,QAAQ,GAAG,KAAK,CAAS,EAAE,+EAAC;AAC5B,IAAA,YAAY,GAAG,KAAK,CAAS,EAAE,mFAAC;AAChC,IAAA,YAAY,GAAG,KAAK,CAAS,EAAE,mFAAC;AAChC,IAAA,UAAU,GAAG,KAAK,CAAkB,MAAM,iFAAC;AAC3C,IAAA,SAAS,GAAG,KAAK,CAAiB,OAAO,gFAAC;AAC1C,IAAA,UAAU,GAAG,KAAK,CAAkB,SAAS,iFAAC;AAC9C,IAAA,UAAU,GAAG,KAAK,CAAuB,UAAU,iFAAC;AACpD,IAAA,WAAW,GAAG,KAAK,CAAwB,WAAW,kFAAC;IAEvD,gBAAgB,GAAG,MAAM,EAAmB;IAC5C,eAAe,GAAG,MAAM,EAAkB;IAC1C,gBAAgB,GAAG,MAAM,EAAmB;IAC5C,gBAAgB,GAAG,MAAM,EAAwB;IACjD,iBAAiB,GAAG,MAAM,EAAyB;IAEzC,iBAAiB,GAAG,MAAM,CAAkB,IAAI,CAAC,UAAU,EAAE,wFAAC;IAC9D,gBAAgB,GAAG,MAAM,CAAiB,IAAI,CAAC,SAAS,EAAE,uFAAC;IAC3D,iBAAiB,GAAG,MAAM,CAAkB,IAAI,CAAC,UAAU,EAAE,wFAAC;IAC9D,iBAAiB,GAAG,MAAM,CAAuB,IAAI,CAAC,UAAU,EAAE,wFAAC;IACnE,kBAAkB,GAAG,MAAM,CAAwB,IAAI,CAAC,WAAW,EAAE,yFAAC;IAEtE,iBAAiB,GAAG,mBAAmB;IACvC,gBAAgB,GAAG,kBAAkB;IACrC,iBAAiB,GAAG,mBAAmB;IACvC,iBAAiB,GAAG,mBAAmB;IACvC,kBAAkB,GAAG,oBAAoB;AAEzC,IAAA,WAAW,GAAG,QAAQ,CAAC,MACxC,EAAE,CAAC,iGAAiG,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,kFACpH;IACkB,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AACxF,IAAA,oBAAoB,GAAG,QAAQ,CAChD,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,2FACrF;AACkB,IAAA,sBAAsB,GAAG,QAAQ,CAClD,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,iBAAiB,EAAE,CAAC,EAAE,KAAK,IAAI,EAAE,6FACtG;AAED,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAC7G,QAAA,CAAC,CAAC;QACF,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAC5G,QAAA,CAAC,CAAC;QACF,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAC7G,QAAA,CAAC,CAAC;QACF,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAC9G,QAAA,CAAC,CAAC;QACF,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACjH,QAAA,CAAC,CAAC;IACJ;AAEU,IAAA,aAAa,CAAC,KAAsB,EAAA;AAC5C,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;AACjC,QAAA,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC;AAC/B,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;IACnC;AAEU,IAAA,YAAY,CAAC,IAAoB,EAAA;AACzC,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;AAC/B,QAAA,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC;AAC/B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;IACjC;AAEU,IAAA,aAAa,CAAC,KAAsB,EAAA;AAC5C,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;AACjC,QAAA,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC;AAC/B,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;IACnC;AAEU,IAAA,aAAa,CAAC,IAA0B,EAAA;AAChD,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;AAChC,QAAA,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC;AAC9B,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;IAClC;AAEU,IAAA,cAAc,CAAC,KAA4B,EAAA;AACnD,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;AAClC,QAAA,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC;AAChC,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;IACpC;IAEU,qBAAqB,GAAA;AAC7B,QAAA,OAAO,gFAAgF;IACzF;AAEU,IAAA,sBAAsB,CAAC,MAAe,EAAA;AAC9C,QAAA,OAAO,EAAE,CACP,qDAAqD,EACrD;AACE,cAAE;cACA,oEAAoE,CACzE;IACH;AAEU,IAAA,mBAAmB,CAAC,MAAe,EAAA;AAC3C,QAAA,OAAO,EAAE,CACP,yBAAyB,EACzB;AACE,cAAE;cACA,kDAAkD,CACvD;IACH;AAEU,IAAA,iBAAiB,CAAC,MAAe,EAAA;AACzC,QAAA,OAAO,EAAE,CACP,wEAAwE,EACxE,MAAM,GAAG,iBAAiB,GAAG,uBAAuB,CACrD;IACH;IAEU,kBAAkB,CAAC,WAA+B,EAAE,QAAiB,EAAA;AAC7E,QAAA,OAAO,EAAE,CACP,sDAAsD,EACtD,WAAW,EACX,QAAQ,GAAG,uDAAuD,GAAG,EAAE,CACxE;IACH;AAEU,IAAA,OAAO,CAAC,IAAwB,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACtE;AAEQ,IAAA,UAAU,CAAC,IAAwB,EAAA;QACzC,QAAQ,IAAI;AACV,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,0bAA0b;AACnc,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,gNAAgN;AACzN,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,2PAA2P;AACpQ,YAAA,KAAK,eAAe;AAClB,gBAAA,OAAO,4LAA4L;AACrM,YAAA,KAAK,aAAa;AAChB,gBAAA,OAAO,4LAA4L;AACrM,YAAA,KAAK,cAAc;AACjB,gBAAA,OAAO,sNAAsN;AAC/N,YAAA,KAAK,YAAY;AACf,gBAAA,OAAO,mTAAmT;AAC5T,YAAA,KAAK,iBAAiB;AACpB,gBAAA,OAAO,qNAAqN;AAC9N,YAAA,KAAK,mBAAmB;AACtB,gBAAA,OAAO,sNAAsN;AAC/N,YAAA,KAAK,cAAc;AACjB,gBAAA,OAAO,gMAAgM;AACzM,YAAA,KAAK,YAAY;AACf,gBAAA,OAAO,yVAAyV;AAClW,YAAA,KAAK,iBAAiB;AACpB,gBAAA,OAAO,iPAAiP;AAC1P,YAAA,KAAK,YAAY;AACf,gBAAA,OAAO,mPAAmP;;IAEhQ;AAEQ,IAAA,UAAU,CAAC,KAAa,EAAA;QAC9B,MAAM,KAAK,GAAG;aACX,KAAK,CAAC,KAAK;aACX,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE;aACzB,MAAM,CAAC,OAAO;AACd,aAAA,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAEd,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACjB,YAAA,OAAO,IAAI;QACb;QAEA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IACnE;wGAnLW,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,gBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3LpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyLT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA9LS,eAAe,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAgMd,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAlM/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;oBAC1B,OAAO,EAAE,CAAC,eAAe,CAAC;oBAC1B,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,eAAe;AAC3B,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyLT,EAAA,CAAA;AACF,iBAAA;;;ACrUD;;AAEG;;;;"}