@ojiepermana/angular 22.1.11 → 22.1.13

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 (340) hide show
  1. package/README.md +32 -26
  2. package/chart/README.md +272 -0
  3. package/component/README.md +89 -0
  4. package/component/accordion/README.md +195 -0
  5. package/component/alert/README.md +184 -0
  6. package/component/alert-dialog/README.md +255 -0
  7. package/component/aspect-ratio/README.md +116 -0
  8. package/component/avatar/README.md +182 -0
  9. package/component/badge/README.md +143 -0
  10. package/component/breadcrumb/README.md +223 -0
  11. package/component/button/README.md +141 -0
  12. package/component/button-group/README.md +214 -0
  13. package/component/calendar/README.md +137 -0
  14. package/component/card/README.md +232 -0
  15. package/component/carousel/README.md +276 -0
  16. package/component/checkbox/README.md +153 -0
  17. package/component/collapsible/README.md +216 -0
  18. package/component/combobox/README.md +202 -0
  19. package/component/command/README.md +287 -0
  20. package/component/composer/README.md +241 -0
  21. package/component/context-menu/README.md +268 -0
  22. package/component/date-picker/README.md +202 -0
  23. package/component/dialog/README.md +276 -0
  24. package/component/drawer/README.md +147 -0
  25. package/component/dropdown-menu/README.md +336 -0
  26. package/component/editor/README.md +152 -0
  27. package/component/empty/README.md +193 -0
  28. package/component/form/README.md +216 -0
  29. package/component/hover-card/README.md +150 -0
  30. package/component/icon/README.md +25 -0
  31. package/component/input/README.md +160 -0
  32. package/component/input-group/README.md +245 -0
  33. package/component/input-otp/README.md +331 -0
  34. package/component/item/README.md +254 -0
  35. package/component/kanban/README.md +81 -0
  36. package/component/kbd/README.md +141 -0
  37. package/component/label/README.md +137 -0
  38. package/component/menubar/README.md +270 -0
  39. package/component/native-select/README.md +176 -0
  40. package/component/navigation-menu/README.md +165 -0
  41. package/component/pagination/README.md +151 -0
  42. package/component/pillbox/README.md +68 -0
  43. package/component/popover/README.md +54 -0
  44. package/component/progress/README.md +160 -0
  45. package/component/radio/README.md +212 -0
  46. package/component/resizable/README.md +178 -0
  47. package/component/scroll-area/README.md +150 -0
  48. package/component/select/README.md +228 -0
  49. package/component/separator/README.md +175 -0
  50. package/component/sheet/README.md +190 -0
  51. package/component/skeleton/README.md +158 -0
  52. package/component/slider/README.md +207 -0
  53. package/component/spinner/README.md +160 -0
  54. package/component/switch/README.md +170 -0
  55. package/component/table/README.md +292 -0
  56. package/component/tabs/README.md +220 -0
  57. package/component/textarea/README.md +169 -0
  58. package/component/timeline/README.md +94 -0
  59. package/component/toast/README.md +173 -0
  60. package/component/toggle/README.md +133 -0
  61. package/component/toggle-group/README.md +234 -0
  62. package/component/tooltip/README.md +230 -0
  63. package/fesm2022/ojiepermana-angular-chart-area.mjs +289 -3
  64. package/fesm2022/ojiepermana-angular-chart-bar.mjs +722 -3
  65. package/fesm2022/ojiepermana-angular-chart-core.mjs +1482 -3
  66. package/fesm2022/ojiepermana-angular-chart-line.mjs +294 -3
  67. package/fesm2022/ojiepermana-angular-chart-pie.mjs +291 -3
  68. package/fesm2022/ojiepermana-angular-chart-primitives.mjs +1301 -3
  69. package/fesm2022/ojiepermana-angular-chart-radar.mjs +421 -3
  70. package/fesm2022/ojiepermana-angular-chart-radial.mjs +295 -3
  71. package/fesm2022/ojiepermana-angular-chart-scatter.mjs +306 -3
  72. package/fesm2022/ojiepermana-angular-chart.mjs +12 -3
  73. package/fesm2022/ojiepermana-angular-component-accordion.mjs +267 -3
  74. package/fesm2022/ojiepermana-angular-component-alert-dialog.mjs +359 -3
  75. package/fesm2022/ojiepermana-angular-component-alert.mjs +101 -3
  76. package/fesm2022/ojiepermana-angular-component-aspect-ratio.mjs +31 -3
  77. package/fesm2022/ojiepermana-angular-component-avatar.mjs +139 -3
  78. package/fesm2022/ojiepermana-angular-component-badge.mjs +57 -3
  79. package/fesm2022/ojiepermana-angular-component-breadcrumb.mjs +192 -3
  80. package/fesm2022/ojiepermana-angular-component-button-group.mjs +95 -3
  81. package/fesm2022/ojiepermana-angular-component-button.mjs +73 -3
  82. package/fesm2022/ojiepermana-angular-component-calendar.mjs +718 -3
  83. package/fesm2022/ojiepermana-angular-component-card.mjs +167 -3
  84. package/fesm2022/ojiepermana-angular-component-carousel.mjs +326 -3
  85. package/fesm2022/ojiepermana-angular-component-checkbox.mjs +190 -3
  86. package/fesm2022/ojiepermana-angular-component-collapsible.mjs +117 -3
  87. package/fesm2022/ojiepermana-angular-component-combobox.mjs +327 -3
  88. package/fesm2022/ojiepermana-angular-component-command.mjs +351 -3
  89. package/fesm2022/ojiepermana-angular-component-composer.mjs +359 -3
  90. package/fesm2022/ojiepermana-angular-component-context-menu.mjs +158 -3
  91. package/fesm2022/ojiepermana-angular-component-date-picker.mjs +482 -3
  92. package/fesm2022/ojiepermana-angular-component-dialog.mjs +400 -3
  93. package/fesm2022/ojiepermana-angular-component-drawer.mjs +1 -3
  94. package/fesm2022/ojiepermana-angular-component-dropdown-menu.mjs +689 -3
  95. package/fesm2022/ojiepermana-angular-component-editor.mjs +511 -3
  96. package/fesm2022/ojiepermana-angular-component-empty.mjs +134 -3
  97. package/fesm2022/ojiepermana-angular-component-form.mjs +438 -3
  98. package/fesm2022/ojiepermana-angular-component-hover-card.mjs +273 -3
  99. package/fesm2022/ojiepermana-angular-component-icon.mjs +139 -3
  100. package/fesm2022/ojiepermana-angular-component-input-group.mjs +176 -3
  101. package/fesm2022/ojiepermana-angular-component-input-otp.mjs +550 -3
  102. package/fesm2022/ojiepermana-angular-component-input.mjs +52 -3
  103. package/fesm2022/ojiepermana-angular-component-item.mjs +264 -3
  104. package/fesm2022/ojiepermana-angular-component-kanban.mjs +310 -3
  105. package/fesm2022/ojiepermana-angular-component-kbd.mjs +48 -3
  106. package/fesm2022/ojiepermana-angular-component-label.mjs +27 -3
  107. package/fesm2022/ojiepermana-angular-component-menubar.mjs +327 -3
  108. package/fesm2022/ojiepermana-angular-component-native-select.mjs +62 -3
  109. package/fesm2022/ojiepermana-angular-component-navigation-menu.mjs +378 -3
  110. package/fesm2022/ojiepermana-angular-component-pagination.mjs +238 -3
  111. package/fesm2022/ojiepermana-angular-component-pillbox.mjs +999 -3
  112. package/fesm2022/ojiepermana-angular-component-popover.mjs +201 -3
  113. package/fesm2022/ojiepermana-angular-component-progress.mjs +57 -3
  114. package/fesm2022/ojiepermana-angular-component-radio.mjs +180 -3
  115. package/fesm2022/ojiepermana-angular-component-resizable.mjs +493 -3
  116. package/fesm2022/ojiepermana-angular-component-scroll-area.mjs +51 -3
  117. package/fesm2022/ojiepermana-angular-component-segmented-control.mjs +227 -3
  118. package/fesm2022/ojiepermana-angular-component-select.mjs +609 -3
  119. package/fesm2022/ojiepermana-angular-component-separator.mjs +31 -3
  120. package/fesm2022/ojiepermana-angular-component-sheet.mjs +407 -3
  121. package/fesm2022/ojiepermana-angular-component-skeleton.mjs +25 -3
  122. package/fesm2022/ojiepermana-angular-component-slider.mjs +456 -3
  123. package/fesm2022/ojiepermana-angular-component-spinner.mjs +56 -3
  124. package/fesm2022/ojiepermana-angular-component-switch.mjs +145 -3
  125. package/fesm2022/ojiepermana-angular-component-table.mjs +155 -3
  126. package/fesm2022/ojiepermana-angular-component-tabs.mjs +315 -3
  127. package/fesm2022/ojiepermana-angular-component-textarea.mjs +46 -3
  128. package/fesm2022/ojiepermana-angular-component-timeline.mjs +237 -3
  129. package/fesm2022/ojiepermana-angular-component-toast.mjs +241 -3
  130. package/fesm2022/ojiepermana-angular-component-toggle-group.mjs +290 -3
  131. package/fesm2022/ojiepermana-angular-component-toggle.mjs +76 -3
  132. package/fesm2022/ojiepermana-angular-component-tooltip.mjs +519 -3
  133. package/fesm2022/ojiepermana-angular-component-utils-core.mjs +310 -3
  134. package/fesm2022/ojiepermana-angular-component-utils-overlay.mjs +62 -3
  135. package/fesm2022/ojiepermana-angular-component-utils-scale.mjs +34 -3
  136. package/fesm2022/ojiepermana-angular-component-utils.mjs +3 -2
  137. package/fesm2022/ojiepermana-angular-component.mjs +4 -4
  138. package/fesm2022/ojiepermana-angular-navigation-core.mjs +21 -3
  139. package/fesm2022/ojiepermana-angular-navigation-icon.mjs +20 -3
  140. package/fesm2022/ojiepermana-angular-navigation-navigation-badge-count.component-CDBxQ8rk.mjs +91 -0
  141. package/fesm2022/ojiepermana-angular-navigation-navigation-dockbar-menu.component-DBQHdvGa.mjs +512 -0
  142. package/fesm2022/ojiepermana-angular-navigation-navigation-entry-grid.component-Cd-jh6tg.mjs +623 -0
  143. package/fesm2022/ojiepermana-angular-navigation-navigation-flyout-menu.component-BCGvhoYj.mjs +404 -0
  144. package/fesm2022/ojiepermana-angular-navigation-navigation-horizontal.component-Dk_03e-6.mjs +466 -0
  145. package/fesm2022/ojiepermana-angular-navigation-ojiepermana-angular-navigation-DNKU6viC.mjs +2642 -0
  146. package/fesm2022/ojiepermana-angular-navigation-service.mjs +725 -3
  147. package/fesm2022/ojiepermana-angular-navigation-types.mjs +65 -4
  148. package/fesm2022/ojiepermana-angular-navigation.mjs +4 -10
  149. package/fesm2022/ojiepermana-angular-sdk.mjs +204 -4
  150. package/fesm2022/ojiepermana-angular-theme-component-settings.mjs +1387 -3
  151. package/fesm2022/ojiepermana-angular-theme-layout-services.mjs +331 -3
  152. package/fesm2022/ojiepermana-angular-theme-layout-types.mjs +45 -4
  153. package/fesm2022/ojiepermana-angular-theme-layout-wrapper.mjs +1044 -3
  154. package/fesm2022/ojiepermana-angular-theme-layout.mjs +729 -3
  155. package/fesm2022/ojiepermana-angular-theme-page-core.mjs +381 -3
  156. package/fesm2022/ojiepermana-angular-theme-page-filter.mjs +267 -3
  157. package/fesm2022/ojiepermana-angular-theme-page-root.mjs +361 -3
  158. package/fesm2022/ojiepermana-angular-theme-page-side.mjs +198 -3
  159. package/fesm2022/ojiepermana-angular-theme-page-slots.mjs +110 -3
  160. package/fesm2022/ojiepermana-angular-theme-page.mjs +7 -2
  161. package/fesm2022/ojiepermana-angular-theme-shell-services.mjs +338 -3
  162. package/fesm2022/ojiepermana-angular-theme-shell-types.mjs +160 -4
  163. package/fesm2022/ojiepermana-angular-theme-shell.mjs +811 -3
  164. package/fesm2022/ojiepermana-angular-theme-styles.mjs +783 -3
  165. package/fesm2022/ojiepermana-angular-theme.mjs +4 -4
  166. package/fesm2022/ojiepermana-angular.mjs +6 -11
  167. package/navigation/README.md +374 -0
  168. package/package.json +81 -20
  169. package/sdk/README.md +212 -0
  170. package/sdk/schematics/collection.json +20 -0
  171. package/sdk/schematics/init/index.js +83 -0
  172. package/sdk/schematics/init/schema.json +19 -0
  173. package/sdk/schematics/ng-add/index.js +147 -0
  174. package/sdk/schematics/ng-add/schema.json +14 -0
  175. package/sdk/schematics/package.json +3 -0
  176. package/sdk/schematics/sdk/index.js +175 -0
  177. package/sdk/schematics/sdk/schema.json +19 -0
  178. package/sdk/sdk.config.example.json +24 -0
  179. package/sdk/src/config/loader.js +43 -0
  180. package/sdk/src/config/schema.js +59 -0
  181. package/sdk/src/emit/client.js +251 -0
  182. package/sdk/src/emit/metadata.js +310 -0
  183. package/sdk/src/emit/models.js +104 -0
  184. package/sdk/src/emit/navigation.js +56 -0
  185. package/sdk/src/emit/operations.js +118 -0
  186. package/sdk/src/emit/public-api.js +54 -0
  187. package/sdk/src/emit/services.js +110 -0
  188. package/sdk/src/engine.js +67 -0
  189. package/sdk/src/layout/per-domain.js +360 -0
  190. package/sdk/src/package.json +3 -0
  191. package/sdk/src/parser/bundle.js +25 -0
  192. package/sdk/src/parser/ir.js +429 -0
  193. package/sdk/src/parser/types.js +7 -0
  194. package/sdk/src/render/template.js +152 -0
  195. package/sdk/src/writer/index.js +286 -0
  196. package/theme/README.md +126 -0
  197. package/theme/component/settings/README.md +135 -0
  198. package/theme/layout/README.md +539 -0
  199. package/theme/page/README.md +453 -0
  200. package/theme/shell/README.md +340 -0
  201. package/theme/styles/README.md +178 -0
  202. package/theme/styles/css/base/components.css +553 -0
  203. package/theme/styles/css/base/index.css +14 -0
  204. package/theme/styles/css/base/package.css +9 -0
  205. package/theme/styles/css/base/prefers-dark.css +86 -0
  206. package/theme/styles/css/base/print.css +62 -0
  207. package/theme/styles/css/base/status.css +38 -0
  208. package/theme/styles/css/base/tailwind.css +165 -0
  209. package/theme/styles/css/base/theme.css +374 -0
  210. package/theme/styles/css/base/tokens.css +361 -0
  211. package/theme/styles/css/color/amber.css +72 -0
  212. package/theme/styles/css/color/blue.css +72 -0
  213. package/theme/styles/css/color/brand.css +38 -0
  214. package/theme/styles/css/color/cyan.css +72 -0
  215. package/theme/styles/css/color/emerald.css +72 -0
  216. package/theme/styles/css/color/fuchsia.css +72 -0
  217. package/theme/styles/css/color/green.css +72 -0
  218. package/theme/styles/css/color/index.css +19 -0
  219. package/theme/styles/css/color/indigo.css +72 -0
  220. package/theme/styles/css/color/lime.css +72 -0
  221. package/theme/styles/css/color/orange.css +72 -0
  222. package/theme/styles/css/color/pink.css +72 -0
  223. package/theme/styles/css/color/purple.css +72 -0
  224. package/theme/styles/css/color/red.css +72 -0
  225. package/theme/styles/css/color/rose.css +72 -0
  226. package/theme/styles/css/color/sky.css +72 -0
  227. package/theme/styles/css/color/teal.css +72 -0
  228. package/theme/styles/css/color/violet.css +72 -0
  229. package/theme/styles/css/color/yellow.css +72 -0
  230. package/theme/styles/css/index.css +18 -0
  231. package/theme/styles/css/neutral/gray.css +63 -0
  232. package/theme/styles/css/neutral/index.css +11 -0
  233. package/theme/styles/css/neutral/mauve.css +63 -0
  234. package/theme/styles/css/neutral/mist.css +63 -0
  235. package/theme/styles/css/neutral/neutral.css +63 -0
  236. package/theme/styles/css/neutral/olive.css +63 -0
  237. package/theme/styles/css/neutral/slate.css +63 -0
  238. package/theme/styles/css/neutral/stone.css +63 -0
  239. package/theme/styles/css/neutral/taupe.css +63 -0
  240. package/theme/styles/css/neutral/zinc.css +63 -0
  241. package/theme/styles/css/radius/index.css +30 -0
  242. package/theme/styles/css/space/index.css +20 -0
  243. package/types/ojiepermana-angular-chart-area.d.ts +76 -1
  244. package/types/ojiepermana-angular-chart-bar.d.ts +201 -1
  245. package/types/ojiepermana-angular-chart-core.d.ts +811 -1
  246. package/types/ojiepermana-angular-chart-line.d.ts +75 -1
  247. package/types/ojiepermana-angular-chart-pie.d.ts +131 -1
  248. package/types/ojiepermana-angular-chart-primitives.d.ts +291 -1
  249. package/types/ojiepermana-angular-chart-radar.d.ts +116 -1
  250. package/types/ojiepermana-angular-chart-radial.d.ts +116 -1
  251. package/types/ojiepermana-angular-chart-scatter.d.ts +125 -1
  252. package/types/ojiepermana-angular-chart.d.ts +2 -1
  253. package/types/ojiepermana-angular-component-accordion.d.ts +85 -1
  254. package/types/ojiepermana-angular-component-alert-dialog.d.ts +140 -1
  255. package/types/ojiepermana-angular-component-alert.d.ts +42 -1
  256. package/types/ojiepermana-angular-component-aspect-ratio.d.ts +12 -1
  257. package/types/ojiepermana-angular-component-avatar.d.ts +56 -1
  258. package/types/ojiepermana-angular-component-badge.d.ts +24 -1
  259. package/types/ojiepermana-angular-component-breadcrumb.d.ts +46 -1
  260. package/types/ojiepermana-angular-component-button-group.d.ts +26 -1
  261. package/types/ojiepermana-angular-component-button.d.ts +27 -1
  262. package/types/ojiepermana-angular-component-calendar.d.ts +111 -1
  263. package/types/ojiepermana-angular-component-card.d.ts +69 -1
  264. package/types/ojiepermana-angular-component-carousel.d.ts +86 -1
  265. package/types/ojiepermana-angular-component-checkbox.d.ts +42 -1
  266. package/types/ojiepermana-angular-component-collapsible.d.ts +42 -1
  267. package/types/ojiepermana-angular-component-combobox.d.ts +60 -1
  268. package/types/ojiepermana-angular-component-command.d.ts +130 -1
  269. package/types/ojiepermana-angular-component-composer.d.ts +90 -1
  270. package/types/ojiepermana-angular-component-context-menu.d.ts +54 -1
  271. package/types/ojiepermana-angular-component-date-picker.d.ts +109 -1
  272. package/types/ojiepermana-angular-component-dialog.d.ts +136 -1
  273. package/types/ojiepermana-angular-component-drawer.d.ts +1 -1
  274. package/types/ojiepermana-angular-component-dropdown-menu.d.ts +248 -1
  275. package/types/ojiepermana-angular-component-editor.d.ts +135 -1
  276. package/types/ojiepermana-angular-component-empty.d.ts +50 -1
  277. package/types/ojiepermana-angular-component-form.d.ts +159 -1
  278. package/types/ojiepermana-angular-component-hover-card.d.ts +75 -1
  279. package/types/ojiepermana-angular-component-icon.d.ts +89 -1
  280. package/types/ojiepermana-angular-component-input-group.d.ts +51 -1
  281. package/types/ojiepermana-angular-component-input-otp.d.ts +155 -1
  282. package/types/ojiepermana-angular-component-input.d.ts +21 -1
  283. package/types/ojiepermana-angular-component-item.d.ts +93 -1
  284. package/types/ojiepermana-angular-component-kanban.d.ts +70 -1
  285. package/types/ojiepermana-angular-component-kbd.d.ts +16 -1
  286. package/types/ojiepermana-angular-component-label.d.ts +11 -1
  287. package/types/ojiepermana-angular-component-menubar.d.ts +93 -1
  288. package/types/ojiepermana-angular-component-native-select.d.ts +26 -1
  289. package/types/ojiepermana-angular-component-navigation-menu.d.ts +104 -1
  290. package/types/ojiepermana-angular-component-pagination.d.ts +33 -1
  291. package/types/ojiepermana-angular-component-pillbox.d.ts +222 -1
  292. package/types/ojiepermana-angular-component-popover.d.ts +66 -1
  293. package/types/ojiepermana-angular-component-progress.d.ts +17 -1
  294. package/types/ojiepermana-angular-component-radio.d.ts +60 -1
  295. package/types/ojiepermana-angular-component-resizable.d.ts +117 -1
  296. package/types/ojiepermana-angular-component-scroll-area.d.ts +19 -1
  297. package/types/ojiepermana-angular-component-segmented-control.d.ts +58 -1
  298. package/types/ojiepermana-angular-component-select.d.ts +122 -1
  299. package/types/ojiepermana-angular-component-separator.d.ts +14 -1
  300. package/types/ojiepermana-angular-component-sheet.d.ts +130 -1
  301. package/types/ojiepermana-angular-component-skeleton.d.ts +10 -1
  302. package/types/ojiepermana-angular-component-slider.d.ts +83 -1
  303. package/types/ojiepermana-angular-component-spinner.d.ts +13 -1
  304. package/types/ojiepermana-angular-component-switch.d.ts +44 -1
  305. package/types/ojiepermana-angular-component-table.d.ts +57 -1
  306. package/types/ojiepermana-angular-component-tabs.d.ts +124 -1
  307. package/types/ojiepermana-angular-component-textarea.d.ts +17 -1
  308. package/types/ojiepermana-angular-component-timeline.d.ts +64 -1
  309. package/types/ojiepermana-angular-component-toast.d.ts +64 -1
  310. package/types/ojiepermana-angular-component-toggle-group.d.ts +90 -1
  311. package/types/ojiepermana-angular-component-toggle.d.ts +25 -1
  312. package/types/ojiepermana-angular-component-tooltip.d.ts +143 -1
  313. package/types/ojiepermana-angular-component-utils-core.d.ts +184 -1
  314. package/types/ojiepermana-angular-component-utils-overlay.d.ts +21 -1
  315. package/types/ojiepermana-angular-component-utils-scale.d.ts +19 -1
  316. package/types/ojiepermana-angular-component-utils.d.ts +2 -1
  317. package/types/ojiepermana-angular-component.d.ts +2 -1
  318. package/types/ojiepermana-angular-navigation-core.d.ts +59 -1
  319. package/types/ojiepermana-angular-navigation-icon.d.ts +12 -1
  320. package/types/ojiepermana-angular-navigation-service.d.ts +116 -1
  321. package/types/ojiepermana-angular-navigation-types.d.ts +144 -1
  322. package/types/ojiepermana-angular-navigation.d.ts +507 -1
  323. package/types/ojiepermana-angular-sdk.d.ts +89 -1
  324. package/types/ojiepermana-angular-theme-component-settings.d.ts +154 -1
  325. package/types/ojiepermana-angular-theme-layout-services.d.ts +147 -1
  326. package/types/ojiepermana-angular-theme-layout-types.d.ts +40 -1
  327. package/types/ojiepermana-angular-theme-layout-wrapper.d.ts +299 -1
  328. package/types/ojiepermana-angular-theme-layout.d.ts +129 -1
  329. package/types/ojiepermana-angular-theme-page-core.d.ts +157 -1
  330. package/types/ojiepermana-angular-theme-page-filter.d.ts +77 -1
  331. package/types/ojiepermana-angular-theme-page-root.d.ts +88 -1
  332. package/types/ojiepermana-angular-theme-page-side.d.ts +50 -1
  333. package/types/ojiepermana-angular-theme-page-slots.d.ts +40 -1
  334. package/types/ojiepermana-angular-theme-page.d.ts +5 -1
  335. package/types/ojiepermana-angular-theme-shell-services.d.ts +193 -1
  336. package/types/ojiepermana-angular-theme-shell-types.d.ts +105 -1
  337. package/types/ojiepermana-angular-theme-shell.d.ts +100 -1
  338. package/types/ojiepermana-angular-theme-styles.d.ts +319 -1
  339. package/types/ojiepermana-angular-theme.d.ts +2 -1
  340. package/types/ojiepermana-angular.d.ts +5 -5
