@ojiepermana/angular 22.1.10 → 22.1.12

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 +373 -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,815 @@
1
- export * from '@ojiepermana/angular-theme/shell';
1
+ import * as i0 from '@angular/core';
2
+ import { inject, input, computed, Component, booleanAttribute } from '@angular/core';
3
+ import { cn } from '@ojiepermana/angular/component/utils/core';
4
+ import { ShellService } from '@ojiepermana/angular/theme/shell/services';
5
+ export { SHELL_WINDOW_BRIDGE, ShellService, WEB_SHELL_WINDOW_BRIDGE, createTauriShellWindowBridge, isTauriRuntime, provideShellWindowBridge, provideTauriShellWindowBridge } from '@ojiepermana/angular/theme/shell/services';
6
+ import { SHELL_DEFAULT_DEVICE, SHELL_DEFAULT_COLOR, SHELL_DEFAULT_FRAME, resolveShellDeviceForMode, resolveShellFrameForMode } from '@ojiepermana/angular/theme/shell/types';
7
+ export { SHELL_COLORS, SHELL_COLOR_STORAGE_KEY, SHELL_DEFAULT_COLOR, SHELL_DEFAULT_DEVICE, SHELL_DEFAULT_FRAME, SHELL_DEFAULT_MODE, SHELL_DEFAULT_PLATFORM, SHELL_DEFAULT_WINDOW_STATE, SHELL_DEVICES, SHELL_DEVICE_STORAGE_KEY, SHELL_FRAMES, SHELL_FRAME_STORAGE_KEY, SHELL_MODES, SHELL_MODE_DEVICES, SHELL_MODE_STORAGE_KEY, SHELL_PLATFORMS, SHELL_WINDOW_STATES, defaultShellDeviceForMode, isShellColor, isShellDevice, isShellDeviceForMode, isShellFrame, isShellMode, isShellPlatform, isShellWindowState, normalizeShellColor, normalizeShellDevice, normalizeShellFrame, normalizeShellMode, resolveShellDeviceForMode, resolveShellFrameForMode, shellDevicesForMode } from '@ojiepermana/angular/theme/shell/types';
8
+ import { NavigationContainerComponent, NavigationFlyoutComponent, NavigationHeaderComponent, NavigationFooterComponent } from '@ojiepermana/angular/navigation';
9
+ import { NAVIGATION_ADAPTER } from '@ojiepermana/angular/navigation/core';
10
+ import { LayoutService } from '@ojiepermana/angular/theme/layout/services';
11
+ import { LayoutIdentityService, LAYOUT_DESKTOP_NAVIGATION_DATA_ID, LayoutBrand, LayoutUser } from '@ojiepermana/angular/theme/layout/wrapper';
2
12
 