@@ -1,7 +1,733 @@
1
- export * from '@ojiepermana/angular-theme/layout';
1
+ import * as i0 from '@angular/core';
2
+ import { inject, input, computed, DestroyRef, Component, effect, booleanAttribute, ElementRef } from '@angular/core';
3
+ import { cn } from '@ojiepermana/angular/component/utils/core';
4
+ import { LayoutLoadingService, LayoutService } from '@ojiepermana/angular/theme/layout/services';
5
+ export { LAYOUT_LOADING_HIDE_DELAY_MS, LAYOUT_LOADING_INITIAL_PROGRESS, LAYOUT_LOADING_SKIP, LAYOUT_LOADING_TRICKLE_CEILING, LAYOUT_LOADING_TRICKLE_INTERVAL_MS, LayoutLoadingService, LayoutService, layoutLoadingInterceptor } from '@ojiepermana/angular/theme/layout/services';
6
+ import { LAYOUT_LOCKED_WIDTH, LAYOUT_DEFAULT_SURFACE, LAYOUT_DEFAULT_APPEARANCE, LAYOUT_DEFAULT_WIDTH } from '@ojiepermana/angular/theme/layout/types';
7
+ export { LAYOUT_APPEARANCES, LAYOUT_APPEARANCE_STORAGE_KEY, LAYOUT_DEFAULT_APPEARANCE, LAYOUT_DEFAULT_SURFACE, LAYOUT_DEFAULT_TYPE, LAYOUT_DEFAULT_WIDTH, LAYOUT_LOCKED_WIDTH, LAYOUT_SURFACES, LAYOUT_SURFACE_STORAGE_KEY, LAYOUT_TYPES, LAYOUT_TYPE_STORAGE_KEY, LAYOUT_WIDTHS, LAYOUT_WIDTH_STORAGE_KEY, isUiLayoutAppearance, isUiLayoutSurface, isUiLayoutType, isUiLayoutWidth } from '@ojiepermana/angular/theme/layout/types';
8
+ import { DOCUMENT } from '@angular/common';
9
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
10
+ import { Router, NavigationEnd } from '@angular/router';
2
11
 