3
- // Generated by scripts/gen-umbrella-entrypoints.mjs — do not edit by hand.
13
+ let shellNavigationFlyoutInstanceId = 0;
14
+ /**
15
+ * Internal desktop-titlebar launcher. `LayoutWrapperDefault` publishes the
16
+ * navigation data only while its desktop nav is active, so this component stays
17
+ * absent for desktop windows that still render a navbar, flyout, or side rail.
18
+ */
19
+ class ShellNavigationFlyoutComponent {
20
+ navigation = inject(NAVIGATION_ADAPTER);
21
+ layout = inject(LayoutService, { optional: true });
22
+ identity = inject(LayoutIdentityService, { optional: true });
23
+ enabled = input(true, /* @ts-ignore */
24
+ ...(ngDevMode ? [{ debugName: "enabled" }] : /* istanbul ignore next */ []));
25
+ icon = input('apps', /* @ts-ignore */
26
+ ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
27
+ label = input('Open navigation', /* @ts-ignore */
28
+ ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
29
+ navigationId = `__shell-navigation-${(shellNavigationFlyoutInstanceId += 1)}`;
30
+ navigationSource = this.navigation.data(LAYOUT_DESKTOP_NAVIGATION_DATA_ID);
31
+ navigationData = computed(() => this.navigationSource(), /* @ts-ignore */
32
+ ...(ngDevMode ? [{ debugName: "navigationData" }] : /* istanbul ignore next */ []));
33
+ showsFlyout = computed(() => this.enabled() && this.navigationData().length > 0, /* @ts-ignore */
34
+ ...(ngDevMode ? [{ debugName: "showsFlyout" }] : /* istanbul ignore next */ []));
35
+ appearance = computed(() => this.layout?.appearance() ?? 'flat', /* @ts-ignore */
36
+ ...(ngDevMode ? [{ debugName: "appearance" }] : /* istanbul ignore next */ []));
37
+ brand = computed(() => this.identity?.brand() ?? null, /* @ts-ignore */
38
+ ...(ngDevMode ? [{ debugName: "brand" }] : /* istanbul ignore next */ []));
39
+ user = computed(() => this.identity?.user() ?? null, /* @ts-ignore */
40
+ ...(ngDevMode ? [{ debugName: "user" }] : /* istanbul ignore next */ []));
41
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: ShellNavigationFlyoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
42
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: ShellNavigationFlyoutComponent, isStandalone: true, selector: "ShellNavigationFlyout", inputs: { enabled: { classPropertyName: "enabled", publicName: "enabled", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-shell-navigation-flyout": "showsFlyout() ? \"\" : null" }, styleAttribute: "--nav-flyout-floating-width: 100vw; --nav-flyout-floating-max-width: 100vw; --nav-flyout-floating-radius: 0 0 var(--shell-frame-radius) var(--shell-frame-radius);", classAttribute: "contents" }, ngImport: i0, template: `
43
+ @if (showsFlyout()) {
44
+ <Navigation
45
+ [id]="navigationId"
46
+ [data]="navigationData()"
47
+ ariaLabel="Application navigation"
48
+ class="h-full w-auto shrink-0"
49
+ >
50
+ <NavigationFlyout
51
+ [icon]="icon()"
52
+ icon-only
53
+ trigger-variant="plain"
54
+ trigger-floating
55
+ panel-viewport
56
+ trigger-class="relative z-20 flex h-full w-max items-center"
57
+ trigger-button-class="!bg-transparent !text-[hsl(var(--shell-bar-foreground))]"
58
+ [nav-type-style]="appearance()"
59
+ [label]="label()"
60
+ >
61
+ @if (brand(); as identity) {
62
+ <NavigationHeader>
63
+ <LayoutBrand [brand]="identity" />
64
+ </NavigationHeader>
65
+ }
66
+ @if (user(); as identity) {
67
+ <NavigationFooter class="px-3">
68
+ <LayoutUser [user]="identity" />
69
+ </NavigationFooter>
70
+ }
71
+ </NavigationFlyout>
72
+ </Navigation>
73
+ }
74
+ `, isInline: true, dependencies: [{ kind: "component", type: NavigationContainerComponent, selector: "Navigation", inputs: ["id", "data-id", "data", "ariaLabel", "compact", "collapse-tree", "class", "itemClass", "nav-group-class", "activeIds", "activeUrl", "openedIds"], outputs: ["openedIdsChange", "itemSelected"] }, { kind: "component", type: NavigationFlyoutComponent, selector: "NavigationFlyout", inputs: ["label", "icon", "icon-only", "icon-position", "trigger-variant", "trigger-floating", "panel-viewport", "trigger-class", "trigger-button-class", "nav-position", "nav-type-style", "class"] }, { kind: "component", type: NavigationHeaderComponent, selector: "NavigationHeader", inputs: ["toggle", "class"] }, { kind: "component", type: NavigationFooterComponent, selector: "NavigationFooter", inputs: ["class"] }, { kind: "component", type: LayoutBrand, selector: "LayoutBrand", inputs: ["brand", "compact"] }, { kind: "component", type: LayoutUser, selector: "LayoutUser", inputs: ["user", "detailed", "logoutLabel", "logoutIcon"], outputs: ["logout"] }] });
75
+ }
76
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: ShellNavigationFlyoutComponent, decorators: [{
77
+ type: Component,
78
+ args: [{
79
+ selector: 'ShellNavigationFlyout',
80
+ imports: [
81
+ NavigationContainerComponent,
82
+ NavigationFlyoutComponent,
83
+ NavigationHeaderComponent,
84
+ NavigationFooterComponent,
85
+ LayoutBrand,
86
+ LayoutUser,
87
+ ],
88
+ host: {
89
+ class: 'contents',
90
+ style: '--nav-flyout-floating-width: 100vw; --nav-flyout-floating-max-width: 100vw; --nav-flyout-floating-radius: 0 0 var(--shell-frame-radius) var(--shell-frame-radius);',
91
+ '[attr.data-shell-navigation-flyout]': 'showsFlyout() ? "" : null',
92
+ },
93
+ template: `
94
+ @if (showsFlyout()) {
95
+ <Navigation
96
+ [id]="navigationId"
97
+ [data]="navigationData()"
98
+ ariaLabel="Application navigation"
99
+ class="h-full w-auto shrink-0"
100
+ >
101
+ <NavigationFlyout
102
+ [icon]="icon()"
103
+ icon-only
104
+ trigger-variant="plain"
105
+ trigger-floating
106
+ panel-viewport
107
+ trigger-class="relative z-20 flex h-full w-max items-center"
108
+ trigger-button-class="!bg-transparent !text-[hsl(var(--shell-bar-foreground))]"
109
+ [nav-type-style]="appearance()"
110
+ [label]="label()"
111
+ >
112
+ @if (brand(); as identity) {
113
+ <NavigationHeader>
114
+ <LayoutBrand [brand]="identity" />
115
+ </NavigationHeader>
116
+ }
117
+ @if (user(); as identity) {
118
+ <NavigationFooter class="px-3">
119
+ <LayoutUser [user]="identity" />
120
+ </NavigationFooter>
121
+ }
122
+ </NavigationFlyout>
123
+ </Navigation>
124
+ }
125
+ `,
126
+ }]
127
+ }], propDecorators: { enabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "enabled", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }] } });
128
+
129
+ /**
130
+ * The titlebar of a `<Shell>` — the app's own window chrome, and its bridge to
131
+ * the desktop runtime.
132
+ *
133
+ * **Internal to the library.** It is not exported from
134
+ * `@ojiepermana/angular/theme/shell`: `<Shell>` decides when a titlebar exists
135
+ * (only `mode='desktop'` has window chrome to draw) and renders this itself,
136
+ * forwarding the `[shellBarStart]` / `[shellBarTitle]` / `[shellBarEnd]` slots.
137
+ * Consumers configure it through `<Shell>`, never directly.
138
+ *
139
+ * Window dragging is declarative, so no JavaScript runs on pointer-down: the host
140
+ * carries `data-tauri-drag-region` for Tauri. Electron uses Shell's frame-wide
141
+ * drag layer below this bar; interactive chrome opts out with `shell-no-drag`,
142
+ * which the slot wrappers and buttons apply for you.
143
+ *
144
+ * Window buttons follow the `device`, not the runtime: macOS keeps painting its
145
+ * own traffic lights over a decoration-less window, so the bar draws none of its
146
+ * own and reserves a leading inset for them instead. Whether those buttons *do*
147
+ * anything is the bridge's business — the shape of the chrome is the device's.
148
+ */
149
+ class ShellBarComponent {
150
+ shell = inject(ShellService);
151
+ device = input(SHELL_DEFAULT_DEVICE, /* @ts-ignore */
152
+ ...(ngDevMode ? [{ debugName: "device" }] : /* istanbul ignore next */ []));
153
+ color = input(SHELL_DEFAULT_COLOR, /* @ts-ignore */
154
+ ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
155
+ frame = input(SHELL_DEFAULT_FRAME, /* @ts-ignore */
156
+ ...(ngDevMode ? [{ debugName: "frame" }] : /* istanbul ignore next */ []));
157
+ /**
158
+ * `true` when the runtime still draws its own window buttons, so the app must
159
+ * not: macOS reserves the leading run for the OS traffic lights and Windows /
160
+ * Linux draw nothing. Default `false` — a decoration-less window.
161
+ */
162
+ nativeWindowControls = input(false, { ...(ngDevMode ? { debugName: "nativeWindowControls" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
163
+ drag = input(true, { ...(ngDevMode ? { debugName: "drag" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
164
+ landmark = input(true, { ...(ngDevMode ? { debugName: "landmark" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
165
+ ariaLabel = input('Application title bar', /* @ts-ignore */
166
+ ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
167
+ minimizeLabel = input('Minimize window', /* @ts-ignore */
168
+ ...(ngDevMode ? [{ debugName: "minimizeLabel" }] : /* istanbul ignore next */ []));
169
+ maximizeLabel = input('Maximize window', /* @ts-ignore */
170
+ ...(ngDevMode ? [{ debugName: "maximizeLabel" }] : /* istanbul ignore next */ []));
171
+ restoreLabel = input('Restore window', /* @ts-ignore */
172
+ ...(ngDevMode ? [{ debugName: "restoreLabel" }] : /* istanbul ignore next */ []));
173
+ closeLabel = input('Close window', /* @ts-ignore */
174
+ ...(ngDevMode ? [{ debugName: "closeLabel" }] : /* istanbul ignore next */ []));
175
+ /** Show the automatic desktop navigation flyout when a desktop layout publishes data. */
176
+ navigationFlyout = input(true, /* @ts-ignore */
177
+ ...(ngDevMode ? [{ debugName: "navigationFlyout" }] : /* istanbul ignore next */ []));
178
+ navigationFlyoutIcon = input('apps', /* @ts-ignore */
179
+ ...(ngDevMode ? [{ debugName: "navigationFlyoutIcon" }] : /* istanbul ignore next */ []));
180
+ navigationFlyoutLabel = input('Open navigation', /* @ts-ignore */
181
+ ...(ngDevMode ? [{ debugName: "navigationFlyoutLabel" }] : /* istanbul ignore next */ []));
182
+ class = input('', /* @ts-ignore */
183
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
184
+ maximizeToggleLabel = computed(() => this.shell.isMaximized() ? this.restoreLabel() : this.maximizeLabel(), /* @ts-ignore */
185
+ ...(ngDevMode ? [{ debugName: "maximizeToggleLabel" }] : /* istanbul ignore next */ []));
186
+ isMacOs = computed(() => this.device() === 'macos', /* @ts-ignore */
187
+ ...(ngDevMode ? [{ debugName: "isMacOs" }] : /* istanbul ignore next */ []));
188
+ /**
189
+ * macOS traffic lights, which the app draws itself — the default, because a
190
+ * `decorations: false` window has no other way to be closed.
191
+ */
192
+ showsTrafficLights = computed(() => this.isMacOs() && !this.nativeWindowControls(), /* @ts-ignore */
193
+ ...(ngDevMode ? [{ debugName: "showsTrafficLights" }] : /* istanbul ignore next */ []));
194
+ /** Windows/Linux buttons, on the trailing edge. */
195
+ showsWindowControls = computed(() => !this.isMacOs() && !this.nativeWindowControls(), /* @ts-ignore */
196
+ ...(ngDevMode ? [{ debugName: "showsWindowControls" }] : /* istanbul ignore next */ []));
197
+ /**
198
+ * Only reserve an empty leading run when the OS is painting its own lights into
199
+ * it — Tauri's macOS `titleBarStyle: 'Overlay'`. Drawing ours there instead
200
+ * occupies the space for real, so no padding is needed.
201
+ */
202
+ reservesTrafficLights = computed(() => this.isMacOs() && this.nativeWindowControls(), /* @ts-ignore */
203
+ ...(ngDevMode ? [{ debugName: "reservesTrafficLights" }] : /* istanbul ignore next */ []));
204
+ classes = computed(() => cn(
205
+ // 1fr auto 1fr keeps the title optically centred in the window no matter
206
+ // how much chrome either flank carries.
207
+ 'relative z-20 grid h-(--shell-bar-height) min-h-(--shell-bar-height) shrink-0', 'grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] items-center gap-(--shell-bar-gap)',
208
+ // Surface tokens, not raw colors: `color='sync'` maps them onto the design
209
+ // system, `color='default'` onto the device's native chrome (base/tokens.css).
210
+ 'bg-[hsl(var(--shell-bar-background))] px-(--shell-bar-inline)', 'text-[hsl(var(--shell-bar-foreground))]',
211
+ // `classic` stacks a bordered bar on the app. `modern` shares its background
212
+ // with the surround, so a divider would draw a seam through what is meant to
213
+ // read as one continuous frame.
214
+ this.frame() === 'classic' && 'border-b border-[hsl(var(--shell-bar-border))]',
215
+ // Physically top-left on macOS regardless of text direction, so this is
216
+ // deliberately `pl-`, not the logical `ps-`.
217
+ this.reservesTrafficLights() && 'pl-(--shell-traffic-light-inset)', this.class()), /* @ts-ignore */
218
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
219
+ startSlotClasses = computed(() => cn('shell-no-drag flex min-w-0 items-center gap-(--shell-bar-gap)'), /* @ts-ignore */
220
+ ...(ngDevMode ? [{ debugName: "startSlotClasses" }] : /* istanbul ignore next */ []));
221
+ endSlotClasses = computed(() => cn('shell-no-drag flex min-w-0 items-center justify-end gap-(--shell-bar-gap)'), /* @ts-ignore */
222
+ ...(ngDevMode ? [{ debugName: "endSlotClasses" }] : /* istanbul ignore next */ []));
223
+ titleClasses = computed(() => cn('min-w-0 truncate text-center text-xs font-medium',
224
+ // An unfocused window recedes — the OS convention for background windows.
225
+ this.shell.focused() ? 'opacity-100' : 'opacity-60'), /* @ts-ignore */
226
+ ...(ngDevMode ? [{ debugName: "titleClasses" }] : /* istanbul ignore next */ []));
227
+ controlClasses = computed(() => cn('shell-no-drag inline-grid size-(--shell-control-size) shrink-0 place-items-center rounded-sm', 'opacity-70 transition-[background-color,opacity] hover:opacity-100', 'hover:bg-[hsl(var(--shell-bar-foreground)/0.12)]', 'focus-visible:outline-none focus-visible:ring-2', 'focus-visible:ring-[hsl(var(--shell-bar-foreground))]', 'focus-visible:ring-offset-1 focus-visible:ring-offset-[hsl(var(--shell-bar-background))]'), /* @ts-ignore */
228
+ ...(ngDevMode ? [{ debugName: "controlClasses" }] : /* istanbul ignore next */ []));
229
+ /**
230
+ * One macOS traffic light. The fills are that platform's own constants rather
231
+ * than theme tokens — a traffic light that recolored with the accent would stop
232
+ * reading as a traffic light. The hairline ring keeps them defined against a
233
+ * light titlebar and survives forced-colors mode, and each carries an
234
+ * `aria-label`, so the colour is never the only way to tell them apart.
235
+ */
236
+ trafficLightClasses(control) {
237
+ return cn('shell-no-drag group inline-grid size-(--shell-traffic-light-size) shrink-0', 'cursor-pointer place-items-center rounded-full', 'ring-1 ring-black/15 transition-colors', 'focus-visible:outline-none focus-visible:ring-2', 'focus-visible:ring-[hsl(var(--shell-bar-foreground))]', 'focus-visible:ring-offset-1 focus-visible:ring-offset-[hsl(var(--shell-bar-background))]',
238
+ // Each light darkens to its own pressed shade on hover — the same per-light
239
+ // colour shift macOS uses, so the feedback reads as "this specific control"
240
+ // rather than a generic highlight. Paired with the glyph appearing below, the
241
+ // hover state never relies on colour alone.
242
+ control === 'close' && 'bg-[#ff5f57] hover:bg-[#e0443e]', control === 'minimize' && 'bg-[#febc2e] hover:bg-[#dea123]', control === 'zoom' && 'bg-[#28c840] hover:bg-[#1aad2b]');
243
+ }
244
+ /** macOS reveals the glyph inside each light only on hover — and on focus, for keyboards. */
245
+ trafficGlyphClasses() {
246
+ return cn('size-(--shell-traffic-light-size) opacity-0 transition-opacity', 'group-hover:opacity-70 group-focus-visible:opacity-70', 'stroke-black/70 [stroke-linecap:round] [stroke-width:1.5] [fill:none]');
247
+ }
248
+ closeControlClasses = computed(() => cn(this.controlClasses(), 'hover:bg-destructive hover:text-destructive-foreground'), /* @ts-ignore */
249
+ ...(ngDevMode ? [{ debugName: "closeControlClasses" }] : /* istanbul ignore next */ []));
250
+ minimize() {
251
+ void this.shell.minimize();
252
+ }
253
+ toggleMaximize() {
254
+ void this.shell.toggleMaximize();
255
+ }
256
+ close() {
257
+ void this.shell.close();
258
+ }
259
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: ShellBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
260
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: ShellBarComponent, isStandalone: true, selector: "ShellBar", inputs: { device: { classPropertyName: "device", publicName: "device", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, frame: { classPropertyName: "frame", publicName: "frame", isSignal: true, isRequired: false, transformFunction: null }, nativeWindowControls: { classPropertyName: "nativeWindowControls", publicName: "nativeWindowControls", isSignal: true, isRequired: false, transformFunction: null }, drag: { classPropertyName: "drag", publicName: "drag", isSignal: true, isRequired: false, transformFunction: null }, landmark: { classPropertyName: "landmark", publicName: "landmark", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, minimizeLabel: { classPropertyName: "minimizeLabel", publicName: "minimizeLabel", isSignal: true, isRequired: false, transformFunction: null }, maximizeLabel: { classPropertyName: "maximizeLabel", publicName: "maximizeLabel", isSignal: true, isRequired: false, transformFunction: null }, restoreLabel: { classPropertyName: "restoreLabel", publicName: "restoreLabel", isSignal: true, isRequired: false, transformFunction: null }, closeLabel: { classPropertyName: "closeLabel", publicName: "closeLabel", isSignal: true, isRequired: false, transformFunction: null }, navigationFlyout: { classPropertyName: "navigationFlyout", publicName: "navigationFlyout", isSignal: true, isRequired: false, transformFunction: null }, navigationFlyoutIcon: { classPropertyName: "navigationFlyoutIcon", publicName: "navigationFlyoutIcon", isSignal: true, isRequired: false, transformFunction: null }, navigationFlyoutLabel: { classPropertyName: "navigationFlyoutLabel", publicName: "navigationFlyoutLabel", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-shell-bar": "" }, properties: { "class": "classes()", "attr.data-shell-device": "device()", "attr.data-shell-color": "color()", "attr.data-shell-frame": "frame()", "attr.data-tauri-drag-region": "drag() ? \"\" : null", "attr.data-shell-window": "shell.windowState()", "attr.data-shell-focused": "shell.focused()", "attr.role": "landmark() ? \"banner\" : null", "attr.aria-label": "landmark() ? ariaLabel() || null : null" } }, ngImport: i0, template: `
261
+ <div data-shell-bar-start [class]="startSlotClasses()">
262
+ @if (!isMacOs()) {
263
+ <ShellNavigationFlyout
264
+ [enabled]="navigationFlyout()"
265
+ [icon]="navigationFlyoutIcon()"
266
+ [label]="navigationFlyoutLabel()"
267
+ />
268
+ }
269
+
270
+ @if (showsTrafficLights()) {
271
+ <div data-shell-traffic-lights class="flex shrink-0 items-center gap-2 pl-2 pr-1">
272
+ <button
273
+ type="button"
274
+ data-shell-control="close"
275
+ [class]="trafficLightClasses('close')"
276
+ [attr.aria-label]="closeLabel()"
277
+ [title]="closeLabel()"
278
+ (click)="close()"
279
+ >
280
+ <svg [class]="trafficGlyphClasses()" viewBox="0 0 12 12" aria-hidden="true">
281
+ <path d="M4 4l4 4M8 4l-4 4" />
282
+ </svg>
283
+ </button>
284
+ <button
285
+ type="button"
286
+ data-shell-control="minimize"
287
+ [class]="trafficLightClasses('minimize')"
288
+ [attr.aria-label]="minimizeLabel()"
289
+ [title]="minimizeLabel()"
290
+ (click)="minimize()"
291
+ >
292
+ <svg [class]="trafficGlyphClasses()" viewBox="0 0 12 12" aria-hidden="true">
293
+ <path d="M3.5 6h5" />
294
+ </svg>
295
+ </button>
296
+ <button
297
+ type="button"
298
+ data-shell-control="zoom"
299
+ [class]="trafficLightClasses('zoom')"
300
+ [attr.aria-label]="maximizeToggleLabel()"
301
+ [attr.aria-pressed]="shell.isMaximized()"
302
+ [title]="maximizeToggleLabel()"
303
+ (click)="toggleMaximize()"
304
+ >
305
+ <svg [class]="trafficGlyphClasses()" viewBox="0 0 12 12" aria-hidden="true">
306
+ <path d="M6 3.5v5M3.5 6h5" />
307
+ </svg>
308
+ </button>
309
+ </div>
310
+ }
311
+
312
+ <ng-content select="[shellBarStart]" />
313
+ </div>
314
+
315
+ <div data-shell-bar-title [class]="titleClasses()">
316
+ <ng-content select="[shellBarTitle]" />
317
+ </div>
318
+
319
+ <div data-shell-bar-end [class]="endSlotClasses()">
320
+ <ng-content select="[shellBarEnd]" />
321
+
322
+ @if (isMacOs()) {
323
+ <ShellNavigationFlyout
324
+ [enabled]="navigationFlyout()"
325
+ [icon]="navigationFlyoutIcon()"
326
+ [label]="navigationFlyoutLabel()"
327
+ />
328
+ }
329
+
330
+ @if (showsWindowControls()) {
331
+ <button
332
+ type="button"
333
+ data-shell-control="minimize"
334
+ [class]="controlClasses()"
335
+ [attr.aria-label]="minimizeLabel()"
336
+ [title]="minimizeLabel()"
337
+ (click)="minimize()"
338
+ >
339
+ <svg
340
+ aria-hidden="true"
341
+ focusable="false"
342
+ viewBox="0 0 16 16"
343
+ class="size-4"
344
+ fill="none"
345
+ stroke="currentColor"
346
+ stroke-width="1.25"
347
+ stroke-linecap="round"
348
+ >
349
+ <path d="M3.5 8h9" />
350
+ </svg>
351
+ </button>
352
+
353
+ <button
354
+ type="button"
355
+ data-shell-control="maximize"
356
+ [class]="controlClasses()"
357
+ [attr.aria-label]="maximizeToggleLabel()"
358
+ [attr.aria-pressed]="shell.isMaximized()"
359
+ [title]="maximizeToggleLabel()"
360
+ (click)="toggleMaximize()"
361
+ >
362
+ @if (shell.isMaximized()) {
363
+ <svg
364
+ aria-hidden="true"
365
+ focusable="false"
366
+ viewBox="0 0 16 16"
367
+ class="size-4"
368
+ fill="none"
369
+ stroke="currentColor"
370
+ stroke-width="1.25"
371
+ stroke-linejoin="round"
372
+ >
373
+ <path d="M5.25 5.25V3.75h7v7h-1.5" />
374
+ <rect x="3.75" y="5.25" width="7" height="7" rx="0.75" />
375
+ </svg>
376
+ } @else {
377
+ <svg
378
+ aria-hidden="true"
379
+ focusable="false"
380
+ viewBox="0 0 16 16"
381
+ class="size-4"
382
+ fill="none"
383
+ stroke="currentColor"
384
+ stroke-width="1.25"
385
+ stroke-linejoin="round"
386
+ >
387
+ <rect x="3.75" y="3.75" width="8.5" height="8.5" rx="0.75" />
388
+ </svg>
389
+ }
390
+ </button>
391
+
392
+ <button
393
+ type="button"
394
+ data-shell-control="close"
395
+ [class]="closeControlClasses()"
396
+ [attr.aria-label]="closeLabel()"
397
+ [title]="closeLabel()"
398
+ (click)="close()"
399
+ >
400
+ <svg
401
+ aria-hidden="true"
402
+ focusable="false"
403
+ viewBox="0 0 16 16"
404
+ class="size-4"
405
+ fill="none"
406
+ stroke="currentColor"
407
+ stroke-width="1.25"
408
+ stroke-linecap="round"
409
+ >
410
+ <path d="M4.25 4.25l7.5 7.5M11.75 4.25l-7.5 7.5" />
411
+ </svg>
412
+ </button>
413
+ }
414
+ </div>
415
+ `, isInline: true, dependencies: [{ kind: "component", type: ShellNavigationFlyoutComponent, selector: "ShellNavigationFlyout", inputs: ["enabled", "icon", "label"] }] });
416
+ }
417
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: ShellBarComponent, decorators: [{
418
+ type: Component,
419
+ args: [{
420
+ selector: 'ShellBar',
421
+ imports: [ShellNavigationFlyoutComponent],
422
+ host: {
423
+ '[class]': 'classes()',
424
+ 'data-shell-bar': '',
425
+ '[attr.data-shell-device]': 'device()',
426
+ '[attr.data-shell-color]': 'color()',
427
+ '[attr.data-shell-frame]': 'frame()',
428
+ '[attr.data-tauri-drag-region]': 'drag() ? "" : null',
429
+ '[attr.data-shell-window]': 'shell.windowState()',
430
+ '[attr.data-shell-focused]': 'shell.focused()',
431
+ '[attr.role]': 'landmark() ? "banner" : null',
432
+ '[attr.aria-label]': 'landmark() ? ariaLabel() || null : null',
433
+ },
434
+ template: `
435
+ <div data-shell-bar-start [class]="startSlotClasses()">
436
+ @if (!isMacOs()) {
437
+ <ShellNavigationFlyout
438
+ [enabled]="navigationFlyout()"
439
+ [icon]="navigationFlyoutIcon()"
440
+ [label]="navigationFlyoutLabel()"
441
+ />
442
+ }
443
+
444
+ @if (showsTrafficLights()) {
445
+ <div data-shell-traffic-lights class="flex shrink-0 items-center gap-2 pl-2 pr-1">
446
+ <button
447
+ type="button"
448
+ data-shell-control="close"
449
+ [class]="trafficLightClasses('close')"
450
+ [attr.aria-label]="closeLabel()"
451
+ [title]="closeLabel()"
452
+ (click)="close()"
453
+ >
454
+ <svg [class]="trafficGlyphClasses()" viewBox="0 0 12 12" aria-hidden="true">
455
+ <path d="M4 4l4 4M8 4l-4 4" />
456
+ </svg>
457
+ </button>
458
+ <button
459
+ type="button"
460
+ data-shell-control="minimize"
461
+ [class]="trafficLightClasses('minimize')"
462
+ [attr.aria-label]="minimizeLabel()"
463
+ [title]="minimizeLabel()"
464
+ (click)="minimize()"
465
+ >
466
+ <svg [class]="trafficGlyphClasses()" viewBox="0 0 12 12" aria-hidden="true">
467
+ <path d="M3.5 6h5" />
468
+ </svg>
469
+ </button>
470
+ <button
471
+ type="button"
472
+ data-shell-control="zoom"
473
+ [class]="trafficLightClasses('zoom')"
474
+ [attr.aria-label]="maximizeToggleLabel()"
475
+ [attr.aria-pressed]="shell.isMaximized()"
476
+ [title]="maximizeToggleLabel()"
477
+ (click)="toggleMaximize()"
478
+ >
479
+ <svg [class]="trafficGlyphClasses()" viewBox="0 0 12 12" aria-hidden="true">
480
+ <path d="M6 3.5v5M3.5 6h5" />
481
+ </svg>
482
+ </button>
483
+ </div>
484
+ }
485
+
486
+ <ng-content select="[shellBarStart]" />
487
+ </div>
488
+
489
+ <div data-shell-bar-title [class]="titleClasses()">
490
+ <ng-content select="[shellBarTitle]" />
491
+ </div>
492
+
493
+ <div data-shell-bar-end [class]="endSlotClasses()">
494
+ <ng-content select="[shellBarEnd]" />
495
+
496
+ @if (isMacOs()) {
497
+ <ShellNavigationFlyout
498
+ [enabled]="navigationFlyout()"
499
+ [icon]="navigationFlyoutIcon()"
500
+ [label]="navigationFlyoutLabel()"
501
+ />
502
+ }
503
+
504
+ @if (showsWindowControls()) {
505
+ <button
506
+ type="button"
507
+ data-shell-control="minimize"
508
+ [class]="controlClasses()"
509
+ [attr.aria-label]="minimizeLabel()"
510
+ [title]="minimizeLabel()"
511
+ (click)="minimize()"
512
+ >
513
+ <svg
514
+ aria-hidden="true"
515
+ focusable="false"
516
+ viewBox="0 0 16 16"
517
+ class="size-4"
518
+ fill="none"
519
+ stroke="currentColor"
520
+ stroke-width="1.25"
521
+ stroke-linecap="round"
522
+ >
523
+ <path d="M3.5 8h9" />
524
+ </svg>
525
+ </button>
526
+
527
+ <button
528
+ type="button"
529
+ data-shell-control="maximize"
530
+ [class]="controlClasses()"
531
+ [attr.aria-label]="maximizeToggleLabel()"
532
+ [attr.aria-pressed]="shell.isMaximized()"
533
+ [title]="maximizeToggleLabel()"
534
+ (click)="toggleMaximize()"
535
+ >
536
+ @if (shell.isMaximized()) {
537
+ <svg
538
+ aria-hidden="true"
539
+ focusable="false"
540
+ viewBox="0 0 16 16"
541
+ class="size-4"
542
+ fill="none"
543
+ stroke="currentColor"
544
+ stroke-width="1.25"
545
+ stroke-linejoin="round"
546
+ >
547
+ <path d="M5.25 5.25V3.75h7v7h-1.5" />
548
+ <rect x="3.75" y="5.25" width="7" height="7" rx="0.75" />
549
+ </svg>
550
+ } @else {
551
+ <svg
552
+ aria-hidden="true"
553
+ focusable="false"
554
+ viewBox="0 0 16 16"
555
+ class="size-4"
556
+ fill="none"
557
+ stroke="currentColor"
558
+ stroke-width="1.25"
559
+ stroke-linejoin="round"
560
+ >
561
+ <rect x="3.75" y="3.75" width="8.5" height="8.5" rx="0.75" />
562
+ </svg>
563
+ }
564
+ </button>
565
+
566
+ <button
567
+ type="button"
568
+ data-shell-control="close"
569
+ [class]="closeControlClasses()"
570
+ [attr.aria-label]="closeLabel()"
571
+ [title]="closeLabel()"
572
+ (click)="close()"
573
+ >
574
+ <svg
575
+ aria-hidden="true"
576
+ focusable="false"
577
+ viewBox="0 0 16 16"
578
+ class="size-4"
579
+ fill="none"
580
+ stroke="currentColor"
581
+ stroke-width="1.25"
582
+ stroke-linecap="round"
583
+ >
584
+ <path d="M4.25 4.25l7.5 7.5M11.75 4.25l-7.5 7.5" />
585
+ </svg>
586
+ </button>
587
+ }
588
+ </div>
589
+ `,
590
+ }]
591
+ }], propDecorators: { device: [{ type: i0.Input, args: [{ isSignal: true, alias: "device", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], frame: [{ type: i0.Input, args: [{ isSignal: true, alias: "frame", required: false }] }], nativeWindowControls: [{ type: i0.Input, args: [{ isSignal: true, alias: "nativeWindowControls", required: false }] }], drag: [{ type: i0.Input, args: [{ isSignal: true, alias: "drag", required: false }] }], landmark: [{ type: i0.Input, args: [{ isSignal: true, alias: "landmark", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], minimizeLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "minimizeLabel", required: false }] }], maximizeLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "maximizeLabel", required: false }] }], restoreLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "restoreLabel", required: false }] }], closeLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeLabel", required: false }] }], navigationFlyout: [{ type: i0.Input, args: [{ isSignal: true, alias: "navigationFlyout", required: false }] }], navigationFlyoutIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "navigationFlyoutIcon", required: false }] }], navigationFlyoutLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "navigationFlyoutLabel", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
592
+
593
+ /**
594
+ * Root of an application shell: the element that owns the whole surface, whether
595
+ * that is a browser tab, an OS window, a tablet, or a phone.
596
+ *
597
+ * A `<Shell>` holds the app directly — normally a `<Layout>` — plus, on
598
+ * `mode='desktop'`, a titlebar it renders itself:
599
+ *
600
+ * ```html
601
+ * <Shell mode="desktop" device="macos">
602
+ * <span shellBarTitle>Acme Studio</span>
603
+ *
604
+ * <Layout>
605
+ * <LayoutVertical>…</LayoutVertical>
606
+ * </Layout>
607
+ * </Shell>
608
+ * ```
609
+ *
610
+ * ## Fallback chain
611
+ *
612
+ * Every axis is optional, and each falls back rather than demanding a value:
613
+ *
614
+ * - `mode` — this input, else the stored `shell-mode`, else `desktop` when a
615
+ * desktop runtime is registered, else `web`.
616
+ * - `device` — this input, else the stored `shell-device`, else whatever the
617
+ * window bridge reports, else the mode's default device.
618
+ * - `color` — this input, else the stored `shell-color`, else `sync`.
619
+ * - `frame` — this input, else the stored `shell-frame`, else `classic`; only
620
+ * `desktop` can be `modern`.
621
+ *
622
+ * `mode` and `device` are always resolved as a coherent pair: a device that
623
+ * belongs to another form factor (`mode='desktop' device='ipad'`) is corrected to
624
+ * the mode's default, so `data-shell-device` never describes something the mode
625
+ * cannot be.
626
+ *
627
+ * Inputs are host declarations, not user preferences, so setting them never
628
+ * writes to storage — use `ShellService.setMode()` / `setDevice()` for a choice
629
+ * that should persist.
630
+ */
631
+ class ShellComponent {
632
+ shell = inject(ShellService);
633
+ /** Delivery target. `null` follows the stored/derived mode — see the class note. */
634
+ mode = input(null, /* @ts-ignore */
635
+ ...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
636
+ /** Host OS. `null` follows the stored/reported device, corrected to fit `mode`. */
637
+ device = input(null, /* @ts-ignore */
638
+ ...(ngDevMode ? [{ debugName: "device" }] : /* istanbul ignore next */ []));
639
+ /**
640
+ * Where the shell's own chrome takes its colors from. `sync` keeps the titlebar
641
+ * inside the design system; `default` paints the native look of the active
642
+ * device.
643
+ */
644
+ color = input(null, /* @ts-ignore */
645
+ ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
646
+ /**
647
+ * How the app sits in its window. `classic` keeps it flush to the window edge
648
+ * under a bordered titlebar; `modern` insets it as a panel and fuses the titlebar
649
+ * with the surround into one continuous frame. Only meaningful on
650
+ * `mode='desktop'` — anything else resolves to `classic`.
651
+ */
652
+ frame = input(null, /* @ts-ignore */
653
+ ...(ngDevMode ? [{ debugName: "frame" }] : /* istanbul ignore next */ []));
654
+ /**
655
+ * `true` when the runtime still draws its own window buttons, so the shell must
656
+ * not draw them: on macOS the titlebar reserves the leading run for the OS
657
+ * traffic lights (Tauri's `titleBarStyle: 'Overlay'`), and Windows / Linux draw
658
+ * nothing. Leave `false` for a `decorations: false` window, where the app owns
659
+ * the buttons — otherwise there would be no way to close it.
660
+ */
661
+ nativeWindowControls = input(false, { ...(ngDevMode ? { debugName: "nativeWindowControls" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
662
+ /** Mark the exposed desktop frame and titlebar as drag surfaces below interactive content. */
663
+ drag = input(true, { ...(ngDevMode ? { debugName: "drag" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
664
+ /** Expose the titlebar as the `banner` landmark. Turn off for a nested preview. */
665
+ landmark = input(true, { ...(ngDevMode ? { debugName: "landmark" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
666
+ barAriaLabel = input('Application title bar', /* @ts-ignore */
667
+ ...(ngDevMode ? [{ debugName: "barAriaLabel" }] : /* istanbul ignore next */ []));
668
+ minimizeLabel = input('Minimize window', /* @ts-ignore */
669
+ ...(ngDevMode ? [{ debugName: "minimizeLabel" }] : /* istanbul ignore next */ []));
670
+ maximizeLabel = input('Maximize window', /* @ts-ignore */
671
+ ...(ngDevMode ? [{ debugName: "maximizeLabel" }] : /* istanbul ignore next */ []));
672
+ restoreLabel = input('Restore window', /* @ts-ignore */
673
+ ...(ngDevMode ? [{ debugName: "restoreLabel" }] : /* istanbul ignore next */ []));
674
+ closeLabel = input('Close window', /* @ts-ignore */
675
+ ...(ngDevMode ? [{ debugName: "closeLabel" }] : /* istanbul ignore next */ []));
676
+ /**
677
+ * Automatically surface the desktop layout's primary navigation as an icon
678
+ * flyout in the titlebar. macOS places it at the trailing edge; Windows and
679
+ * Linux place it at the leading edge.
680
+ */
681
+ navigationFlyout = input(true, { ...(ngDevMode ? { debugName: "navigationFlyout" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
682
+ navigationFlyoutIcon = input('apps', /* @ts-ignore */
683
+ ...(ngDevMode ? [{ debugName: "navigationFlyoutIcon" }] : /* istanbul ignore next */ []));
684
+ navigationFlyoutLabel = input('Open navigation', /* @ts-ignore */
685
+ ...(ngDevMode ? [{ debugName: "navigationFlyoutLabel" }] : /* istanbul ignore next */ []));
686
+ class = input('', /* @ts-ignore */
687
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
688
+ resolvedMode = computed(() => this.mode() ?? this.shell.mode(), /* @ts-ignore */
689
+ ...(ngDevMode ? [{ debugName: "resolvedMode" }] : /* istanbul ignore next */ []));
690
+ resolvedDevice = computed(() => resolveShellDeviceForMode(this.resolvedMode(), this.device() ?? this.shell.device()), /* @ts-ignore */
691
+ ...(ngDevMode ? [{ debugName: "resolvedDevice" }] : /* istanbul ignore next */ []));
692
+ resolvedColor = computed(() => this.color() ?? this.shell.color(), /* @ts-ignore */
693
+ ...(ngDevMode ? [{ debugName: "resolvedColor" }] : /* istanbul ignore next */ []));
694
+ resolvedFrame = computed(() => resolveShellFrameForMode(this.resolvedMode(), this.frame() ?? this.shell.frame()), /* @ts-ignore */
695
+ ...(ngDevMode ? [{ debugName: "resolvedFrame" }] : /* istanbul ignore next */ []));
696
+ /** Only a desktop window has chrome of its own to draw. */
697
+ showsBar = computed(() => this.resolvedMode() === 'desktop', /* @ts-ignore */
698
+ ...(ngDevMode ? [{ debugName: "showsBar" }] : /* istanbul ignore next */ []));
699
+ hostClasses = computed(() => cn(
700
+ // h-dvh, not h-full: the shell is the whole surface. `isolate` keeps the
701
+ // titlebar's stacking context out of the app's, so a bar menu can never be
702
+ // painted over by content below it.
703
+ 'relative isolate flex h-dvh w-full min-w-0 flex-col overflow-hidden text-foreground', this.showsBar() && this.drag() && 'shell-drag-region',
704
+ // A synchronized shell promotes the selected Theme color to the whole shell
705
+ // background. `modern` also shares the titlebar token with its inset surround,
706
+ // including when `color='default'` maps that token to native device chrome.
707
+ this.resolvedColor() === 'sync' || this.resolvedFrame() === 'modern'
708
+ ? 'bg-[hsl(var(--shell-bar-background))]'
709
+ : 'bg-layout-canvas', this.class()), /* @ts-ignore */
710
+ ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
711
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: ShellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
712
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: ShellComponent, isStandalone: true, selector: "Shell", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, device: { classPropertyName: "device", publicName: "device", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, frame: { classPropertyName: "frame", publicName: "frame", isSignal: true, isRequired: false, transformFunction: null }, nativeWindowControls: { classPropertyName: "nativeWindowControls", publicName: "nativeWindowControls", isSignal: true, isRequired: false, transformFunction: null }, drag: { classPropertyName: "drag", publicName: "drag", isSignal: true, isRequired: false, transformFunction: null }, landmark: { classPropertyName: "landmark", publicName: "landmark", isSignal: true, isRequired: false, transformFunction: null }, barAriaLabel: { classPropertyName: "barAriaLabel", publicName: "barAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, minimizeLabel: { classPropertyName: "minimizeLabel", publicName: "minimizeLabel", isSignal: true, isRequired: false, transformFunction: null }, maximizeLabel: { classPropertyName: "maximizeLabel", publicName: "maximizeLabel", isSignal: true, isRequired: false, transformFunction: null }, restoreLabel: { classPropertyName: "restoreLabel", publicName: "restoreLabel", isSignal: true, isRequired: false, transformFunction: null }, closeLabel: { classPropertyName: "closeLabel", publicName: "closeLabel", isSignal: true, isRequired: false, transformFunction: null }, navigationFlyout: { classPropertyName: "navigationFlyout", publicName: "navigationFlyout", isSignal: true, isRequired: false, transformFunction: null }, navigationFlyoutIcon: { classPropertyName: "navigationFlyoutIcon", publicName: "navigationFlyoutIcon", isSignal: true, isRequired: false, transformFunction: null }, navigationFlyoutLabel: { classPropertyName: "navigationFlyoutLabel", publicName: "navigationFlyoutLabel", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-shell-root": "" }, properties: { "class": "hostClasses()", "attr.data-shell-mode": "resolvedMode()", "attr.data-shell-device": "resolvedDevice()", "attr.data-shell-color": "resolvedColor()", "attr.data-shell-frame": "resolvedFrame()", "attr.data-shell-platform": "shell.platform", "attr.data-shell-window": "shell.windowState()" } }, ngImport: i0, template: `
713
+ @if (showsBar() && drag()) {
714
+ <div
715
+ aria-hidden="true"
716
+ data-shell-frame-drag-region
717
+ data-tauri-drag-region
718
+ class="pointer-events-auto absolute inset-0 z-0"
719
+ ></div>
720
+ }
721
+
722
+ @if (showsBar()) {
723
+ <ShellBar
724
+ [device]="resolvedDevice()"
725
+ [color]="resolvedColor()"
726
+ [frame]="resolvedFrame()"
727
+ [nativeWindowControls]="nativeWindowControls()"
728
+ [drag]="drag()"
729
+ [landmark]="landmark()"
730
+ [ariaLabel]="barAriaLabel()"
731
+ [minimizeLabel]="minimizeLabel()"
732
+ [maximizeLabel]="maximizeLabel()"
733
+ [restoreLabel]="restoreLabel()"
734
+ [closeLabel]="closeLabel()"
735
+ [navigationFlyout]="navigationFlyout()"
736
+ [navigationFlyoutIcon]="navigationFlyoutIcon()"
737
+ [navigationFlyoutLabel]="navigationFlyoutLabel()"
738
+ >
739
+ <ng-content select="[shellBarStart]" ngProjectAs="[shellBarStart]" />
740
+ <ng-content select="[shellBarTitle]" ngProjectAs="[shellBarTitle]" />
741
+ <ng-content select="[shellBarEnd]" ngProjectAs="[shellBarEnd]" />
742
+ </ShellBar>
743
+ }
744
+
745
+ <ng-content />
746
+ `, isInline: true, dependencies: [{ kind: "component", type: ShellBarComponent, selector: "ShellBar", inputs: ["device", "color", "frame", "nativeWindowControls", "drag", "landmark", "ariaLabel", "minimizeLabel", "maximizeLabel", "restoreLabel", "closeLabel", "navigationFlyout", "navigationFlyoutIcon", "navigationFlyoutLabel", "class"] }] });
747
+ }
748
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: ShellComponent, decorators: [{
749
+ type: Component,
750
+ args: [{
751
+ selector: 'Shell',
752
+ imports: [ShellBarComponent],
753
+ host: {
754
+ '[class]': 'hostClasses()',
755
+ 'data-shell-root': '',
756
+ '[attr.data-shell-mode]': 'resolvedMode()',
757
+ '[attr.data-shell-device]': 'resolvedDevice()',
758
+ '[attr.data-shell-color]': 'resolvedColor()',
759
+ '[attr.data-shell-frame]': 'resolvedFrame()',
760
+ '[attr.data-shell-platform]': 'shell.platform',
761
+ '[attr.data-shell-window]': 'shell.windowState()',
762
+ },
763
+ template: `
764
+ @if (showsBar() && drag()) {
765
+ <div
766
+ aria-hidden="true"
767
+ data-shell-frame-drag-region
768
+ data-tauri-drag-region
769
+ class="pointer-events-auto absolute inset-0 z-0"
770
+ ></div>
771
+ }
772
+
773
+ @if (showsBar()) {
774
+ <ShellBar
775
+ [device]="resolvedDevice()"
776
+ [color]="resolvedColor()"
777
+ [frame]="resolvedFrame()"
778
+ [nativeWindowControls]="nativeWindowControls()"
779
+ [drag]="drag()"
780
+ [landmark]="landmark()"
781
+ [ariaLabel]="barAriaLabel()"
782
+ [minimizeLabel]="minimizeLabel()"
783
+ [maximizeLabel]="maximizeLabel()"
784
+ [restoreLabel]="restoreLabel()"
785
+ [closeLabel]="closeLabel()"
786
+ [navigationFlyout]="navigationFlyout()"
787
+ [navigationFlyoutIcon]="navigationFlyoutIcon()"
788
+ [navigationFlyoutLabel]="navigationFlyoutLabel()"
789
+ >
790
+ <ng-content select="[shellBarStart]" ngProjectAs="[shellBarStart]" />
791
+ <ng-content select="[shellBarTitle]" ngProjectAs="[shellBarTitle]" />
792
+ <ng-content select="[shellBarEnd]" ngProjectAs="[shellBarEnd]" />
793
+ </ShellBar>
794
+ }
795
+
796
+ <ng-content />
797
+ `,
798
+ }]
799
+ }], propDecorators: { mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], device: [{ type: i0.Input, args: [{ isSignal: true, alias: "device", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], frame: [{ type: i0.Input, args: [{ isSignal: true, alias: "frame", required: false }] }], nativeWindowControls: [{ type: i0.Input, args: [{ isSignal: true, alias: "nativeWindowControls", required: false }] }], drag: [{ type: i0.Input, args: [{ isSignal: true, alias: "drag", required: false }] }], landmark: [{ type: i0.Input, args: [{ isSignal: true, alias: "landmark", required: false }] }], barAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "barAriaLabel", required: false }] }], minimizeLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "minimizeLabel", required: false }] }], maximizeLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "maximizeLabel", required: false }] }], restoreLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "restoreLabel", required: false }] }], closeLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeLabel", required: false }] }], navigationFlyout: [{ type: i0.Input, args: [{ isSignal: true, alias: "navigationFlyout", required: false }] }], navigationFlyoutIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "navigationFlyoutIcon", required: false }] }], navigationFlyoutLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "navigationFlyoutLabel", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
800
+
801
+ /*
802
+ * Public API of @ojiepermana/angular/theme/shell
803
+ *
804
+ * The application shell root: <Shell> owns the whole surface and holds the app
805
+ * (normally a <Layout>) directly. On mode='desktop' it also renders its own
806
+ * titlebar — <ShellBar> is deliberately NOT exported, because when a titlebar
807
+ * exists is <Shell>'s decision, not the consumer's. Configure it through <Shell>
808
+ * and its [shellBarStart] / [shellBarTitle] / [shellBarEnd] slots.
809
+ */
4
810
 
5
811
  /**
6
812
  * Generated bundle index. Do not edit.
7
- */
813
+ */
814
+
815
+ export { ShellComponent };