3
- // Generated by scripts/gen-umbrella-entrypoints.mjs — do not edit by hand.
12
+ /**
13
+ * A thin progress line along the top edge of the viewport, running left to right.
14
+ * `Layout` renders it automatically and `LayoutLoadingService` drives it, so it
15
+ * turns itself on while a route navigation or a data load is in flight.
16
+ *
17
+ * It can also be placed at the application root, so the bar is already up during
18
+ * the first navigation; any extra instance inside `Layout` goes inert on its own,
19
+ * and the line is never drawn twice.
20
+ */
21
+ class LayoutLoadingComponent {
22
+ loading = inject(LayoutLoadingService);
23
+ hostId = this.loading.registerHost();
24
+ class = input('', /* @ts-ignore */
25
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
26
+ ariaLabel = input('Loading page', /* @ts-ignore */
27
+ ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
28
+ isPrimary = computed(() => this.loading.primaryHostId() === this.hostId, /* @ts-ignore */
29
+ ...(ngDevMode ? [{ debugName: "isPrimary" }] : /* istanbul ignore next */ []));
30
+ state = computed(() => {
31
+ if (!this.isPrimary()) {
32
+ return 'inert';
33
+ }
34
+ return this.loading.active() ? 'active' : 'idle';
35
+ }, /* @ts-ignore */
36
+ ...(ngDevMode ? [{ debugName: "state" }] : /* istanbul ignore next */ []));
37
+ hostClasses = computed(() => cn('pointer-events-none fixed inset-x-0 top-0 z-50 block h-0.5', this.class()), /* @ts-ignore */
38
+ ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
39
+ roundedProgress = computed(() => Math.round(this.loading.progress()), /* @ts-ignore */
40
+ ...(ngDevMode ? [{ debugName: "roundedProgress" }] : /* istanbul ignore next */ []));
41
+ constructor() {
42
+ inject(DestroyRef).onDestroy(() => this.loading.unregisterHost(this.hostId));
43
+ }
44
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutLoadingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
45
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: LayoutLoadingComponent, isStandalone: true, selector: "LayoutLoading", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-layout-loading": "" }, properties: { "class": "hostClasses()", "attr.data-state": "state()" } }, ngImport: i0, template: `
46
+ @if (isPrimary() && loading.active()) {
47
+ <div
48
+ role="progressbar"
49
+ data-layout-loading-track
50
+ class="h-full w-full"
51
+ [attr.aria-label]="ariaLabel()"
52
+ aria-valuemin="0"
53
+ aria-valuemax="100"
54
+ [attr.aria-valuenow]="roundedProgress()"
55
+ >
56
+ <div
57
+ data-layout-loading-bar
58
+ class="h-full rounded-r-full bg-primary transition-[width] duration-200 ease-out"
59
+ [style.width.%]="loading.progress()"
60
+ ></div>
61
+ </div>
62
+ }
63
+ `, isInline: true });
64
+ }
65
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutLoadingComponent, decorators: [{
66
+ type: Component,
67
+ args: [{
68
+ selector: 'LayoutLoading',
69
+ host: {
70
+ '[class]': 'hostClasses()',
71
+ 'data-layout-loading': '',
72
+ '[attr.data-state]': 'state()',
73
+ },
74
+ template: `
75
+ @if (isPrimary() && loading.active()) {
76
+ <div
77
+ role="progressbar"
78
+ data-layout-loading-track
79
+ class="h-full w-full"
80
+ [attr.aria-label]="ariaLabel()"
81
+ aria-valuemin="0"
82
+ aria-valuemax="100"
83
+ [attr.aria-valuenow]="roundedProgress()"
84
+ >
85
+ <div
86
+ data-layout-loading-bar
87
+ class="h-full rounded-r-full bg-primary transition-[width] duration-200 ease-out"
88
+ [style.width.%]="loading.progress()"
89
+ ></div>
90
+ </div>
91
+ }
92
+ `,
93
+ }]
94
+ }], ctorParameters: () => [], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }] } });
95
+
96
+ class LayoutComponent {
97
+ layout = inject(LayoutService);
98
+ surface = input(null, /* @ts-ignore */
99
+ ...(ngDevMode ? [{ debugName: "surface" }] : /* istanbul ignore next */ []));
100
+ appearance = input(null, /* @ts-ignore */
101
+ ...(ngDevMode ? [{ debugName: "appearance" }] : /* istanbul ignore next */ []));
102
+ layoutAppearanceAttribute = input(null, { ...(ngDevMode ? { debugName: "layoutAppearanceAttribute" } : /* istanbul ignore next */ {}), alias: 'layout-appearance' });
103
+ width = input(null, /* @ts-ignore */
104
+ ...(ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []));
105
+ /**
106
+ * Layout type (`vertical` | `horizontal` | `empty` | `fluid`). When set it is the
107
+ * source of truth and overrides the projected `Layout*` variant; `null` leaves the
108
+ * variant in charge.
109
+ */
110
+ type = input(null, { ...(ngDevMode ? { debugName: "type" } : /* istanbul ignore next */ {}), alias: 'layout-type' });
111
+ class = input('', /* @ts-ignore */
112
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
113
+ appearanceInput = computed(() => this.appearance() ?? this.layoutAppearanceAttribute(), /* @ts-ignore */
114
+ ...(ngDevMode ? [{ debugName: "appearanceInput" }] : /* istanbul ignore next */ []));
115
+ resolvedSurface = computed(() => this.surface() ?? this.layout.surface(), /* @ts-ignore */
116
+ ...(ngDevMode ? [{ debugName: "resolvedSurface" }] : /* istanbul ignore next */ []));
117
+ resolvedAppearance = computed(() => this.appearanceInput() ?? this.layout.appearance(), /* @ts-ignore */
118
+ ...(ngDevMode ? [{ debugName: "resolvedAppearance" }] : /* istanbul ignore next */ []));
119
+ // The shell-mode lock outranks a host-declared width: on desktop, tablet, and
120
+ // mobile the app IS the surface, so there is no page for the frame to be inset
121
+ // within, whatever the consumer asked for.
122
+ resolvedWidth = computed(() => this.layout.widthLocked() ? LAYOUT_LOCKED_WIDTH : (this.width() ?? this.layout.width()), /* @ts-ignore */
123
+ ...(ngDevMode ? [{ debugName: "resolvedWidth" }] : /* istanbul ignore next */ []));
124
+ resolvedType = computed(() => this.type() ?? this.layout.type(), /* @ts-ignore */
125
+ ...(ngDevMode ? [{ debugName: "resolvedType" }] : /* istanbul ignore next */ []));
126
+ isBorderRail = computed(() => this.resolvedAppearance() === 'border-rail', /* @ts-ignore */
127
+ ...(ngDevMode ? [{ debugName: "isBorderRail" }] : /* istanbul ignore next */ []));
128
+ isFluidFrame = computed(() => this.resolvedWidth() === 'fluid' && this.resolvedType() === 'fluid', /* @ts-ignore */
129
+ ...(ngDevMode ? [{ debugName: "isFluidFrame" }] : /* istanbul ignore next */ []));
130
+ isFullFlat = computed(() => this.resolvedWidth() === 'full' && !this.isBorderRail(), /* @ts-ignore */
131
+ ...(ngDevMode ? [{ debugName: "isFullFlat" }] : /* istanbul ignore next */ []));
132
+ // The `grid-line` surface forces square frame corners (like `border-rail`) so
133
+ // the mosaic grid runs cleanly to the edges instead of being clipped by the
134
+ // theme-radius curve.
135
+ isGridLineSurface = computed(() => this.resolvedSurface() === 'grid-line', /* @ts-ignore */
136
+ ...(ngDevMode ? [{ debugName: "isGridLineSurface" }] : /* istanbul ignore next */ []));
137
+ showsInsetRails = computed(() => {
138
+ const layoutType = this.resolvedType();
139
+ return this.isBorderRail() && (layoutType === 'horizontal' || layoutType === 'vertical');
140
+ }, /* @ts-ignore */
141
+ ...(ngDevMode ? [{ debugName: "showsInsetRails" }] : /* istanbul ignore next */ []));
142
+ frameStageClasses = computed(() => cn('relative grid min-h-0 min-w-0 grid-cols-1 grid-rows-1', this.frameSizeClasses()), /* @ts-ignore */
143
+ ...(ngDevMode ? [{ debugName: "frameStageClasses" }] : /* istanbul ignore next */ []));
144
+ railAnchorClasses = computed(() => 'relative h-full min-h-0 w-full min-w-0', /* @ts-ignore */
145
+ ...(ngDevMode ? [{ debugName: "railAnchorClasses" }] : /* istanbul ignore next */ []));
146
+ contentShellClasses = computed(() => cn('relative z-10 min-h-0 min-w-0', this.isFluidFrame() ? 'h-auto w-auto max-h-full max-w-full' : 'h-full w-full', this.isBorderRail() ? 'overflow-visible' : 'overflow-hidden'), /* @ts-ignore */
147
+ ...(ngDevMode ? [{ debugName: "contentShellClasses" }] : /* istanbul ignore next */ []));
148
+ hostClasses = computed(() => cn(
149
+ // Size comes from --layout-viewport-height / -width so the layout can be
150
+ // nested. Height is 100dvh by default (the layout IS the viewport) and a
151
+ // <Shell> retunes it to `auto` so the titlebar keeps its own slice. Width is
152
+ // 100% by default; `frame='modern'` retunes it to `auto` so the shell's inset
153
+ // margins actually shrink the panel instead of pushing it off the window.
154
+ // These go through variables rather than being overridden in CSS because
155
+ // these are Tailwind UTILITIES — a rule in @layer components could never win
156
+ // against them, whatever its specificity.
157
+ 'relative isolate h-[var(--layout-viewport-height,100dvh)] w-[var(--layout-viewport-width,100%)] min-w-0 box-border overflow-hidden text-foreground', this.isFluidFrame() ? 'grid place-items-center' : 'block', this.surfaceClasses(), this.widthPaddingClasses(), this.class()), /* @ts-ignore */
158
+ ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
159
+ frameClasses = computed(() => {
160
+ const gridLine = this.isGridLineSurface();
161
+ return cn(
162
+ // Solid frame (FluxUI-style): the panel stays --background (constant
163
+ // white / near-black) while the tinted --layout-canvas shows only around
164
+ // it. The old translucent veil (bg-background/55 + blur) is gone — the
165
+ // decorative host surfaces/rails no longer bleed through the frame.
166
+ 'relative min-h-0 min-w-0 bg-background', this.frameSizeClasses(),
167
+ // Frame border color:
168
+ // • border-rail → the accent-driven rail color var (--layout-rail-color / -opacity),
169
+ // so the frame border (--layout-rail-width) matches the rail lines.
170
+ // • grid-line flat → the accent at --layout-grid-line-border-opacity (0.484).
171
+ // • everything else → --border.
172
+ this.isBorderRail()
173
+ ? 'border-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]'
174
+ : gridLine
175
+ ? 'border-[hsl(var(--accent-foreground)/var(--layout-grid-line-border-opacity))]'
176
+ : 'border-border',
177
+ // flat: the outer frame rounds with the active theme-radius
178
+ // (--layout-frame-radius → --radius-lg → --radius-base). border-rail keeps
179
+ // square corners for its grid-rail aesthetic. `grid-line` is always a clearly
180
+ // bordered square box (rounded-none + a visible border in every width) so the
181
+ // mosaic reads as a framed panel.
182
+ this.isBorderRail()
183
+ ? 'overflow-visible border-[length:var(--layout-rail-width)]'
184
+ : gridLine
185
+ ? 'overflow-hidden border rounded-none'
186
+ : this.isFullFlat()
187
+ ? 'overflow-hidden'
188
+ : 'overflow-hidden border rounded-[var(--layout-frame-radius)]');
189
+ }, /* @ts-ignore */
190
+ ...(ngDevMode ? [{ debugName: "frameClasses" }] : /* istanbul ignore next */ []));
191
+ frameLayerClasses = computed(() => cn('col-start-1 row-start-1', this.frameClasses()), /* @ts-ignore */
192
+ ...(ngDevMode ? [{ debugName: "frameLayerClasses" }] : /* istanbul ignore next */ []));
193
+ constructor() {
194
+ effect(() => {
195
+ const surface = this.surface();
196
+ if (surface !== null) {
197
+ this.layout.setSurface(surface, { persist: false });
198
+ }
199
+ else {
200
+ this.layout.registerSurface(LAYOUT_DEFAULT_SURFACE);
201
+ }
202
+ const appearance = this.appearanceInput();
203
+ if (appearance !== null) {
204
+ this.layout.setAppearance(appearance, { persist: false });
205
+ }
206
+ else {
207
+ this.layout.registerAppearance(LAYOUT_DEFAULT_APPEARANCE);
208
+ }
209
+ // While the shell mode locks the width, the incoming value is NOT recorded.
210
+ // Hosts commonly feed `width` straight back from `LayoutService.width()`, which
211
+ // already reports the locked width — writing that back would overwrite the
212
+ // user's real preference with the lock and lose it for good.
213
+ const width = this.width();
214
+ if (this.layout.widthLocked()) {
215
+ // no-op: resolvedWidth() forces the locked width regardless
216
+ }
217
+ else if (width !== null) {
218
+ this.layout.setWidth(width, { persist: false });
219
+ }
220
+ else {
221
+ this.layout.registerWidth(LAYOUT_DEFAULT_WIDTH);
222
+ }
223
+ // Type: bila consumer mendaftarkan `layout-type`, itu jadi sumber kebenaran (override
224
+ // variant). Bila null, dibiarkan — variant `Layout*` yang menetapkan (registerType default
225
+ // sengaja TIDAK dipanggil agar tidak menimpa type yang sudah di-set variant).
226
+ const type = this.type();
227
+ if (type !== null) {
228
+ this.layout.setType(type, { persist: false });
229
+ }
230
+ });
231
+ }
232
+ surfaceClasses() {
233
+ switch (this.resolvedSurface()) {
234
+ case 'grid':
235
+ // `grid`: two-axis 1px gradient. The line color is --layout-grid-color —
236
+ // the pattern LINE tier at --layout-grid-line-opacity (base/theme.css):
237
+ // the active theme-neutral's family hue (saturation-raised so it reads),
238
+ // or the accent at pinned lightness on theme-neutral='base'. Classic HSL
239
+ // triplets keep the same mapping without relative-color support.
240
+ return '[--layout-grid-size:2rem] bg-layout-canvas bg-[linear-gradient(var(--layout-grid-color)_1px,transparent_1px),linear-gradient(to_right,var(--layout-grid-color)_1px,transparent_1px)] bg-position-[center_center] bg-size-[var(--layout-grid-size)_var(--layout-grid-size)]';
241
+ case 'grid-line':
242
+ // `grid-line`: a richer "mosaic" cousin of `grid`, painted by the
243
+ // `.layout-surface-grid-line` mask layer (base/components.css). One mask
244
+ // carries the faint uniform grid PLUS scattered bright highlight squares
245
+ // and a few subtly-lit cells, so the layers stay pixel-aligned. The glow
246
+ // is the pattern HIGHLIGHT tier: the active neutral family's hue, or the
247
+ // accent on theme-neutral='base' — lightness pinned to
248
+ // --layout-grid-highlight-l either way so brightness stays put. (The
249
+ // frame border stays accent on every neutral: it is chrome, not pattern.)
250
+ return 'bg-layout-canvas layout-surface-grid-line';
251
+ case 'honeycomb':
252
+ // True honeycomb: tileable hexagon outline painted by the
253
+ // `.layout-surface-honeycomb` mask layer (base/components.css), so it
254
+ // stays token-colored across themes. `bg-layout-canvas` is the base.
255
+ return 'bg-layout-canvas layout-surface-honeycomb';
256
+ case 'matrix':
257
+ // `matrix`: a scattered binary (0/1) field painted by the
258
+ // `.layout-surface-matrix` mask layer (base/components.css). The glyphs
259
+ // are tinted with the pattern NODE tier (the active neutral family's
260
+ // hue; `--primary` on theme-neutral='base') and carry
261
+ // baked-in per-glyph opacity, so the field reads as a soft "digital"
262
+ // signature that recolors with the neutral/theme.
263
+ return 'bg-layout-canvas layout-surface-matrix';
264
+ case 'circuit':
265
+ // `circuit`: a tileable PCB / circuit-board texture — routed traces with
266
+ // 45° bends, via nodes, and concentric ring pads. Painted by the
267
+ // `.layout-surface-circuit` class (base/components.css) as TWO stacked,
268
+ // pixel-aligned mask layers (a single mask only carries alpha, so two
269
+ // colors need two layers): `::before` strokes the copper traces in the
270
+ // pattern LINE tier (`--layout-circuit-trace-color`) and `::after`
271
+ // paints the via nodes/pads in the pattern NODE tier
272
+ // (`--layout-circuit-node-color`) — the neutral family's hue on every
273
+ // neutral except 'base', where the traces tint with the accent and the
274
+ // nodes glow with `--primary`. Both recolor across neutrals + dark mode.
275
+ return 'bg-layout-canvas layout-surface-circuit';
276
+ case 'line-vertical':
277
+ // Single-axis rules: --layout-line-color is the pattern LINE tier at
278
+ // --layout-grid-dot-opacity (a step above the dense multi-axis tier),
279
+ // composed in base/theme.css like --layout-grid-color.
280
+ return 'bg-layout-canvas bg-[linear-gradient(to_right,var(--layout-line-color)_1px,transparent_1px)] bg-position-[center_center] bg-size-[2rem_2rem]';
281
+ case 'line-horizontal':
282
+ return 'bg-layout-canvas bg-[linear-gradient(var(--layout-line-color)_1px,transparent_1px)] bg-position-[center_center] bg-size-[2rem_2rem]';
283
+ default:
284
+ return 'bg-layout-canvas';
285
+ }
286
+ }
287
+ widthPaddingClasses() {
288
+ if (this.isFullFlat())
289
+ return '';
290
+ switch (this.resolvedWidth()) {
291
+ case 'wide':
292
+ return 'p-4 lg:p-12';
293
+ case 'container':
294
+ return 'p-4 lg:px-0 lg:py-16';
295
+ case 'fluid':
296
+ return 'p-4 sm:p-6 lg:p-8';
297
+ default:
298
+ return 'p-4'; // full + border-rail
299
+ }
300
+ }
301
+ frameSizeClasses() {
302
+ if (this.isFluidFrame()) {
303
+ return 'h-auto w-auto max-h-full max-w-full';
304
+ }
305
+ return this.resolvedWidth() === 'container'
306
+ ? 'h-full w-full lg:container lg:mx-auto'
307
+ : 'h-full w-full';
308
+ }
309
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
310
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: LayoutComponent, isStandalone: true, selector: "Layout", inputs: { surface: { classPropertyName: "surface", publicName: "surface", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, layoutAppearanceAttribute: { classPropertyName: "layoutAppearanceAttribute", publicName: "layout-appearance", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "layout-type", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-layout-root": "" }, properties: { "class": "hostClasses()", "attr.data-surface": "resolvedSurface()", "attr.data-layout-appearance": "resolvedAppearance()", "attr.data-layout-width": "resolvedWidth()", "attr.data-layout-type": "resolvedType()" } }, ngImport: i0, template: `
311
+ <LayoutLoading />
312
+
313
+ <div data-layout-stage [class]="frameStageClasses()">
314
+ @if (isBorderRail()) {
315
+ <div
316
+ aria-hidden="true"
317
+ data-layout-rail
318
+ class="pointer-events-none col-start-1 row-start-1 z-0 overflow-visible"
319
+ >
320
+ <div data-layout-rail-anchor [class]="railAnchorClasses()">
321
+ <div
322
+ data-layout-rail-top-left-horizontal
323
+ class="absolute top-0 right-full h-(--layout-rail-width) w-[calc((100vw-100%)/2)] bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
324
+ ></div>
325
+ <div
326
+ data-layout-rail-top-left-vertical
327
+ class="absolute bottom-full left-0 h-[calc((100dvh-100%)/2)] w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
328
+ ></div>
329
+ <div
330
+ data-layout-rail-top-right-horizontal
331
+ class="absolute top-0 left-full h-(--layout-rail-width) w-[calc((100vw-100%)/2)] bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
332
+ ></div>
333
+ <div
334
+ data-layout-rail-top-right-vertical
335
+ class="absolute bottom-full right-0 h-[calc((100dvh-100%)/2)] w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
336
+ ></div>
337
+ <div
338
+ data-layout-rail-bottom-left-horizontal
339
+ class="absolute bottom-0 right-full h-(--layout-rail-width) w-[calc((100vw-100%)/2)] bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
340
+ ></div>
341
+ <div
342
+ data-layout-rail-bottom-left-vertical
343
+ class="absolute top-full left-0 h-[calc((100dvh-100%)/2)] w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
344
+ ></div>
345
+ <div
346
+ data-layout-rail-bottom-right-horizontal
347
+ class="absolute bottom-0 left-full h-(--layout-rail-width) w-[calc((100vw-100%)/2)] bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
348
+ ></div>
349
+ <div
350
+ data-layout-rail-bottom-right-vertical
351
+ class="absolute top-full right-0 h-[calc((100dvh-100%)/2)] w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
352
+ ></div>
353
+
354
+ @if (showsInsetRails()) {
355
+ <div
356
+ data-layout-horizontal-top-rail
357
+ class="absolute inset-x-0 top-12 h-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
358
+ ></div>
359
+ <div
360
+ data-layout-horizontal-top-left-extension
361
+ class="absolute top-12 right-full h-(--layout-rail-width) w-[calc((100vw-100%)/2)] bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
362
+ ></div>
363
+ <div
364
+ data-layout-horizontal-top-right-extension
365
+ class="absolute top-12 left-full h-(--layout-rail-width) w-[calc((100vw-100%)/2)] bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
366
+ ></div>
367
+ <div
368
+ data-layout-horizontal-bottom-rail
369
+ class="absolute inset-x-0 bottom-12 h-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
370
+ ></div>
371
+ <div
372
+ data-layout-horizontal-bottom-left-extension
373
+ class="absolute bottom-12 right-full h-(--layout-rail-width) w-[calc((100vw-100%)/2)] bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
374
+ ></div>
375
+ <div
376
+ data-layout-horizontal-bottom-right-extension
377
+ class="absolute bottom-12 left-full h-(--layout-rail-width) w-[calc((100vw-100%)/2)] bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
378
+ ></div>
379
+
380
+ <div
381
+ data-layout-vertical-left-rail
382
+ class="absolute inset-y-0 -left-4 w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
383
+ ></div>
384
+ <div
385
+ data-layout-vertical-left-top-extension
386
+ class="absolute bottom-full -left-4 h-[calc((100dvh-100%)/2)] w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
387
+ ></div>
388
+ <div
389
+ data-layout-vertical-left-bottom-extension
390
+ class="absolute top-full -left-4 h-[calc((100dvh-100%)/2)] w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
391
+ ></div>
392
+ <div
393
+ data-layout-vertical-right-rail
394
+ class="absolute inset-y-0 -right-4 w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
395
+ ></div>
396
+ <div
397
+ data-layout-vertical-right-top-extension
398
+ class="absolute bottom-full -right-4 h-[calc((100dvh-100%)/2)] w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
399
+ ></div>
400
+ <div
401
+ data-layout-vertical-right-bottom-extension
402
+ class="absolute top-full -right-4 h-[calc((100dvh-100%)/2)] w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
403
+ ></div>
404
+ }
405
+ </div>
406
+ </div>
407
+ }
408
+
409
+ <div data-layout-frame [class]="frameLayerClasses()">
410
+ <div data-layout-content-shell [class]="contentShellClasses()">
411
+ <ng-content />
412
+ </div>
413
+ </div>
414
+ </div>
415
+ `, isInline: true, dependencies: [{ kind: "component", type: LayoutLoadingComponent, selector: "LayoutLoading", inputs: ["class", "ariaLabel"] }] });
416
+ }
417
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutComponent, decorators: [{
418
+ type: Component,
419
+ args: [{
420
+ selector: 'Layout',
421
+ imports: [LayoutLoadingComponent],
422
+ host: {
423
+ '[class]': 'hostClasses()',
424
+ 'data-layout-root': '',
425
+ '[attr.data-surface]': 'resolvedSurface()',
426
+ '[attr.data-layout-appearance]': 'resolvedAppearance()',
427
+ '[attr.data-layout-width]': 'resolvedWidth()',
428
+ '[attr.data-layout-type]': 'resolvedType()',
429
+ },
430
+ template: `
431
+ <LayoutLoading />
432
+
433
+ <div data-layout-stage [class]="frameStageClasses()">
434
+ @if (isBorderRail()) {
435
+ <div
436
+ aria-hidden="true"
437
+ data-layout-rail
438
+ class="pointer-events-none col-start-1 row-start-1 z-0 overflow-visible"
439
+ >
440
+ <div data-layout-rail-anchor [class]="railAnchorClasses()">
441
+ <div
442
+ data-layout-rail-top-left-horizontal
443
+ class="absolute top-0 right-full h-(--layout-rail-width) w-[calc((100vw-100%)/2)] bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
444
+ ></div>
445
+ <div
446
+ data-layout-rail-top-left-vertical
447
+ class="absolute bottom-full left-0 h-[calc((100dvh-100%)/2)] w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
448
+ ></div>
449
+ <div
450
+ data-layout-rail-top-right-horizontal
451
+ class="absolute top-0 left-full h-(--layout-rail-width) w-[calc((100vw-100%)/2)] bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
452
+ ></div>
453
+ <div
454
+ data-layout-rail-top-right-vertical
455
+ class="absolute bottom-full right-0 h-[calc((100dvh-100%)/2)] w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
456
+ ></div>
457
+ <div
458
+ data-layout-rail-bottom-left-horizontal
459
+ class="absolute bottom-0 right-full h-(--layout-rail-width) w-[calc((100vw-100%)/2)] bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
460
+ ></div>
461
+ <div
462
+ data-layout-rail-bottom-left-vertical
463
+ class="absolute top-full left-0 h-[calc((100dvh-100%)/2)] w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
464
+ ></div>
465
+ <div
466
+ data-layout-rail-bottom-right-horizontal
467
+ class="absolute bottom-0 left-full h-(--layout-rail-width) w-[calc((100vw-100%)/2)] bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
468
+ ></div>
469
+ <div
470
+ data-layout-rail-bottom-right-vertical
471
+ class="absolute top-full right-0 h-[calc((100dvh-100%)/2)] w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
472
+ ></div>
473
+
474
+ @if (showsInsetRails()) {
475
+ <div
476
+ data-layout-horizontal-top-rail
477
+ class="absolute inset-x-0 top-12 h-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
478
+ ></div>
479
+ <div
480
+ data-layout-horizontal-top-left-extension
481
+ class="absolute top-12 right-full h-(--layout-rail-width) w-[calc((100vw-100%)/2)] bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
482
+ ></div>
483
+ <div
484
+ data-layout-horizontal-top-right-extension
485
+ class="absolute top-12 left-full h-(--layout-rail-width) w-[calc((100vw-100%)/2)] bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
486
+ ></div>
487
+ <div
488
+ data-layout-horizontal-bottom-rail
489
+ class="absolute inset-x-0 bottom-12 h-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
490
+ ></div>
491
+ <div
492
+ data-layout-horizontal-bottom-left-extension
493
+ class="absolute bottom-12 right-full h-(--layout-rail-width) w-[calc((100vw-100%)/2)] bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
494
+ ></div>
495
+ <div
496
+ data-layout-horizontal-bottom-right-extension
497
+ class="absolute bottom-12 left-full h-(--layout-rail-width) w-[calc((100vw-100%)/2)] bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
498
+ ></div>
499
+
500
+ <div
501
+ data-layout-vertical-left-rail
502
+ class="absolute inset-y-0 -left-4 w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
503
+ ></div>
504
+ <div
505
+ data-layout-vertical-left-top-extension
506
+ class="absolute bottom-full -left-4 h-[calc((100dvh-100%)/2)] w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
507
+ ></div>
508
+ <div
509
+ data-layout-vertical-left-bottom-extension
510
+ class="absolute top-full -left-4 h-[calc((100dvh-100%)/2)] w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
511
+ ></div>
512
+ <div
513
+ data-layout-vertical-right-rail
514
+ class="absolute inset-y-0 -right-4 w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
515
+ ></div>
516
+ <div
517
+ data-layout-vertical-right-top-extension
518
+ class="absolute bottom-full -right-4 h-[calc((100dvh-100%)/2)] w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
519
+ ></div>
520
+ <div
521
+ data-layout-vertical-right-bottom-extension
522
+ class="absolute top-full -right-4 h-[calc((100dvh-100%)/2)] w-(--layout-rail-width) bg-[hsl(var(--layout-rail-color)/var(--layout-rail-opacity))]"
523
+ ></div>
524
+ }
525
+ </div>
526
+ </div>
527
+ }
528
+
529
+ <div data-layout-frame [class]="frameLayerClasses()">
530
+ <div data-layout-content-shell [class]="contentShellClasses()">
531
+ <ng-content />
532
+ </div>
533
+ </div>
534
+ </div>
535
+ `,
536
+ }]
537
+ }], ctorParameters: () => [], propDecorators: { surface: [{ type: i0.Input, args: [{ isSignal: true, alias: "surface", required: false }] }], appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: false }] }], layoutAppearanceAttribute: [{ type: i0.Input, args: [{ isSignal: true, alias: "layout-appearance", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "layout-type", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
538
+
539
+ class LayoutVerticalComponent {
540
+ layout = inject(LayoutService);
541
+ class = input('', /* @ts-ignore */
542
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
543
+ classes = computed(() => cn('grid h-full min-h-0 w-full min-w-0 grid-cols-[auto_minmax(0,1fr)]', this.layout.appearance() === 'border-rail' ? 'overflow-visible' : 'overflow-hidden', this.class()), /* @ts-ignore */
544
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
545
+ constructor() {
546
+ this.layout.setType('vertical', { persist: false });
547
+ }
548
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutVerticalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
549
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: LayoutVerticalComponent, isStandalone: true, selector: "LayoutVertical", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-layout-variant": "", "data-layout-type": "vertical" }, properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true });
550
+ }
551
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutVerticalComponent, decorators: [{
552
+ type: Component,
553
+ args: [{
554
+ selector: 'LayoutVertical',
555
+ host: {
556
+ '[class]': 'classes()',
557
+ 'data-layout-variant': '',
558
+ 'data-layout-type': 'vertical',
559
+ },
560
+ template: `<ng-content />`,
561
+ }]
562
+ }], ctorParameters: () => [], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
563
+
564
+ class LayoutHorizontalComponent {
565
+ layout = inject(LayoutService);
566
+ class = input('', /* @ts-ignore */
567
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
568
+ classes = computed(() => cn('flex h-full min-h-0 w-full min-w-0 flex-col overflow-hidden', this.class()), /* @ts-ignore */
569
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
570
+ constructor() {
571
+ this.layout.setType('horizontal', { persist: false });
572
+ }
573
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutHorizontalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
574
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: LayoutHorizontalComponent, isStandalone: true, selector: "LayoutHorizontal", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-layout-variant": "", "data-layout-type": "horizontal" }, properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true });
575
+ }
576
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutHorizontalComponent, decorators: [{
577
+ type: Component,
578
+ args: [{
579
+ selector: 'LayoutHorizontal',
580
+ host: {
581
+ '[class]': 'classes()',
582
+ 'data-layout-variant': '',
583
+ 'data-layout-type': 'horizontal',
584
+ },
585
+ template: `<ng-content />`,
586
+ }]
587
+ }], ctorParameters: () => [], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
588
+
589
+ class LayoutEmptyComponent {
590
+ layout = inject(LayoutService);
591
+ class = input('', /* @ts-ignore */
592
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
593
+ classes = computed(() => cn('h-full min-h-0 w-full min-w-0 overflow-hidden', this.class()), /* @ts-ignore */
594
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
595
+ constructor() {
596
+ this.layout.setType('empty', { persist: false });
597
+ }
598
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutEmptyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
599
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: LayoutEmptyComponent, isStandalone: true, selector: "LayoutEmpty", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-layout-variant": "", "data-layout-type": "empty" }, properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true });
600
+ }
601
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutEmptyComponent, decorators: [{
602
+ type: Component,
603
+ args: [{
604
+ selector: 'LayoutEmpty',
605
+ host: {
606
+ '[class]': 'classes()',
607
+ 'data-layout-variant': '',
608
+ 'data-layout-type': 'empty',
609
+ },
610
+ template: `<ng-content />`,
611
+ }]
612
+ }], ctorParameters: () => [], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
613
+
614
+ class LayoutFluidComponent {
615
+ layout = inject(LayoutService);
616
+ class = input('', /* @ts-ignore */
617
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
618
+ classes = computed(() => cn('grid min-h-0 min-w-0 place-items-center overflow-auto', this.layout.width() === 'fluid' ? 'h-auto w-auto max-h-full max-w-full' : 'h-full w-full', this.class()), /* @ts-ignore */
619
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
620
+ constructor() {
621
+ this.layout.setType('fluid', { persist: false });
622
+ }
623
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutFluidComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
624
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: LayoutFluidComponent, isStandalone: true, selector: "LayoutFluid", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-layout-variant": "", "data-layout-type": "fluid" }, properties: { "class": "classes()" } }, ngImport: i0, template: `<ng-content />`, isInline: true });
625
+ }
626
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutFluidComponent, decorators: [{
627
+ type: Component,
628
+ args: [{
629
+ selector: 'LayoutFluid',
630
+ host: {
631
+ '[class]': 'classes()',
632
+ 'data-layout-variant': '',
633
+ 'data-layout-type': 'fluid',
634
+ },
635
+ template: `<ng-content />`,
636
+ }]
637
+ }], ctorParameters: () => [], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
638
+
639
+ class LayoutNavigationComponent {
640
+ layout = inject(LayoutService);
641
+ ariaLabel = input('Layout navigation', /* @ts-ignore */
642
+ ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
643
+ /** Turn off when the child `<Navigation>` is already the semantic navigation landmark. */
644
+ landmark = input(true, { ...(ngDevMode ? { debugName: "landmark" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
645
+ class = input('', /* @ts-ignore */
646
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
647
+ classes = computed(() => {
648
+ const layoutType = this.layout.type();
649
+ return cn('relative block min-h-0 min-w-0', layoutType === 'horizontal' &&
650
+ 'h-(--layout-topbar-height) min-h-(--layout-topbar-height) w-full shrink-0 overflow-visible',
651
+ // overflow-visible: clipping diatur host <Navigation>; overlay nav (aside
652
+ // drawer dockbar, preview rail) keluar dari kolom rail collapsed dan overflow-hidden
653
+ // di sini ikut ter-scroll oleh focus scroll-into-view sehingga rail hilang.
654
+ layoutType === 'vertical' && 'h-full w-max max-w-full shrink-0 overflow-visible',
655
+ // empty & fluid = layout fokus-konten: slot nav boleh tetap diproyeksikan agar struktur
656
+ // konsumen seragam (`LayoutNavigation` + `LayoutContent`), tapi nav-nya disembunyikan.
657
+ (layoutType === 'empty' || layoutType === 'fluid') && 'hidden', this.class());
658
+ }, /* @ts-ignore */
659
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
660
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutNavigationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
661
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: LayoutNavigationComponent, isStandalone: true, selector: "LayoutNavigation", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, landmark: { classPropertyName: "landmark", publicName: "landmark", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-layout-navigation": "" }, properties: { "class": "classes()", "attr.role": "landmark() ? \"navigation\" : null", "attr.aria-label": "landmark() ? ariaLabel() || null : null", "attr.data-layout-type": "layout.type()", "attr.data-layout-appearance": "layout.appearance()" } }, ngImport: i0, template: ` <ng-content /> `, isInline: true });
662
+ }
663
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutNavigationComponent, decorators: [{
664
+ type: Component,
665
+ args: [{
666
+ selector: 'LayoutNavigation',
667
+ host: {
668
+ '[class]': 'classes()',
669
+ 'data-layout-navigation': '',
670
+ '[attr.role]': 'landmark() ? "navigation" : null',
671
+ '[attr.aria-label]': 'landmark() ? ariaLabel() || null : null',
672
+ '[attr.data-layout-type]': 'layout.type()',
673
+ '[attr.data-layout-appearance]': 'layout.appearance()',
674
+ },
675
+ template: ` <ng-content /> `,
676
+ }]
677
+ }], propDecorators: { ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], landmark: [{ type: i0.Input, args: [{ isSignal: true, alias: "landmark", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
678
+
679
+ class LayoutContentComponent {
680
+ layout = inject(LayoutService);
681
+ document = inject(DOCUMENT, { optional: true });
682
+ host = inject((ElementRef));
683
+ router = inject(Router, { optional: true });
684
+ class = input('', /* @ts-ignore */
685
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
686
+ /** Stable target for the skip link. */
687
+ contentId = input('main-content', { ...(ngDevMode ? { debugName: "contentId" } : /* istanbul ignore next */ {}), alias: 'content-id' });
688
+ /** Move focus to the main landmark after NavigationEnd (opt-in). */
689
+ focusOnNavigation = input(false, { ...(ngDevMode ? { debugName: "focusOnNavigation" } : /* istanbul ignore next */ {}), alias: 'focus-on-navigation' });
690
+ classes = computed(() => {
691
+ const layoutType = this.layout.type();
692
+ return cn('block min-h-0 min-w-0 overflow-auto', layoutType === 'horizontal' && 'flex-1', layoutType === 'vertical' && 'h-full', layoutType === 'empty' && 'h-full w-full',
693
+ // fluid: konten dipusatkan oleh LayoutFluid; batasi ke ukuran frame agar tetap scrollable.
694
+ layoutType === 'fluid' && 'max-h-full max-w-full', this.layout.width() === 'container' && 'w-full lg:container lg:mx-auto', this.class());
695
+ }, /* @ts-ignore */
696
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
697
+ constructor() {
698
+ this.router?.events.pipe(takeUntilDestroyed()).subscribe((event) => {
699
+ if (!(event instanceof NavigationEnd) || !this.focusOnNavigation()) {
700
+ return;
701
+ }
702
+ const view = this.document?.defaultView;
703
+ if (!view) {
704
+ return;
705
+ }
706
+ view.requestAnimationFrame(() => this.host.nativeElement.focus());
707
+ });
708
+ }
709
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
710
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: LayoutContentComponent, isStandalone: true, selector: "LayoutContent", inputs: { class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, contentId: { classPropertyName: "contentId", publicName: "content-id", isSignal: true, isRequired: false, transformFunction: null }, focusOnNavigation: { classPropertyName: "focusOnNavigation", publicName: "focus-on-navigation", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-layout-content": "", "role": "main", "tabindex": "-1" }, properties: { "class": "classes()", "attr.id": "contentId()", "attr.data-layout-type": "layout.type()", "attr.data-layout-width": "layout.width()" } }, ngImport: i0, template: `<ng-content />`, isInline: true });
711
+ }
712
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: LayoutContentComponent, decorators: [{
713
+ type: Component,
714
+ args: [{
715
+ selector: 'LayoutContent',
716
+ host: {
717
+ '[class]': 'classes()',
718
+ 'data-layout-content': '',
719
+ '[attr.id]': 'contentId()',
720
+ role: 'main',
721
+ tabindex: '-1',
722
+ '[attr.data-layout-type]': 'layout.type()',
723
+ '[attr.data-layout-width]': 'layout.width()',
724
+ },
725
+ template: `<ng-content />`,
726
+ }]
727
+ }], ctorParameters: () => [], propDecorators: { class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], contentId: [{ type: i0.Input, args: [{ isSignal: true, alias: "content-id", required: false }] }], focusOnNavigation: [{ type: i0.Input, args: [{ isSignal: true, alias: "focus-on-navigation", required: false }] }] } });
4
728
 
5
729
  /**
6
730
  * Generated bundle index. Do not edit.
7
- */
731
+ */
732
+
733
+ export { LayoutComponent, LayoutContentComponent, LayoutEmptyComponent, LayoutFluidComponent, LayoutHorizontalComponent, LayoutLoadingComponent, LayoutNavigationComponent, LayoutVerticalComponent };