@koobiq/components 20.4.1 → 21.0.0

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 (771) hide show
  1. package/accordion/accordion-trigger.scss +3 -10
  2. package/accordion/accordion.scss +4 -6
  3. package/actions-panel/actions-panel-container.scss +45 -1
  4. package/alert/alert.component.scss +3 -2
  5. package/app-switcher/_app-switcher-theme.scss +0 -4
  6. package/app-switcher/app-switcher-dropdown-app.scss +3 -2
  7. package/app-switcher/app-switcher-dropdown-site.scss +2 -1
  8. package/app-switcher/{kbq-app-switcher-list-item.scss → app-switcher-list-item.scss} +18 -4
  9. package/app-switcher/app-switcher-tokens.scss +15 -0
  10. package/app-switcher/app-switcher.scss +14 -4
  11. package/autocomplete/autocomplete.scss +7 -6
  12. package/badge/badge.component.scss +5 -8
  13. package/breadcrumbs/breadcrumbs.scss +25 -10
  14. package/button/_button-base.scss +30 -7
  15. package/button/_button-theme.scss +16 -0
  16. package/button/button-group.scss +7 -0
  17. package/button/button-tokens.scss +0 -2
  18. package/button/button.scss +34 -2
  19. package/button-toggle/_button-toggle-theme.scss +7 -2
  20. package/button-toggle/button-toggle.scss +65 -15
  21. package/checkbox/_checkbox-theme.scss +4 -3
  22. package/checkbox/checkbox.scss +3 -6
  23. package/clamped-text/clamped-text.scss +6 -2
  24. package/code-block/code-block-tokens.scss +0 -224
  25. package/code-block/code-block.scss +20 -9
  26. package/content-panel/content-panel-aside.scss +3 -2
  27. package/content-panel/content-panel-container.scss +37 -0
  28. package/content-panel/content-panel.scss +4 -3
  29. package/core/highlight/_highlight-theme.scss +3 -1
  30. package/core/option/action-container.scss +2 -2
  31. package/core/option/action.scss +2 -1
  32. package/core/option/option.scss +2 -1
  33. package/core/pop-up/_pop-up.scss +0 -37
  34. package/core/selection/pseudo-checkbox/pseudo-checkbox.scss +5 -10
  35. package/core/styles/_core.scss +3 -0
  36. package/core/styles/_koobiq-theme.scss +5 -6
  37. package/core/styles/common/_animation.scss +44 -16
  38. package/core/styles/common/_groups-mixins.scss +21 -19
  39. package/core/styles/common/_groups.scss +4 -32
  40. package/core/styles/common/_index.scss +0 -2
  41. package/core/styles/common/_link.scss +117 -0
  42. package/core/styles/common/_list.scss +0 -26
  43. package/core/styles/common/_overlay.scss +8 -10
  44. package/core/styles/common/_rtl.scss +0 -14
  45. package/core/styles/common/_select.scss +33 -15
  46. package/core/styles/common/_squircle.scss +63 -0
  47. package/core/styles/common/_tokens.scss +0 -11
  48. package/core/styles/common/_vendor-prefixes.scss +0 -20
  49. package/core/styles/functions/_timing.scss +0 -22
  50. package/core/styles/theming/_scrollbar-theme.scss +6 -1
  51. package/core/styles/theming/_theming.scss +13 -65
  52. package/core/styles/typography/_index.scss +0 -1
  53. package/core/styles/typography/_typography.scss +0 -143
  54. package/core/styles/visual/_body.scss +1 -6
  55. package/core/styles/visual/_layout.scss +0 -12
  56. package/datepicker/calendar-body.scss +3 -1
  57. package/datepicker/calendar-header.scss +0 -1
  58. package/datepicker/datepicker-content.scss +33 -1
  59. package/datepicker/datepicker-toggle.scss +0 -38
  60. package/dl/dl-tokens.scss +10 -0
  61. package/dl/dl.scss +113 -13
  62. package/dropdown/_dropdown-theme.scss +4 -16
  63. package/dropdown/dropdown-item.scss +4 -10
  64. package/dropdown/dropdown.scss +2 -1
  65. package/empty-state/_empty-state-theme.scss +10 -4
  66. package/empty-state/empty-state-tokens.scss +4 -4
  67. package/empty-state/empty-state.scss +4 -0
  68. package/fesm2022/koobiq-components-accordion.mjs +347 -229
  69. package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
  70. package/fesm2022/koobiq-components-actions-panel.mjs +302 -187
  71. package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
  72. package/fesm2022/koobiq-components-alert.mjs +39 -39
  73. package/fesm2022/koobiq-components-alert.mjs.map +1 -1
  74. package/fesm2022/koobiq-components-app-switcher.mjs +677 -367
  75. package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
  76. package/fesm2022/koobiq-components-autocomplete.mjs +620 -253
  77. package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
  78. package/fesm2022/koobiq-components-badge.mjs +46 -48
  79. package/fesm2022/koobiq-components-badge.mjs.map +1 -1
  80. package/fesm2022/koobiq-components-breadcrumbs.mjs +221 -169
  81. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  82. package/fesm2022/koobiq-components-button-toggle.mjs +565 -196
  83. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  84. package/fesm2022/koobiq-components-button.mjs +332 -116
  85. package/fesm2022/koobiq-components-button.mjs.map +1 -1
  86. package/fesm2022/koobiq-components-checkbox.mjs +172 -132
  87. package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
  88. package/fesm2022/koobiq-components-clamped-text.mjs +165 -158
  89. package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -1
  90. package/fesm2022/koobiq-components-code-block.mjs +755 -601
  91. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  92. package/fesm2022/koobiq-components-content-panel.mjs +260 -143
  93. package/fesm2022/koobiq-components-content-panel.mjs.map +1 -1
  94. package/fesm2022/koobiq-components-core.mjs +4342 -1595
  95. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  96. package/fesm2022/koobiq-components-datepicker.mjs +1713 -1606
  97. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  98. package/fesm2022/koobiq-components-divider.mjs +73 -36
  99. package/fesm2022/koobiq-components-divider.mjs.map +1 -1
  100. package/fesm2022/koobiq-components-dl.mjs +447 -89
  101. package/fesm2022/koobiq-components-dl.mjs.map +1 -1
  102. package/fesm2022/koobiq-components-dropdown.mjs +703 -599
  103. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  104. package/fesm2022/koobiq-components-dynamic-translation.mjs +20 -20
  105. package/fesm2022/koobiq-components-dynamic-translation.mjs.map +1 -1
  106. package/fesm2022/koobiq-components-ellipsis-center.mjs +46 -31
  107. package/fesm2022/koobiq-components-ellipsis-center.mjs.map +1 -1
  108. package/fesm2022/koobiq-components-empty-state.mjs +116 -60
  109. package/fesm2022/koobiq-components-empty-state.mjs.map +1 -1
  110. package/fesm2022/koobiq-components-file-upload.mjs +550 -290
  111. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  112. package/fesm2022/koobiq-components-filter-bar.mjs +2810 -2538
  113. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  114. package/fesm2022/koobiq-components-flag.mjs +79 -24
  115. package/fesm2022/koobiq-components-flag.mjs.map +1 -1
  116. package/fesm2022/koobiq-components-form-field.mjs +389 -525
  117. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  118. package/fesm2022/koobiq-components-icon.mjs +366 -136
  119. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  120. package/fesm2022/koobiq-components-inline-edit.mjs +429 -212
  121. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
  122. package/fesm2022/koobiq-components-input.mjs +601 -459
  123. package/fesm2022/koobiq-components-input.mjs.map +1 -1
  124. package/fesm2022/koobiq-components-link-deprecated.mjs +196 -0
  125. package/fesm2022/koobiq-components-link-deprecated.mjs.map +1 -0
  126. package/fesm2022/koobiq-components-link.mjs +328 -125
  127. package/fesm2022/koobiq-components-link.mjs.map +1 -1
  128. package/fesm2022/koobiq-components-list.mjs +583 -433
  129. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  130. package/fesm2022/koobiq-components-loader-overlay.mjs +167 -68
  131. package/fesm2022/koobiq-components-loader-overlay.mjs.map +1 -1
  132. package/fesm2022/koobiq-components-markdown.mjs +55 -78
  133. package/fesm2022/koobiq-components-markdown.mjs.map +1 -1
  134. package/fesm2022/koobiq-components-modal.mjs +853 -475
  135. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  136. package/fesm2022/koobiq-components-navbar.mjs +895 -556
  137. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  138. package/fesm2022/koobiq-components-notification-center.mjs +680 -310
  139. package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
  140. package/fesm2022/koobiq-components-overflow-items.mjs +46 -64
  141. package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
  142. package/fesm2022/koobiq-components-popover.mjs +684 -285
  143. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  144. package/fesm2022/koobiq-components-progress-bar.mjs +87 -33
  145. package/fesm2022/koobiq-components-progress-bar.mjs.map +1 -1
  146. package/fesm2022/koobiq-components-progress-spinner.mjs +52 -43
  147. package/fesm2022/koobiq-components-progress-spinner.mjs.map +1 -1
  148. package/fesm2022/koobiq-components-radio.mjs +450 -231
  149. package/fesm2022/koobiq-components-radio.mjs.map +1 -1
  150. package/fesm2022/koobiq-components-resizer.mjs +127 -21
  151. package/fesm2022/koobiq-components-resizer.mjs.map +1 -1
  152. package/fesm2022/koobiq-components-scrollbar-deprecated.mjs +299 -0
  153. package/fesm2022/koobiq-components-scrollbar-deprecated.mjs.map +1 -0
  154. package/fesm2022/koobiq-components-scrollbar.mjs +745 -222
  155. package/fesm2022/koobiq-components-scrollbar.mjs.map +1 -1
  156. package/fesm2022/koobiq-components-search-expandable.mjs +288 -126
  157. package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
  158. package/fesm2022/koobiq-components-select.mjs +883 -693
  159. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  160. package/fesm2022/koobiq-components-sidebar.mjs +207 -88
  161. package/fesm2022/koobiq-components-sidebar.mjs.map +1 -1
  162. package/fesm2022/koobiq-components-sidepanel.mjs +689 -296
  163. package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
  164. package/fesm2022/koobiq-components-skeleton.mjs +815 -41
  165. package/fesm2022/koobiq-components-skeleton.mjs.map +1 -1
  166. package/fesm2022/koobiq-components-split-button.mjs +109 -88
  167. package/fesm2022/koobiq-components-split-button.mjs.map +1 -1
  168. package/fesm2022/koobiq-components-splitter-deprecated.mjs +591 -0
  169. package/fesm2022/koobiq-components-splitter-deprecated.mjs.map +1 -0
  170. package/fesm2022/koobiq-components-splitter.mjs +890 -501
  171. package/fesm2022/koobiq-components-splitter.mjs.map +1 -1
  172. package/fesm2022/koobiq-components-table.mjs +63 -49
  173. package/fesm2022/koobiq-components-table.mjs.map +1 -1
  174. package/fesm2022/koobiq-components-tabs.mjs +1062 -603
  175. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  176. package/fesm2022/koobiq-components-tags.mjs +886 -733
  177. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  178. package/fesm2022/koobiq-components-textarea.mjs +213 -185
  179. package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
  180. package/fesm2022/koobiq-components-time-range.mjs +299 -147
  181. package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
  182. package/fesm2022/koobiq-components-timepicker.mjs +233 -245
  183. package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
  184. package/fesm2022/koobiq-components-timezone.mjs +344 -142
  185. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  186. package/fesm2022/koobiq-components-title.mjs +229 -145
  187. package/fesm2022/koobiq-components-title.mjs.map +1 -1
  188. package/fesm2022/koobiq-components-toast.mjs +486 -165
  189. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  190. package/fesm2022/koobiq-components-toggle.mjs +177 -130
  191. package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
  192. package/fesm2022/koobiq-components-tooltip.mjs +657 -214
  193. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  194. package/fesm2022/koobiq-components-top-bar.mjs +61 -32
  195. package/fesm2022/koobiq-components-top-bar.mjs.map +1 -1
  196. package/fesm2022/koobiq-components-tree-select.mjs +719 -488
  197. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  198. package/fesm2022/koobiq-components-tree.mjs +1506 -558
  199. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  200. package/fesm2022/koobiq-components-username.mjs +290 -135
  201. package/fesm2022/koobiq-components-username.mjs.map +1 -1
  202. package/file-upload/dropzone.scss +31 -3
  203. package/file-upload/file-upload-tokens.scss +2 -22
  204. package/file-upload/file-upload.scss +6 -0
  205. package/file-upload/multiple-file-upload.component.scss +14 -12
  206. package/file-upload/single-file-upload.component.scss +3 -2
  207. package/filter-bar/filters.scss +7 -0
  208. package/filter-bar/pipes/base-pipe.scss +3 -3
  209. package/filter-bar/pipes/pipe-date.scss +8 -1
  210. package/flag/flag-tokens.scss +22 -0
  211. package/flag/flag.scss +34 -21
  212. package/form-field/{_fiedset-theme.scss → _fieldset-theme.scss} +1 -5
  213. package/form-field/_form-field-theme.scss +4 -9
  214. package/form-field/cleaner.scss +3 -1
  215. package/form-field/fieldset.scss +3 -4
  216. package/form-field/form-field.scss +26 -21
  217. package/form-field/password-toggle.scss +3 -1
  218. package/icon/_icon-button-theme.scss +7 -0
  219. package/icon/_icon-theme.scss +10 -7
  220. package/icon/icon-button.scss +0 -2
  221. package/icon/icon-tokens.scss +12 -9
  222. package/inline-edit/inline-edit.scss +40 -54
  223. package/input/input.scss +4 -0
  224. package/link/{_link-theme.scss → deprecated/_link-theme.scss} +11 -6
  225. package/link/deprecated/link-tokens.scss +27 -0
  226. package/link/link-tokens.scss +6 -25
  227. package/link/link.scss +137 -0
  228. package/list/list.scss +3 -2
  229. package/loader-overlay/_loader-overlay-theme.scss +19 -10
  230. package/loader-overlay/loader-overlay-tokens.scss +0 -2
  231. package/loader-overlay/loader-overlay.scss +7 -1
  232. package/markdown/_markdown-theme.scss +16 -0
  233. package/markdown/markdown-tokens.scss +5 -0
  234. package/markdown/markdown.scss +2 -1
  235. package/modal/_modal-animation.scss +23 -14
  236. package/modal/modal-tokens.scss +2 -1
  237. package/modal/modal.scss +35 -31
  238. package/navbar/_navbar-item_horizontal.scss +8 -6
  239. package/navbar/_navbar-item_vertical.scss +18 -6
  240. package/navbar/_navbar-theme.scss +9 -1
  241. package/navbar/navbar-brand.scss +8 -6
  242. package/navbar/navbar-divider.scss +1 -1
  243. package/navbar/navbar-item.scss +8 -9
  244. package/navbar/navbar-toggle.scss +3 -3
  245. package/navbar/navbar-tokens.scss +14 -0
  246. package/navbar/navbar.scss +1 -2
  247. package/navbar/vertical-navbar.scss +2 -2
  248. package/notification-center/_notification-center-theme.scss +11 -6
  249. package/notification-center/notification-center-tokens.scss +33 -0
  250. package/notification-center/notification-center.scss +58 -20
  251. package/notification-center/notification-item.scss +15 -6
  252. package/package.json +112 -81
  253. package/popover/popover-tokens.scss +0 -2
  254. package/popover/popover.scss +41 -19
  255. package/prebuilt-themes/theme.css +1 -1
  256. package/progress-bar/_progress-bar-theme.scss +20 -3
  257. package/progress-bar/progress-bar-tokens.scss +3 -0
  258. package/progress-bar/progress-bar.scss +36 -8
  259. package/progress-spinner/progress-spinner.scss +4 -3
  260. package/radio/_radio-theme.scss +21 -4
  261. package/radio/radio-tokens.scss +7 -3
  262. package/radio/radio.scss +55 -8
  263. package/schematics/collection.json +399 -7
  264. package/schematics/migrations/accordion-state-saving-default/README.md +60 -0
  265. package/schematics/migrations/accordion-state-saving-default/data.js +75 -0
  266. package/schematics/migrations/accordion-state-saving-default/index.js +60 -0
  267. package/schematics/migrations/accordion-state-saving-default/schema.json +15 -0
  268. package/schematics/migrations/actions-panel-overlay-container/README.md +35 -0
  269. package/schematics/migrations/actions-panel-overlay-container/data.js +47 -0
  270. package/schematics/migrations/actions-panel-overlay-container/index.js +54 -0
  271. package/schematics/migrations/actions-panel-overlay-container/schema.json +15 -0
  272. package/schematics/migrations/alert-signals/README.md +13 -7
  273. package/schematics/migrations/alert-signals/data.js +3 -0
  274. package/schematics/migrations/alert-signals/index.js +70 -203
  275. package/schematics/migrations/angular-animations-removal/README.md +46 -0
  276. package/schematics/migrations/angular-animations-removal/data.js +150 -0
  277. package/schematics/migrations/angular-animations-removal/index.js +20 -0
  278. package/schematics/migrations/angular-animations-removal/schema.json +15 -0
  279. package/schematics/migrations/app-switcher-signals/README.md +88 -0
  280. package/schematics/migrations/app-switcher-signals/data.js +136 -0
  281. package/schematics/migrations/app-switcher-signals/index.js +365 -0
  282. package/schematics/migrations/app-switcher-signals/schema.json +20 -0
  283. package/schematics/migrations/autocomplete-panel-width-auto/README.md +2 -2
  284. package/schematics/migrations/autocomplete-panel-width-auto/index.js +1 -1
  285. package/schematics/migrations/autocomplete-signals/README.md +92 -0
  286. package/schematics/migrations/autocomplete-signals/data.js +149 -0
  287. package/schematics/migrations/autocomplete-signals/index.js +706 -0
  288. package/schematics/migrations/autocomplete-signals/schema.json +20 -0
  289. package/schematics/migrations/badge-signals/README.md +77 -0
  290. package/schematics/migrations/badge-signals/data.js +109 -0
  291. package/schematics/migrations/badge-signals/index.js +693 -0
  292. package/schematics/migrations/badge-signals/schema.json +20 -0
  293. package/schematics/migrations/button-state-and-styles/README.md +129 -0
  294. package/schematics/migrations/button-state-and-styles/data.js +136 -0
  295. package/schematics/migrations/button-state-and-styles/index.js +220 -0
  296. package/schematics/migrations/button-state-and-styles/schema.json +20 -0
  297. package/schematics/migrations/button-supported-colors/README.md +73 -0
  298. package/schematics/migrations/button-supported-colors/data.js +106 -0
  299. package/schematics/migrations/button-supported-colors/index.js +260 -0
  300. package/schematics/migrations/button-supported-colors/schema.json +20 -0
  301. package/schematics/migrations/button-toggle-signals-and-aria/README.md +137 -0
  302. package/schematics/migrations/button-toggle-signals-and-aria/data.js +200 -0
  303. package/schematics/migrations/button-toggle-signals-and-aria/index.js +496 -0
  304. package/schematics/migrations/button-toggle-signals-and-aria/schema.json +20 -0
  305. package/schematics/migrations/button-truncation/README.md +110 -0
  306. package/schematics/migrations/button-truncation/data.js +88 -0
  307. package/schematics/migrations/button-truncation/index.js +269 -0
  308. package/schematics/migrations/button-truncation/schema.json +20 -0
  309. package/schematics/migrations/checkbox-signals/README.md +76 -0
  310. package/schematics/migrations/checkbox-signals/data.js +114 -0
  311. package/schematics/migrations/checkbox-signals/index.js +634 -0
  312. package/schematics/migrations/checkbox-signals/schema.json +20 -0
  313. package/schematics/migrations/clamped-text-disclosure/README.md +62 -0
  314. package/schematics/migrations/clamped-text-disclosure/data.js +101 -0
  315. package/schematics/migrations/clamped-text-disclosure/index.js +59 -0
  316. package/schematics/migrations/clamped-text-disclosure/schema.json +15 -0
  317. package/schematics/migrations/code-block-signals/README.md +84 -0
  318. package/schematics/migrations/code-block-signals/data.js +121 -0
  319. package/schematics/migrations/code-block-signals/index.js +700 -0
  320. package/schematics/migrations/code-block-signals/schema.json +20 -0
  321. package/schematics/migrations/color-signals/README.md +46 -0
  322. package/schematics/migrations/color-signals/data.js +131 -0
  323. package/schematics/migrations/color-signals/index.js +19 -0
  324. package/schematics/migrations/color-signals/schema.json +20 -0
  325. package/schematics/migrations/core-mixins-removal/README.md +20 -0
  326. package/schematics/migrations/core-mixins-removal/data.js +27 -0
  327. package/schematics/migrations/core-mixins-removal/index.js +17 -0
  328. package/schematics/migrations/core-mixins-removal/schema.json +15 -0
  329. package/schematics/migrations/css-selectors/README.md +2 -2
  330. package/schematics/migrations/css-selectors/index.js +1 -1
  331. package/schematics/migrations/datepicker-signals/README.md +24 -0
  332. package/schematics/migrations/datepicker-signals/data.js +49 -0
  333. package/schematics/migrations/datepicker-signals/index.js +17 -0
  334. package/schematics/migrations/datepicker-signals/schema.json +15 -0
  335. package/schematics/migrations/deprecated-icons/README.md +2 -2
  336. package/schematics/migrations/deprecated-icons/index.js +1 -1
  337. package/schematics/migrations/design-tokens-v4/README.md +75 -0
  338. package/schematics/migrations/design-tokens-v4/index.js +59 -0
  339. package/schematics/migrations/design-tokens-v4/schema.json +15 -0
  340. package/schematics/migrations/divider-signals-and-aria/README.md +47 -0
  341. package/schematics/migrations/divider-signals-and-aria/data.js +62 -0
  342. package/schematics/migrations/divider-signals-and-aria/index.js +211 -0
  343. package/schematics/migrations/divider-signals-and-aria/schema.json +15 -0
  344. package/schematics/migrations/dl-attribute-coercion/README.md +59 -0
  345. package/schematics/migrations/dl-attribute-coercion/data.js +85 -0
  346. package/schematics/migrations/dl-attribute-coercion/index.js +161 -0
  347. package/schematics/migrations/dl-attribute-coercion/schema.json +15 -0
  348. package/schematics/migrations/dl-standalone-names/README.md +49 -0
  349. package/schematics/migrations/dl-standalone-names/data.js +44 -0
  350. package/schematics/migrations/dl-standalone-names/index.js +321 -0
  351. package/schematics/migrations/dl-standalone-names/schema.json +20 -0
  352. package/schematics/migrations/dropdown-demote-overlay/README.md +137 -0
  353. package/schematics/migrations/dropdown-demote-overlay/data.js +84 -0
  354. package/schematics/migrations/dropdown-demote-overlay/index.js +288 -0
  355. package/schematics/migrations/dropdown-demote-overlay/schema.json +20 -0
  356. package/schematics/migrations/dropdown-signals/README.md +83 -0
  357. package/schematics/migrations/dropdown-signals/data.js +152 -0
  358. package/schematics/migrations/dropdown-signals/index.js +19 -0
  359. package/schematics/migrations/dropdown-signals/schema.json +20 -0
  360. package/schematics/migrations/empty-state-error-color/README.md +84 -0
  361. package/schematics/migrations/empty-state-error-color/data.js +85 -0
  362. package/schematics/migrations/empty-state-error-color/index.js +71 -0
  363. package/schematics/migrations/empty-state-error-color/schema.json +15 -0
  364. package/schematics/migrations/empty-state-size-attr/README.md +2 -2
  365. package/schematics/migrations/empty-state-size-attr/index.js +1 -1
  366. package/schematics/migrations/file-upload-cva-and-primitives/README.md +70 -0
  367. package/schematics/migrations/file-upload-cva-and-primitives/data.js +97 -0
  368. package/schematics/migrations/file-upload-cva-and-primitives/index.js +60 -0
  369. package/schematics/migrations/file-upload-cva-and-primitives/schema.json +15 -0
  370. package/schematics/migrations/file-upload-deprecated-outputs/README.md +90 -0
  371. package/schematics/migrations/file-upload-deprecated-outputs/data.js +20 -0
  372. package/schematics/migrations/file-upload-deprecated-outputs/index.js +70 -0
  373. package/schematics/migrations/file-upload-deprecated-outputs/schema.json +20 -0
  374. package/schematics/migrations/filter-bar-rename-action/README.md +183 -0
  375. package/schematics/migrations/filter-bar-rename-action/data.js +151 -0
  376. package/schematics/migrations/filter-bar-rename-action/index.js +177 -0
  377. package/schematics/migrations/filter-bar-rename-action/schema.json +20 -0
  378. package/schematics/migrations/filter-bar-signals/README.md +27 -16
  379. package/schematics/migrations/filter-bar-signals/data.js +1 -2
  380. package/schematics/migrations/filter-bar-signals/index.js +100 -195
  381. package/schematics/migrations/filter-bar-state-saving-default/README.md +53 -0
  382. package/schematics/migrations/filter-bar-state-saving-default/data.js +87 -0
  383. package/schematics/migrations/filter-bar-state-saving-default/index.js +61 -0
  384. package/schematics/migrations/filter-bar-state-saving-default/schema.json +15 -0
  385. package/schematics/migrations/flag-inner-html/README.md +67 -0
  386. package/schematics/migrations/flag-inner-html/data.js +58 -0
  387. package/schematics/migrations/flag-inner-html/index.js +61 -0
  388. package/schematics/migrations/flag-inner-html/schema.json +15 -0
  389. package/schematics/migrations/form-field-signals/README.md +125 -0
  390. package/schematics/migrations/form-field-signals/data.js +288 -0
  391. package/schematics/migrations/form-field-signals/index.js +382 -0
  392. package/schematics/migrations/form-field-signals/schema.json +20 -0
  393. package/schematics/migrations/icon-semantics-and-api/README.md +65 -0
  394. package/schematics/migrations/icon-semantics-and-api/data.js +97 -0
  395. package/schematics/migrations/icon-semantics-and-api/index.js +64 -0
  396. package/schematics/migrations/icon-semantics-and-api/schema.json +15 -0
  397. package/schematics/migrations/icons-replacement/README.md +5 -5
  398. package/schematics/migrations/icons-replacement/index.js +1 -1
  399. package/schematics/migrations/inline-edit-a11y-and-types/README.md +82 -0
  400. package/schematics/migrations/inline-edit-a11y-and-types/data.js +117 -0
  401. package/schematics/migrations/inline-edit-a11y-and-types/index.js +97 -0
  402. package/schematics/migrations/inline-edit-a11y-and-types/schema.json +20 -0
  403. package/schematics/migrations/input-number-surface/README.md +140 -0
  404. package/schematics/migrations/input-number-surface/data.js +135 -0
  405. package/schematics/migrations/input-number-surface/index.js +292 -0
  406. package/schematics/migrations/input-number-surface/schema.json +20 -0
  407. package/schematics/migrations/input-signals/README.md +20 -0
  408. package/schematics/migrations/input-signals/data.js +30 -0
  409. package/schematics/migrations/input-signals/index.js +17 -0
  410. package/schematics/migrations/input-signals/schema.json +15 -0
  411. package/schematics/migrations/link-deprecated-path/README.md +144 -0
  412. package/schematics/migrations/link-deprecated-path/index.js +19 -0
  413. package/schematics/migrations/link-deprecated-path/schema.json +20 -0
  414. package/schematics/migrations/link-signals/README.md +71 -0
  415. package/schematics/migrations/link-signals/data.js +116 -0
  416. package/schematics/migrations/link-signals/index.js +415 -0
  417. package/schematics/migrations/link-signals/schema.json +20 -0
  418. package/schematics/migrations/list-signals/README.md +22 -0
  419. package/schematics/migrations/list-signals/data.js +35 -0
  420. package/schematics/migrations/list-signals/index.js +17 -0
  421. package/schematics/migrations/list-signals/schema.json +15 -0
  422. package/schematics/migrations/list-tree-multiple-input/README.md +105 -0
  423. package/schematics/migrations/list-tree-multiple-input/data.js +74 -0
  424. package/schematics/migrations/list-tree-multiple-input/index.js +221 -0
  425. package/schematics/migrations/list-tree-multiple-input/schema.json +20 -0
  426. package/schematics/migrations/loader-overlay-signals/README.md +62 -0
  427. package/schematics/migrations/loader-overlay-signals/data.js +101 -0
  428. package/schematics/migrations/loader-overlay-signals/index.js +697 -0
  429. package/schematics/migrations/loader-overlay-signals/schema.json +20 -0
  430. package/schematics/migrations/loader-overlay-size-attr/README.md +2 -2
  431. package/schematics/migrations/loader-overlay-size-attr/index.js +1 -1
  432. package/schematics/migrations/locale-configuration-providers/README.md +163 -0
  433. package/schematics/migrations/locale-configuration-providers/data.js +257 -0
  434. package/schematics/migrations/locale-configuration-providers/index.js +294 -0
  435. package/schematics/migrations/locale-configuration-providers/schema.json +20 -0
  436. package/schematics/migrations/mandatory-peer-dependencies/README.md +70 -0
  437. package/schematics/migrations/mandatory-peer-dependencies/index.js +42 -0
  438. package/schematics/migrations/mandatory-peer-dependencies/schema.json +15 -0
  439. package/schematics/migrations/markdown-signals/README.md +58 -0
  440. package/schematics/migrations/markdown-signals/data.js +79 -0
  441. package/schematics/migrations/markdown-signals/index.js +639 -0
  442. package/schematics/migrations/markdown-signals/schema.json +20 -0
  443. package/schematics/migrations/modal-dialog-semantics/README.md +106 -0
  444. package/schematics/migrations/modal-dialog-semantics/data.js +110 -0
  445. package/schematics/migrations/modal-dialog-semantics/index.js +58 -0
  446. package/schematics/migrations/modal-dialog-semantics/schema.json +15 -0
  447. package/schematics/migrations/modal-signals/README.md +88 -0
  448. package/schematics/migrations/modal-signals/data.js +132 -0
  449. package/schematics/migrations/modal-signals/index.js +19 -0
  450. package/schematics/migrations/modal-signals/schema.json +20 -0
  451. package/schematics/migrations/navbar-signals-and-aria/README.md +111 -0
  452. package/schematics/migrations/navbar-signals-and-aria/data.js +198 -0
  453. package/schematics/migrations/navbar-signals-and-aria/index.js +568 -0
  454. package/schematics/migrations/navbar-signals-and-aria/schema.json +20 -0
  455. package/schematics/migrations/new-icons-pack/README.md +10 -10
  456. package/schematics/migrations/new-icons-pack/index.js +1 -1
  457. package/schematics/migrations/notification-center-signals/README.md +67 -0
  458. package/schematics/migrations/notification-center-signals/data.js +66 -0
  459. package/schematics/migrations/notification-center-signals/index.js +61 -0
  460. package/schematics/migrations/notification-center-signals/schema.json +15 -0
  461. package/schematics/migrations/option-signals/README.md +37 -0
  462. package/schematics/migrations/option-signals/data.js +86 -0
  463. package/schematics/migrations/option-signals/index.js +19 -0
  464. package/schematics/migrations/option-signals/schema.json +20 -0
  465. package/schematics/migrations/popover-leave-delay/README.md +51 -0
  466. package/schematics/migrations/popover-leave-delay/data.js +61 -0
  467. package/schematics/migrations/popover-leave-delay/index.js +54 -0
  468. package/schematics/migrations/popover-leave-delay/schema.json +15 -0
  469. package/schematics/migrations/progress-bar-percentage-and-aria/README.md +54 -0
  470. package/schematics/migrations/progress-bar-percentage-and-aria/data.js +76 -0
  471. package/schematics/migrations/progress-bar-percentage-and-aria/index.js +58 -0
  472. package/schematics/migrations/progress-bar-percentage-and-aria/schema.json +15 -0
  473. package/schematics/migrations/progress-spinner-signals/README.md +72 -0
  474. package/schematics/migrations/progress-spinner-signals/data.js +83 -0
  475. package/schematics/migrations/progress-spinner-signals/index.js +694 -0
  476. package/schematics/migrations/progress-spinner-signals/schema.json +20 -0
  477. package/schematics/migrations/query-list-signals/README.md +32 -0
  478. package/schematics/migrations/query-list-signals/data.js +70 -0
  479. package/schematics/migrations/query-list-signals/index.js +17 -0
  480. package/schematics/migrations/query-list-signals/schema.json +15 -0
  481. package/schematics/migrations/radio-signals-and-aria/README.md +82 -0
  482. package/schematics/migrations/radio-signals-and-aria/data.js +163 -0
  483. package/schematics/migrations/radio-signals-and-aria/index.js +39 -0
  484. package/schematics/migrations/radio-signals-and-aria/schema.json +20 -0
  485. package/schematics/migrations/read-state-dwell-handlers/README.md +125 -0
  486. package/schematics/migrations/read-state-dwell-handlers/data.js +45 -0
  487. package/schematics/migrations/read-state-dwell-handlers/index.js +215 -0
  488. package/schematics/migrations/read-state-dwell-handlers/schema.json +20 -0
  489. package/schematics/migrations/scrollbar-deprecated-path/README.md +128 -0
  490. package/schematics/migrations/scrollbar-deprecated-path/index.js +20 -0
  491. package/schematics/migrations/scrollbar-deprecated-path/schema.json +20 -0
  492. package/schematics/migrations/select-signal-inputs/README.md +61 -0
  493. package/schematics/migrations/select-signal-inputs/data.js +99 -0
  494. package/schematics/migrations/select-signal-inputs/index.js +57 -0
  495. package/schematics/migrations/select-signal-inputs/schema.json +15 -0
  496. package/schematics/migrations/sidepanel-non-modal-behavior/README.md +57 -0
  497. package/schematics/migrations/sidepanel-non-modal-behavior/data.js +111 -0
  498. package/schematics/migrations/sidepanel-non-modal-behavior/index.js +57 -0
  499. package/schematics/migrations/sidepanel-non-modal-behavior/schema.json +15 -0
  500. package/schematics/migrations/signal-inputs-subclasses/README.md +28 -0
  501. package/schematics/migrations/signal-inputs-subclasses/data.js +69 -0
  502. package/schematics/migrations/signal-inputs-subclasses/index.js +17 -0
  503. package/schematics/migrations/signal-inputs-subclasses/schema.json +15 -0
  504. package/schematics/migrations/split-button-optional-disabled/README.md +47 -0
  505. package/schematics/migrations/split-button-optional-disabled/data.js +53 -0
  506. package/schematics/migrations/split-button-optional-disabled/index.js +57 -0
  507. package/schematics/migrations/split-button-optional-disabled/schema.json +15 -0
  508. package/schematics/migrations/splitter-deprecated-path/README.md +136 -0
  509. package/schematics/migrations/splitter-deprecated-path/index.js +20 -0
  510. package/schematics/migrations/splitter-deprecated-path/schema.json +20 -0
  511. package/schematics/migrations/state-saving-default/README.md +67 -0
  512. package/schematics/migrations/state-saving-default/data.js +88 -0
  513. package/schematics/migrations/state-saving-default/index.js +62 -0
  514. package/schematics/migrations/state-saving-default/schema.json +15 -0
  515. package/schematics/migrations/table-cell-content/README.md +55 -0
  516. package/schematics/migrations/table-cell-content/data.js +66 -0
  517. package/schematics/migrations/table-cell-content/index.js +66 -0
  518. package/schematics/migrations/table-cell-content/schema.json +15 -0
  519. package/schematics/migrations/tabs-signals-and-aria/README.md +93 -0
  520. package/schematics/migrations/tabs-signals-and-aria/data.js +139 -0
  521. package/schematics/migrations/tabs-signals-and-aria/index.js +65 -0
  522. package/schematics/migrations/tabs-signals-and-aria/schema.json +15 -0
  523. package/schematics/migrations/tag-list-cleaner/README.md +58 -0
  524. package/schematics/migrations/tag-list-cleaner/data.js +42 -0
  525. package/schematics/migrations/tag-list-cleaner/index.js +196 -0
  526. package/schematics/migrations/tag-list-cleaner/schema.json +20 -0
  527. package/schematics/migrations/tag-slots/README.md +41 -0
  528. package/schematics/migrations/tag-slots/index.js +190 -0
  529. package/schematics/migrations/tag-slots/schema.json +20 -0
  530. package/schematics/migrations/tags-signals/README.md +85 -0
  531. package/schematics/migrations/tags-signals/data.js +103 -0
  532. package/schematics/migrations/tags-signals/index.js +673 -0
  533. package/schematics/migrations/tags-signals/schema.json +20 -0
  534. package/schematics/migrations/textarea-signals/README.md +72 -0
  535. package/schematics/migrations/textarea-signals/data.js +121 -0
  536. package/schematics/migrations/textarea-signals/index.js +379 -0
  537. package/schematics/migrations/textarea-signals/schema.json +20 -0
  538. package/schematics/migrations/time-range-title-for/README.md +164 -0
  539. package/schematics/migrations/time-range-title-for/data.js +139 -0
  540. package/schematics/migrations/time-range-title-for/index.js +163 -0
  541. package/schematics/migrations/time-range-title-for/schema.json +20 -0
  542. package/schematics/migrations/timepicker-signals/README.md +78 -0
  543. package/schematics/migrations/timepicker-signals/data.js +82 -0
  544. package/schematics/migrations/timepicker-signals/index.js +709 -0
  545. package/schematics/migrations/timepicker-signals/schema.json +20 -0
  546. package/schematics/migrations/timezone-grouping-utils/README.md +73 -0
  547. package/schematics/migrations/timezone-grouping-utils/data.js +101 -0
  548. package/schematics/migrations/timezone-grouping-utils/index.js +64 -0
  549. package/schematics/migrations/timezone-grouping-utils/schema.json +15 -0
  550. package/schematics/migrations/title-encapsulation/README.md +49 -0
  551. package/schematics/migrations/title-encapsulation/data.js +69 -0
  552. package/schematics/migrations/title-encapsulation/index.js +57 -0
  553. package/schematics/migrations/title-encapsulation/schema.json +15 -0
  554. package/schematics/migrations/toast-stack-and-defaults/README.md +102 -0
  555. package/schematics/migrations/toast-stack-and-defaults/data.js +79 -0
  556. package/schematics/migrations/toast-stack-and-defaults/index.js +53 -0
  557. package/schematics/migrations/toast-stack-and-defaults/schema.json +15 -0
  558. package/schematics/migrations/tooltip-pointer-events-and-types/README.md +53 -0
  559. package/schematics/migrations/tooltip-pointer-events-and-types/data.js +89 -0
  560. package/schematics/migrations/tooltip-pointer-events-and-types/index.js +60 -0
  561. package/schematics/migrations/tooltip-pointer-events-and-types/schema.json +15 -0
  562. package/schematics/migrations/top-bar-container-selectors/README.md +111 -0
  563. package/schematics/migrations/top-bar-container-selectors/data.js +56 -0
  564. package/schematics/migrations/top-bar-container-selectors/index.js +84 -0
  565. package/schematics/migrations/top-bar-container-selectors/schema.json +20 -0
  566. package/schematics/migrations/tree-select-signals/README.md +61 -0
  567. package/schematics/migrations/tree-select-signals/data.js +106 -0
  568. package/schematics/migrations/tree-select-signals/index.js +58 -0
  569. package/schematics/migrations/tree-select-signals/schema.json +15 -0
  570. package/schematics/migrations/tree-signals/README.md +82 -0
  571. package/schematics/migrations/tree-signals/data.js +123 -0
  572. package/schematics/migrations/tree-signals/index.js +54 -0
  573. package/schematics/migrations/tree-signals/schema.json +15 -0
  574. package/schematics/migrations/tree-state-saving-default/README.md +66 -0
  575. package/schematics/migrations/tree-state-saving-default/data.js +78 -0
  576. package/schematics/migrations/tree-state-saving-default/index.js +60 -0
  577. package/schematics/migrations/tree-state-saving-default/schema.json +15 -0
  578. package/schematics/migrations/username-pipe-injection/README.md +59 -0
  579. package/schematics/migrations/username-pipe-injection/data.js +78 -0
  580. package/schematics/migrations/username-pipe-injection/index.js +58 -0
  581. package/schematics/migrations/username-pipe-injection/schema.json +15 -0
  582. package/schematics/migrations/v20-upgrade/README.md +36 -16
  583. package/schematics/migrations/v20-upgrade/data.js +124 -77
  584. package/schematics/migrations/v20-upgrade/index.js +6 -213
  585. package/schematics/migrations/v21-upgrade/README.md +271 -0
  586. package/schematics/migrations/v21-upgrade/data.js +1371 -0
  587. package/schematics/migrations/v21-upgrade/index.js +94 -0
  588. package/schematics/migrations/v21-upgrade/schema.json +20 -0
  589. package/schematics/migrations/zoneless-change-detection/README.md +30 -0
  590. package/schematics/migrations/zoneless-change-detection/data.js +29 -0
  591. package/schematics/migrations/zoneless-change-detection/index.js +20 -0
  592. package/schematics/migrations/zoneless-change-detection/schema.json +15 -0
  593. package/schematics/migrations.json +392 -2
  594. package/schematics/ng-add/index.js +515 -14
  595. package/schematics/ng-add/schema.json +15 -0
  596. package/schematics/utils/deprecated-path-migration.js +61 -0
  597. package/schematics/utils/package-config.js +9 -105
  598. package/scrollbar/{_scrollbar-component-theme.scss → deprecated/_scrollbar-component-theme.scss} +1 -1
  599. package/scrollbar/{scrollbar.component.scss → deprecated/scrollbar.component.scss} +1 -1
  600. package/scrollbar/native-scrollbar.scss +68 -0
  601. package/scrollbar/scrollbar-tokens.scss +13 -22
  602. package/scrollbar/scrollbar-track.scss +94 -0
  603. package/scrollbar/scrollbar-viewport.scss +33 -0
  604. package/scrollbar/scrollbar.scss +24 -0
  605. package/search-expandable/search-expandable-tokens.scss +4 -0
  606. package/search-expandable/search-expandable.scss +4 -2
  607. package/select/_select-theme.scss +3 -16
  608. package/select/select.scss +0 -6
  609. package/sidebar/sidebar.scss +20 -0
  610. package/sidepanel/_sidepanel-theme.scss +1 -1
  611. package/sidepanel/sidepanel-tokens.scss +7 -1
  612. package/sidepanel/sidepanel.scss +41 -5
  613. package/skeleton/skeleton-presets.scss +350 -0
  614. package/skeleton/skeleton-tokens.scss +127 -0
  615. package/skeleton/skeleton.scss +53 -45
  616. package/split-button/_split-button-theme.scss +4 -4
  617. package/split-button/split-button.scss +2 -6
  618. package/splitter/{_splitter-theme.scss → deprecated/_splitter-theme.scss} +1 -1
  619. package/splitter/deprecated/splitter.scss +51 -0
  620. package/splitter/splitter-tokens.scss +19 -0
  621. package/splitter/splitter.scss +148 -28
  622. package/table/_table-theme.scss +13 -12
  623. package/table/table-tokens.scss +8 -0
  624. package/table/table.scss +47 -22
  625. package/tabs/_tabs-common.scss +14 -14
  626. package/tabs/_tabs-theme.scss +4 -5
  627. package/tabs/tab-body.scss +49 -1
  628. package/tabs/tab-header.scss +2 -1
  629. package/tags/tag-list.scss +4 -0
  630. package/tags/tag.scss +19 -1
  631. package/time-range/time-range.scss +9 -0
  632. package/timezone/timezone-option.component.scss +4 -7
  633. package/timezone/timezone-select.component.scss +3 -0
  634. package/toast/_toast-theme.scss +1 -4
  635. package/toast/toast-container.component.scss +19 -13
  636. package/toast/toast-tokens.scss +12 -6
  637. package/toast/toast.component.scss +42 -19
  638. package/toggle/_toggle-theme.scss +4 -10
  639. package/toggle/toggle.scss +67 -26
  640. package/tooltip/_tooltip-theme.scss +7 -1
  641. package/tooltip/tooltip-tokens.scss +1 -2
  642. package/tooltip/tooltip.scss +55 -9
  643. package/top-bar/top-bar-tokens.scss +13 -2
  644. package/top-bar/top-bar.scss +24 -19
  645. package/tree/_tree-theme.scss +0 -1
  646. package/tree/toggle.scss +5 -9
  647. package/tree/tree-option.scss +2 -4
  648. package/tree/tree-tokens.scss +2 -1
  649. package/tree/tree.scss +3 -5
  650. package/tree-select/_tree-select-theme.scss +4 -15
  651. package/tree-select/tree-select-tokens.scss +16 -0
  652. package/tree-select/tree-select.scss +0 -6
  653. package/{accordion/index.d.ts → types/koobiq-components-accordion.d.ts} +102 -84
  654. package/{actions-panel/index.d.ts → types/koobiq-components-actions-panel.d.ts} +44 -59
  655. package/{alert/index.d.ts → types/koobiq-components-alert.d.ts} +8 -3
  656. package/types/koobiq-components-app-switcher.d.ts +406 -0
  657. package/types/koobiq-components-autocomplete.d.ts +443 -0
  658. package/{badge/index.d.ts → types/koobiq-components-badge.d.ts} +25 -20
  659. package/{breadcrumbs/index.d.ts → types/koobiq-components-breadcrumbs.d.ts} +97 -46
  660. package/types/koobiq-components-button-toggle.d.ts +340 -0
  661. package/types/koobiq-components-button.d.ts +296 -0
  662. package/types/koobiq-components-checkbox.d.ts +172 -0
  663. package/types/koobiq-components-clamped-text.d.ts +184 -0
  664. package/{code-block/index.d.ts → types/koobiq-components-code-block.d.ts} +114 -79
  665. package/{content-panel/index.d.ts → types/koobiq-components-content-panel.d.ts} +81 -25
  666. package/{core/index.d.ts → types/koobiq-components-core.d.ts} +2827 -865
  667. package/{datepicker/index.d.ts → types/koobiq-components-datepicker.d.ts} +161 -116
  668. package/types/koobiq-components-divider.d.ts +43 -0
  669. package/types/koobiq-components-dl.d.ts +235 -0
  670. package/{dropdown/index.d.ts → types/koobiq-components-dropdown.d.ts} +245 -239
  671. package/types/koobiq-components-ellipsis-center.d.ts +85 -0
  672. package/types/koobiq-components-empty-state.d.ts +106 -0
  673. package/{file-upload/index.d.ts → types/koobiq-components-file-upload.d.ts} +214 -107
  674. package/{filter-bar/index.d.ts → types/koobiq-components-filter-bar.d.ts} +410 -495
  675. package/types/koobiq-components-flag.d.ts +68 -0
  676. package/{form-field/index.d.ts → types/koobiq-components-form-field.d.ts} +167 -191
  677. package/types/koobiq-components-icon.d.ts +333 -0
  678. package/{inline-edit/index.d.ts → types/koobiq-components-inline-edit.d.ts} +109 -46
  679. package/types/koobiq-components-input.d.ts +477 -0
  680. package/types/koobiq-components-link-deprecated.d.ts +101 -0
  681. package/types/koobiq-components-link.d.ts +176 -0
  682. package/{list/index.d.ts → types/koobiq-components-list.d.ts} +162 -99
  683. package/types/koobiq-components-loader-overlay.d.ts +101 -0
  684. package/{markdown/index.d.ts → types/koobiq-components-markdown.d.ts} +16 -24
  685. package/types/koobiq-components-modal.d.ts +666 -0
  686. package/types/koobiq-components-navbar.d.ts +569 -0
  687. package/types/koobiq-components-notification-center.d.ts +500 -0
  688. package/{overflow-items/index.d.ts → types/koobiq-components-overflow-items.d.ts} +8 -22
  689. package/types/koobiq-components-popover.d.ts +468 -0
  690. package/types/koobiq-components-progress-bar.d.ts +67 -0
  691. package/{progress-spinner/index.d.ts → types/koobiq-components-progress-spinner.d.ts} +33 -10
  692. package/types/koobiq-components-radio.d.ts +294 -0
  693. package/{resizer/index.d.ts → types/koobiq-components-resizer.d.ts} +37 -2
  694. package/{scrollbar/index.d.ts → types/koobiq-components-scrollbar-deprecated.d.ts} +18 -1
  695. package/types/koobiq-components-scrollbar.d.ts +154 -0
  696. package/types/koobiq-components-search-expandable.d.ts +164 -0
  697. package/{select/index.d.ts → types/koobiq-components-select.d.ts} +360 -167
  698. package/types/koobiq-components-sidebar.d.ts +152 -0
  699. package/types/koobiq-components-sidepanel.d.ts +436 -0
  700. package/types/koobiq-components-skeleton.d.ts +234 -0
  701. package/types/koobiq-components-split-button.d.ts +65 -0
  702. package/{splitter/index.d.ts → types/koobiq-components-splitter-deprecated.d.ts} +44 -1
  703. package/types/koobiq-components-splitter.d.ts +406 -0
  704. package/types/koobiq-components-table.d.ts +44 -0
  705. package/types/koobiq-components-tabs.d.ts +888 -0
  706. package/{tags/index.d.ts → types/koobiq-components-tags.d.ts} +249 -133
  707. package/types/koobiq-components-textarea.d.ts +178 -0
  708. package/{time-range/index.d.ts → types/koobiq-components-time-range.d.ts} +135 -62
  709. package/types/koobiq-components-timepicker.d.ts +223 -0
  710. package/types/koobiq-components-timezone.d.ts +266 -0
  711. package/types/koobiq-components-title.d.ts +184 -0
  712. package/types/koobiq-components-toast.d.ts +289 -0
  713. package/types/koobiq-components-toggle.d.ts +121 -0
  714. package/types/koobiq-components-tooltip.d.ts +610 -0
  715. package/types/koobiq-components-top-bar.d.ts +61 -0
  716. package/types/koobiq-components-tree-select.d.ts +667 -0
  717. package/types/koobiq-components-tree.d.ts +1290 -0
  718. package/types/koobiq-components-username.d.ts +340 -0
  719. package/username/_username-theme.scss +35 -0
  720. package/username/username.scss +10 -34
  721. package/app-switcher/index.d.ts +0 -276
  722. package/autocomplete/index.d.ts +0 -286
  723. package/button/index.d.ts +0 -153
  724. package/button-toggle/index.d.ts +0 -162
  725. package/checkbox/index.d.ts +0 -163
  726. package/clamped-text/index.d.ts +0 -146
  727. package/core/styles/_tokens.scss +0 -7
  728. package/core/styles/common/_clearfix.scss +0 -13
  729. package/core/styles/common/_popup.scss +0 -6
  730. package/core/styles/functions/_index.scss +0 -3
  731. package/core/styles/functions/_number.scss +0 -60
  732. package/core/styles/functions/_string.scss +0 -18
  733. package/core/styles/theming/scrollbar-tokens.scss +0 -25
  734. package/core/styles/typography/_typography-utils.scss +0 -84
  735. package/divider/index.d.ts +0 -20
  736. package/dl/index.d.ts +0 -45
  737. package/ellipsis-center/index.d.ts +0 -71
  738. package/empty-state/index.d.ts +0 -45
  739. package/flag/index.d.ts +0 -44
  740. package/icon/index.d.ts +0 -200
  741. package/input/index.d.ts +0 -354
  742. package/link/index.d.ts +0 -56
  743. package/loader-overlay/index.d.ts +0 -57
  744. package/modal/index.d.ts +0 -339
  745. package/navbar/index.d.ts +0 -372
  746. package/notification-center/index.d.ts +0 -323
  747. package/popover/index.d.ts +0 -182
  748. package/prebuilt-themes/dark-theme.css +0 -1
  749. package/prebuilt-themes/light-theme.css +0 -1
  750. package/progress-bar/index.d.ts +0 -31
  751. package/radio/index.d.ts +0 -203
  752. package/search-expandable/index.d.ts +0 -101
  753. package/sidebar/index.d.ts +0 -94
  754. package/sidepanel/index.d.ts +0 -272
  755. package/skeleton/index.d.ts +0 -26
  756. package/split-button/index.d.ts +0 -46
  757. package/table/index.d.ts +0 -25
  758. package/tabs/index.d.ts +0 -677
  759. package/textarea/index.d.ts +0 -138
  760. package/timepicker/index.d.ts +0 -197
  761. package/timezone/index.d.ts +0 -125
  762. package/title/index.d.ts +0 -139
  763. package/toast/index.d.ts +0 -187
  764. package/toggle/index.d.ts +0 -104
  765. package/tooltip/index.d.ts +0 -335
  766. package/top-bar/index.d.ts +0 -33
  767. package/tree/index.d.ts +0 -802
  768. package/tree-select/index.d.ts +0 -475
  769. package/username/index.d.ts +0 -194
  770. /package/{dynamic-translation/index.d.ts → types/koobiq-components-dynamic-translation.d.ts} +0 -0
  771. /package/{index.d.ts → types/koobiq-components.d.ts} +0 -0
@@ -1,47 +1,61 @@
1
- import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
1
  import { ContentObserver } from '@angular/cdk/observers';
3
2
  import { SharedResizeObserver } from '@angular/cdk/observers/private';
4
- import { Platform, PlatformModule } from '@angular/cdk/platform';
3
+ import { Platform, _getFocusedElementPierceShadowDom, PlatformModule } from '@angular/cdk/platform';
5
4
  import { DOCUMENT } from '@angular/common';
6
5
  import * as i0 from '@angular/core';
7
- import { Directive, inject, ElementRef, ChangeDetectorRef, NgZone, contentChild, booleanAttribute, Input, ViewEncapsulation, ChangeDetectionStrategy, Component, Injector, signal, input, computed, afterNextRender, DestroyRef, ContentChildren, forwardRef, contentChildren, effect, InjectionToken, NgModule } from '@angular/core';
6
+ import { Directive, inject, ElementRef, ChangeDetectorRef, Injector, DestroyRef, contentChild, signal, input, booleanAttribute, afterNextRender, computed, contentChildren, effect, ViewEncapsulation, ChangeDetectionStrategy, Component, Renderer2, forwardRef, model, NgZone, untracked, InjectionToken, Injectable, NgModule } from '@angular/core';
8
7
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
9
- import { kbqInjectNativeElement, KBQ_WINDOW, PopUpTriggers, PopUpPlacements, DOWN_ARROW, RIGHT_ARROW, FocusKeyManager, isVerticalMovement, isHorizontalMovement, TAB, LEFT_ARROW, ruRULocaleData, KBQ_LOCALE_SERVICE, UP_ARROW, NUMPAD_DIVIDE, SLASH, SPACE, ENTER } from '@koobiq/components/core';
10
- import * as i2 from '@koobiq/components/tooltip';
8
+ import * as i2 from '@koobiq/components/core';
9
+ import { kbqInjectNativeElement, KBQ_WINDOW, kbqAnimationsDisabled, PopUpTriggers, PopUpPlacements, ENTER, SPACE, DOWN_ARROW, RIGHT_ARROW, kbqQueryListFrom, FocusKeyManager, kbqLeaveTabOrderOnTabOut, isVerticalMovement, isHorizontalMovement, TAB, LEFT_ARROW, KbqOverlayLayerExclude, ruRULocaleData, kbqLocaleConfigurationOverrideProvider, KbqLocaleOverridesDirective, UP_ARROW, NUMPAD_DIVIDE, SLASH } from '@koobiq/components/core';
10
+ import * as i1 from '@koobiq/components/tooltip';
11
11
  import { KbqTooltipTrigger, KbqToolTipModule } from '@koobiq/components/tooltip';
12
- import { Subject, map, distinctUntilChanged, from, EMPTY, merge } from 'rxjs';
13
- import { take, debounceTime, startWith } from 'rxjs/operators';
14
- import * as i1 from '@angular/cdk/a11y';
12
+ import { Subject, map, distinctUntilChanged, from, EMPTY, merge, fromEvent } from 'rxjs';
13
+ import { debounceTime, startWith } from 'rxjs/operators';
14
+ import * as i1$1 from '@angular/cdk/a11y';
15
15
  import { FocusMonitor, CdkMonitorFocus, A11yModule } from '@angular/cdk/a11y';
16
16
  import { KbqButton, KbqButtonCssStyler } from '@koobiq/components/button';
17
- import { KbqDropdownTrigger, KBQ_DROPDOWN_HOST } from '@koobiq/components/dropdown';
17
+ import { KbqDropdownTrigger } from '@koobiq/components/dropdown';
18
18
  import { KbqFormField } from '@koobiq/components/form-field';
19
19
  import * as i3 from '@koobiq/components/icon';
20
20
  import { KbqIcon, KbqIconModule } from '@koobiq/components/icon';
21
21
 
22
+ /**
23
+ * Outer width of an element: its border box plus horizontal margins.
24
+ *
25
+ * Measured with `getBoundingClientRect()` rather than `getComputedStyle().width`, which resolves to the used
26
+ * content-box width whatever `box-sizing` says: `.kbq-navbar-item` is `border-box` with horizontal padding, and
27
+ * the navbar compares these sums against its own border box.
28
+ */
29
+ const getOuterWidth = (element, window) => {
30
+ const { marginLeft, marginRight } = window.getComputedStyle(element);
31
+ return [marginLeft, marginRight].reduce((acc, item) => acc + (parseFloat(item) || 0), element.getBoundingClientRect().width);
32
+ };
33
+
34
+ /**
35
+ * Elements that already turn Enter/Space into a `click` on their own. Items authored on top of them must not
36
+ * get a synthetic activation on the same key, or the handler runs twice.
37
+ */
38
+ const NATIVELY_ACTIONABLE_TAGS = new Set(['A', 'BUTTON', 'INPUT', 'SELECT', 'TEXTAREA']);
39
+ /** Switches an item to its collapsed, icon-only presentation. */
40
+ const COLLAPSED_ITEM_CLASS = 'kbq-navbar-item_collapsed';
22
41
  class KbqNavbarLogo {
23
- constructor() {
24
- this.hovered = new Subject();
25
- }
26
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqNavbarLogo, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
27
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.30", type: KbqNavbarLogo, isStandalone: true, selector: "kbq-navbar-logo, [kbq-navbar-logo]", host: { listeners: { "mouseenter": "hovered.next(true)", "mouseleave": "hovered.next(false)" }, classAttribute: "kbq-navbar-logo" }, ngImport: i0 }); }
42
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqNavbarLogo, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
43
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.25", type: KbqNavbarLogo, isStandalone: true, selector: "kbq-navbar-logo, [kbq-navbar-logo]", host: { classAttribute: "kbq-navbar-logo" }, ngImport: i0 }); }
28
44
  }
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqNavbarLogo, decorators: [{
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqNavbarLogo, decorators: [{
30
46
  type: Directive,
31
47
  args: [{
32
48
  selector: 'kbq-navbar-logo, [kbq-navbar-logo]',
33
49
  host: {
34
- class: 'kbq-navbar-logo',
35
- '(mouseenter)': 'hovered.next(true)',
36
- '(mouseleave)': 'hovered.next(false)'
50
+ class: 'kbq-navbar-logo'
37
51
  }
38
52
  }]
39
53
  }] });
40
54
  class KbqNavbarBento {
41
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqNavbarBento, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
42
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.30", type: KbqNavbarBento, isStandalone: true, selector: "kbq-navbar-item[bento], [kbq-navbar-item][bento]", host: { classAttribute: "kbq-navbar-bento" }, ngImport: i0 }); }
55
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqNavbarBento, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
56
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.25", type: KbqNavbarBento, isStandalone: true, selector: "kbq-navbar-item[bento], [kbq-navbar-item][bento]", host: { classAttribute: "kbq-navbar-bento" }, ngImport: i0 }); }
43
57
  }
44
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqNavbarBento, decorators: [{
58
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqNavbarBento, decorators: [{
45
59
  type: Directive,
46
60
  args: [{
47
61
  selector: 'kbq-navbar-item[bento], [kbq-navbar-item][bento]',
@@ -50,13 +64,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImpo
50
64
  }
51
65
  }]
52
66
  }] });
67
+ /** Marks content to be projected after the title of a navbar item. */
68
+ class KbqNavbarItemSuffix {
69
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqNavbarItemSuffix, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
70
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.25", type: KbqNavbarItemSuffix, isStandalone: true, selector: "[kbqNavbarItemSuffix]", host: { classAttribute: "kbq-navbar-item-suffix" }, ngImport: i0 }); }
71
+ }
72
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqNavbarItemSuffix, decorators: [{
73
+ type: Directive,
74
+ args: [{
75
+ selector: '[kbqNavbarItemSuffix]',
76
+ host: {
77
+ class: 'kbq-navbar-item-suffix'
78
+ }
79
+ }]
80
+ }] });
53
81
  class KbqNavbarTitle {
54
82
  constructor() {
83
+ /** @docs-private */
55
84
  this.isBrowser = inject(Platform).isBrowser;
85
+ /** @docs-private */
56
86
  this.nativeElement = kbqInjectNativeElement();
57
87
  this.window = inject(KBQ_WINDOW);
58
- this.hovered = new Subject();
59
88
  }
89
+ /** Text content of the title element. */
60
90
  get text() {
61
91
  return this.nativeElement.textContent || '';
62
92
  }
@@ -79,96 +109,73 @@ class KbqNavbarTitle {
79
109
  return false;
80
110
  return this.nativeElement.scrollHeight > this.nativeElement.clientHeight;
81
111
  }
82
- /**
83
- * Outer width of the title: its border box plus horizontal margins.
84
- *
85
- * Measured with `getBoundingClientRect()` rather than `getComputedStyle().width`, which resolves
86
- * to the used content-box width whatever `box-sizing` says and would drop the title's padding.
87
- */
112
+ /** Outer width of the title: its border box plus horizontal margins. */
88
113
  getOuterElementWidth() {
89
- if (!this.isBrowser)
90
- return 0;
91
- const { marginLeft, marginRight } = this.window.getComputedStyle(this.nativeElement);
92
- return [marginLeft, marginRight].reduce((acc, item) => acc + (parseFloat(item) || 0), this.nativeElement.getBoundingClientRect().width);
114
+ return this.isBrowser ? getOuterWidth(this.nativeElement, this.window) : 0;
93
115
  }
94
- ngAfterViewInit() {
95
- this.outerElementWidth = this.getOuterElementWidth();
96
- }
97
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqNavbarTitle, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
98
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.30", type: KbqNavbarTitle, isStandalone: true, selector: "kbq-navbar-title, [kbq-navbar-title]", host: { listeners: { "mouseenter": "hovered.next(true)", "mouseleave": "hovered.next(false)" }, classAttribute: "kbq-navbar-title" }, ngImport: i0 }); }
116
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqNavbarTitle, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
117
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.25", type: KbqNavbarTitle, isStandalone: true, selector: "kbq-navbar-title, [kbq-navbar-title]", host: { classAttribute: "kbq-navbar-title" }, ngImport: i0 }); }
99
118
  }
100
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqNavbarTitle, decorators: [{
119
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqNavbarTitle, decorators: [{
101
120
  type: Directive,
102
121
  args: [{
103
122
  selector: 'kbq-navbar-title, [kbq-navbar-title]',
104
123
  host: {
105
- class: 'kbq-navbar-title',
106
- '(mouseenter)': 'hovered.next(true)',
107
- '(mouseleave)': 'hovered.next(false)'
124
+ class: 'kbq-navbar-title'
108
125
  }
109
126
  }]
110
127
  }] });
111
128
  class KbqNavbarDivider {
112
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqNavbarDivider, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
113
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.30", type: KbqNavbarDivider, isStandalone: true, selector: "kbq-navbar-divider", host: { classAttribute: "kbq-navbar-divider" }, ngImport: i0 }); }
129
+ constructor() {
130
+ // Optional: the divider only picks up a rectangle element when both directives are imported, which is
131
+ // what `KbqNavbarModule` does but a hand-rolled standalone import need not.
132
+ this.rectangleElement = inject(KbqNavbarRectangleElement, { optional: true });
133
+ }
134
+ /**
135
+ * The separator runs across the navbar, so it is oriented the other way round: a horizontal navbar gets a
136
+ * vertical rule and vice versa.
137
+ */
138
+ get ariaOrientation() {
139
+ return this.rectangleElement?.isHorizontal() ? 'vertical' : 'horizontal';
140
+ }
141
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqNavbarDivider, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
142
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.25", type: KbqNavbarDivider, isStandalone: true, selector: "kbq-navbar-divider", host: { attributes: { "role": "separator" }, properties: { "attr.aria-orientation": "ariaOrientation" }, classAttribute: "kbq-navbar-divider" }, ngImport: i0 }); }
114
143
  }
115
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqNavbarDivider, decorators: [{
144
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqNavbarDivider, decorators: [{
116
145
  type: Directive,
117
146
  args: [{
118
147
  selector: 'kbq-navbar-divider',
119
148
  host: {
120
- class: 'kbq-navbar-divider'
149
+ class: 'kbq-navbar-divider',
150
+ role: 'separator',
151
+ '[attr.aria-orientation]': 'ariaOrientation'
121
152
  }
122
153
  }]
123
154
  }] });
124
155
  class KbqNavbarFocusableItem {
125
- constructor() {
126
- this.elementRef = inject(ElementRef);
127
- this.changeDetector = inject(ChangeDetectorRef);
128
- this.focusMonitor = inject(FocusMonitor);
129
- this.ngZone = inject(NgZone);
130
- this.title = contentChild(KbqNavbarTitle, ...(ngDevMode ? [{ debugName: "title" }] : []));
131
- this.button = contentChild(KbqButton, ...(ngDevMode ? [{ debugName: "button" }] : []));
132
- this.formField = contentChild(KbqFormField, ...(ngDevMode ? [{ debugName: "formField" }] : []));
133
- this.onFocus = new Subject();
134
- this.onBlur = new Subject();
135
- this._hasFocus = false;
136
- this._disabled = false;
137
- /**
138
- * Keeps an element with nothing to interact with out of the roving focus order, without announcing or
139
- * styling it as disabled.
140
- *
141
- * @internal
142
- */
143
- this.decorative = false;
144
- }
156
+ /** Interactive element projected into the item, if any. */
145
157
  get nestedElement() {
146
158
  return this.button() || this.formField();
147
159
  }
160
+ /** @docs-private */
148
161
  get tooltip() {
149
162
  return this._tooltip;
150
163
  }
164
+ /** @docs-private */
151
165
  get hasFocus() {
152
- return !!this.nestedElement?.hasFocus || this._hasFocus;
166
+ return !!this.nestedElement?.hasFocus || this.hasFocusState();
153
167
  }
154
168
  set hasFocus(value) {
155
- this._hasFocus = value;
169
+ this.hasFocusState.set(value);
156
170
  }
157
- /**
158
- * Whether the item is disabled.
159
- *
160
- * Also reads `true` for a decorative element, which the key manager has to skip just the same.
161
- */
162
- // TODO: Skipped for migration because:
163
- // Accessor inputs cannot be migrated as they are too complex.
171
+ /** Whether the item is disabled. Also `true` for a decorative element, which the key manager skips as well. */
172
+ // An accessor, not a signal: `FocusKeyManager` reads it as a boolean through its default skip predicate, where a
173
+ // signal would always read truthy — the manager would skip every item and arrow navigation would stop working.
164
174
  get disabled() {
165
- return this._disabled || this.decorative;
175
+ return this.disabledState() || this.decorative();
166
176
  }
167
177
  set disabled(value) {
168
- if (value !== this._disabled) {
169
- this._disabled = value;
170
- this.changeDetector.markForCheck();
171
- }
178
+ this.disabledState.set(value);
172
179
  }
173
180
  /**
174
181
  * Whether the item was disabled through `disabled`, as opposed to being decorative.
@@ -176,92 +183,148 @@ class KbqNavbarFocusableItem {
176
183
  * @internal
177
184
  */
178
185
  get explicitlyDisabled() {
179
- return this._disabled;
186
+ return this.disabledState();
180
187
  }
188
+ /**
189
+ * Items are never in the tab order themselves: the navbar host owns the single tab stop and moves focus
190
+ * between items with the arrow keys (roving tabindex).
191
+ */
181
192
  get tabIndex() {
182
193
  return -1;
183
194
  }
195
+ ngOnChanges(changes) {
196
+ // A bound input is handed to its member; unbound, it leaves what code wrote.
197
+ if (changes['disabledInput']) {
198
+ const disabled = this.disabledInput();
199
+ if (disabled !== undefined)
200
+ this.disabled = disabled;
201
+ }
202
+ }
203
+ constructor() {
204
+ this.elementRef = inject(ElementRef);
205
+ this.changeDetector = inject(ChangeDetectorRef);
206
+ this.focusMonitor = inject(FocusMonitor);
207
+ this.injector = inject(Injector);
208
+ this.destroyRef = inject(DestroyRef);
209
+ /** @docs-private */
210
+ this.title = contentChild(KbqNavbarTitle, ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
211
+ /** @docs-private */
212
+ this.button = contentChild(KbqButton, ...(ngDevMode ? [{ debugName: "button" }] : /* istanbul ignore next */ []));
213
+ /** @docs-private */
214
+ this.formField = contentChild(KbqFormField, ...(ngDevMode ? [{ debugName: "formField" }] : /* istanbul ignore next */ []));
215
+ /** @docs-private */
216
+ this.onFocus = new Subject();
217
+ /** @docs-private */
218
+ this.onBlur = new Subject();
219
+ this.hasFocusState = signal(false, ...(ngDevMode ? [{ debugName: "hasFocusState" }] : /* istanbul ignore next */ []));
220
+ this.disabledState = signal(false, ...(ngDevMode ? [{ debugName: "disabledState" }] : /* istanbul ignore next */ []));
221
+ /**
222
+ * Keeps an element with nothing to interact with out of the roving focus order, without announcing or
223
+ * styling it as disabled.
224
+ *
225
+ * @internal
226
+ */
227
+ this.decorative = signal(false, ...(ngDevMode ? [{ debugName: "decorative" }] : /* istanbul ignore next */ []));
228
+ /** @docs-private */
229
+ this.disabledInput = input(undefined, { ...(ngDevMode ? { debugName: "disabledInput" } : /* istanbul ignore next */ {}), alias: 'disabled',
230
+ transform: booleanAttribute });
231
+ this.destroyRef.onDestroy(() => {
232
+ this.onFocus.complete();
233
+ this.onBlur.complete();
234
+ });
235
+ }
236
+ /** @docs-private */
184
237
  ngAfterViewInit() {
185
238
  this.focusMonitor.monitor(this.elementRef);
186
239
  }
240
+ /** @docs-private */
187
241
  ngAfterContentInit() {
188
242
  const button = this.button();
189
243
  if (button) {
190
244
  button.tabIndex = -1;
191
245
  }
192
246
  }
247
+ /** @docs-private */
193
248
  ngOnDestroy() {
194
249
  this.focusMonitor.stopMonitoring(this.elementRef);
195
250
  }
251
+ /** @docs-private */
196
252
  setTooltip(value) {
197
253
  this._tooltip = value;
198
254
  }
255
+ /** @docs-private */
199
256
  onFocusHandler() {
200
257
  if (this.disabled || this.hasFocus) {
201
258
  return;
202
259
  }
203
260
  this.onFocus.next({ item: this });
204
261
  this.hasFocus = true;
205
- this.changeDetector.markForCheck();
206
262
  this.elementRef.nativeElement.focus();
207
263
  }
264
+ /** @docs-private */
208
265
  focus(origin) {
209
266
  if (this.disabled || this.hasFocus) {
210
267
  return;
211
268
  }
212
- if (origin === 'keyboard') {
213
- this.focusMonitor.focusVia(this.elementRef, origin);
269
+ // A pointer focuses what it lands on by itself; moving the focus for it would surface a focus ring and a
270
+ // tooltip. Focus set by code still has to reach the item, or the host keeps it while this item is active.
271
+ const movesFocus = origin !== 'mouse' && origin !== 'touch';
272
+ if (movesFocus) {
273
+ this.focusMonitor.focusVia(this.elementRef, origin ?? 'program');
214
274
  }
215
275
  if (this.nestedElement) {
216
- if (origin === 'keyboard') {
217
- // KbqButton tracks focus via FocusMonitor; KbqFormField just delegates to control.focus.
218
- if ('focusViaKeyboard' in this.nestedElement) {
219
- this.nestedElement.focusViaKeyboard();
220
- }
221
- else {
222
- this.nestedElement.focus();
223
- }
276
+ // KbqButton tracks focus via FocusMonitor; KbqFormField just delegates to control.focus.
277
+ if (origin === 'keyboard' && 'focusViaKeyboard' in this.nestedElement) {
278
+ this.nestedElement.focusViaKeyboard();
279
+ }
280
+ else if (movesFocus) {
281
+ this.nestedElement.focus();
224
282
  }
225
283
  this.changeDetector.markForCheck();
226
284
  return;
227
285
  }
228
- if (origin === 'keyboard') {
229
- this.tooltip?.show();
286
+ if (movesFocus) {
287
+ if (origin === 'keyboard')
288
+ this.tooltip?.show();
230
289
  this.onFocusHandler();
231
290
  }
232
291
  }
292
+ /** @docs-private */
233
293
  blur() {
234
- // When animations are enabled, Angular may end up removing the option from the DOM a little
235
- // earlier than usual, causing it to be blurred and throwing off the logic in the list
236
- // that moves focus not the next item. To work around the issue, we defer marking the option
237
- // as not focused until the next time the zone stabilizes.
238
- this.ngZone.onStable
239
- .asObservable()
240
- .pipe(take(1))
241
- .subscribe(() => {
242
- this.ngZone.run(() => {
243
- this._hasFocus = false;
244
- this.tooltip?.hide();
245
- if (this.button()?.hasFocus) {
246
- return;
247
- }
248
- this.onBlur.next({ item: this });
249
- });
250
- });
294
+ // Deferred until the focus has settled: an item hands its focus to its nested button or form field, which
295
+ // registers its focus only after this blur, and the item gets no focus event of its own afterwards. A blur
296
+ // reported before that would read as no item being focused and clear the navbar's active item. An item
297
+ // blurred by its own destruction has nothing to update.
298
+ if (this.destroyRef.destroyed)
299
+ return;
300
+ afterNextRender(() => {
301
+ // Focus can be back by the time this runs (a blur and a focus in the same task): then nothing was lost.
302
+ if (_getFocusedElementPierceShadowDom() === this.elementRef.nativeElement)
303
+ return;
304
+ this.hasFocusState.set(false);
305
+ this.tooltip?.hide();
306
+ if (this.button()?.hasFocus) {
307
+ return;
308
+ }
309
+ this.onBlur.next({ item: this });
310
+ }, { injector: this.injector });
251
311
  }
312
+ /** @docs-private */
252
313
  getLabel() {
253
314
  return this.title()?.text || '';
254
315
  }
255
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqNavbarFocusableItem, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
256
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "20.3.30", type: KbqNavbarFocusableItem, isStandalone: true, selector: "kbq-navbar-item, [kbq-navbar-item], kbq-navbar-brand, [kbq-navbar-brand], kbq-navbar-toggle", inputs: { disabled: ["disabled", "disabled", booleanAttribute] }, host: { listeners: { "focus": "onFocusHandler()", "blur": "blur()" }, properties: { "attr.tabindex": "tabIndex", "attr.disabled": "explicitlyDisabled || null", "class.kbq-navbar-item_has-nested": "!!nestedElement", "class.kbq-disabled": "explicitlyDisabled" }, classAttribute: "kbq-navbar-focusable-item" }, queries: [{ propertyName: "title", first: true, predicate: KbqNavbarTitle, descendants: true, isSignal: true }, { propertyName: "button", first: true, predicate: KbqButton, descendants: true, isSignal: true }, { propertyName: "formField", first: true, predicate: KbqFormField, descendants: true, isSignal: true }], ngImport: i0 }); }
316
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqNavbarFocusableItem, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
317
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.25", type: KbqNavbarFocusableItem, isStandalone: true, selector: "kbq-navbar-item, [kbq-navbar-item], kbq-navbar-brand, [kbq-navbar-brand], kbq-navbar-toggle", inputs: { disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "focus": "onFocusHandler()", "blur": "blur()" }, properties: { "attr.tabindex": "tabIndex", "attr.aria-disabled": "explicitlyDisabled || null", "class.kbq-navbar-item_has-nested": "!!nestedElement", "class.kbq-disabled": "explicitlyDisabled" }, classAttribute: "kbq-navbar-focusable-item" }, queries: [{ propertyName: "title", first: true, predicate: KbqNavbarTitle, descendants: true, isSignal: true }, { propertyName: "button", first: true, predicate: KbqButton, descendants: true, isSignal: true }, { propertyName: "formField", first: true, predicate: KbqFormField, descendants: true, isSignal: true }], usesOnChanges: true, ngImport: i0 }); }
257
318
  }
258
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqNavbarFocusableItem, decorators: [{
319
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqNavbarFocusableItem, decorators: [{
259
320
  type: Directive,
260
321
  args: [{
261
322
  selector: 'kbq-navbar-item, [kbq-navbar-item], kbq-navbar-brand, [kbq-navbar-brand], kbq-navbar-toggle',
262
323
  host: {
263
324
  '[attr.tabindex]': 'tabIndex',
264
- '[attr.disabled]': 'explicitlyDisabled || null',
325
+ // `aria-disabled` and not the `disabled` content attribute: these are custom elements, not form
326
+ // controls, so the browser and assistive technology both ignore `disabled` on them.
327
+ '[attr.aria-disabled]': 'explicitlyDisabled || null',
265
328
  class: 'kbq-navbar-focusable-item',
266
329
  '[class.kbq-navbar-item_has-nested]': '!!nestedElement',
267
330
  '[class.kbq-disabled]': 'explicitlyDisabled',
@@ -269,250 +332,342 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImpo
269
332
  '(blur)': 'blur()'
270
333
  }
271
334
  }]
272
- }], propDecorators: { title: [{ type: i0.ContentChild, args: [i0.forwardRef(() => KbqNavbarTitle), { isSignal: true }] }], button: [{ type: i0.ContentChild, args: [i0.forwardRef(() => KbqButton), { isSignal: true }] }], formField: [{ type: i0.ContentChild, args: [i0.forwardRef(() => KbqFormField), { isSignal: true }] }], disabled: [{
273
- type: Input,
274
- args: [{ transform: booleanAttribute }]
275
- }] } });
335
+ }], ctorParameters: () => [], propDecorators: { title: [{ type: i0.ContentChild, args: [i0.forwardRef(() => KbqNavbarTitle), { isSignal: true }] }], button: [{ type: i0.ContentChild, args: [i0.forwardRef(() => KbqButton), { isSignal: true }] }], formField: [{ type: i0.ContentChild, args: [i0.forwardRef(() => KbqFormField), { isSignal: true }] }], disabledInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
276
336
  class KbqNavbarRectangleElement {
277
- constructor() {
278
- this.isBrowser = inject(Platform).isBrowser;
279
- this.nativeElement = kbqInjectNativeElement();
280
- this.window = inject(KBQ_WINDOW);
281
- this.changeDetectorRef = inject(ChangeDetectorRef);
282
- this.state = new Subject();
283
- this._horizontal = false;
284
- this._vertical = true;
285
- this.button = contentChild(KbqButtonCssStyler, ...(ngDevMode ? [{ debugName: "button" }] : []));
286
- }
287
- get horizontal() {
288
- return this._horizontal;
337
+ /**
338
+ * Orientation of the navbar this element belongs to. Written by the ambient `KbqNavbar` /
339
+ * `KbqVerticalNavbar`; the element itself only reads it.
340
+ */
341
+ get orientation() {
342
+ return this._orientation();
289
343
  }
290
- set horizontal(value) {
291
- if (this._horizontal === value)
344
+ set orientation(value) {
345
+ if (this._orientation() === value)
292
346
  return;
293
- this._horizontal = value;
294
- this._vertical = !value;
347
+ this._orientation.set(value);
295
348
  this.state.next();
296
- this.changeDetectorRef.markForCheck();
297
- }
298
- get vertical() {
299
- return this._vertical;
300
- }
301
- set vertical(value) {
302
- if (this._vertical === value)
303
- return;
304
- this._vertical = value;
305
- this._horizontal = !value;
306
- this.state.next();
307
- this.changeDetectorRef.markForCheck();
308
349
  }
350
+ /** Whether the element is rendered in its collapsed (icon-only) form. @docs-private */
309
351
  get collapsed() {
310
- return this._collapsed;
352
+ return !!this._collapsed();
311
353
  }
312
354
  set collapsed(value) {
313
- if (this._collapsed === value)
355
+ if (this._collapsed() === value)
314
356
  return;
315
- this._collapsed = value;
357
+ this._collapsed.set(value);
316
358
  this.state.next();
317
359
  }
318
- /**
319
- * Outer width of the item: its border box plus horizontal margins.
320
- *
321
- * Measured with `getBoundingClientRect()` rather than `getComputedStyle().width`, which resolves
322
- * to the used content-box width whatever `box-sizing` says. `.kbq-navbar-item` is `border-box`
323
- * with horizontal padding, so the computed value dropped that padding from every item, while
324
- * `KbqNavbar.width` — the figure this sum is compared against — has always been a border box.
325
- * The navbar therefore under-counted its own content and collapsed later than it should.
326
- */
360
+ constructor() {
361
+ /** @docs-private */
362
+ this.isBrowser = inject(Platform).isBrowser;
363
+ /** @docs-private */
364
+ this.nativeElement = kbqInjectNativeElement();
365
+ this.window = inject(KBQ_WINDOW);
366
+ this.destroyRef = inject(DestroyRef);
367
+ /** Emits whenever the orientation or the collapsed state of the element changes. @docs-private */
368
+ this.state = new Subject();
369
+ this._orientation = signal('vertical', ...(ngDevMode ? [{ debugName: "_orientation" }] : /* istanbul ignore next */ []));
370
+ /** Whether the ambient navbar is horizontal. @docs-private */
371
+ this.isHorizontal = computed(() => this._orientation() === 'horizontal', ...(ngDevMode ? [{ debugName: "isHorizontal" }] : /* istanbul ignore next */ []));
372
+ /** Whether the ambient navbar is vertical. @docs-private */
373
+ this.isVertical = computed(() => this._orientation() === 'vertical', ...(ngDevMode ? [{ debugName: "isVertical" }] : /* istanbul ignore next */ []));
374
+ // Deliberately left `undefined`: it is not equal to either boolean, so the guard below always lets the
375
+ // first assignment through. Initializing it to `false` would swallow the initial `collapsed = false` of a
376
+ // navbar that starts expanded, and with it the `updateDropdown()` that rides on that emission.
377
+ this._collapsed = signal(undefined, ...(ngDevMode ? [{ debugName: "_collapsed" }] : /* istanbul ignore next */ []));
378
+ /** Signal mirror of `collapsed`, for `computed()` consumers. @docs-private */
379
+ this.collapsedState = computed(() => !!this._collapsed(), ...(ngDevMode ? [{ debugName: "collapsedState" }] : /* istanbul ignore next */ []));
380
+ /** @docs-private */
381
+ this.button = contentChild(KbqButtonCssStyler, ...(ngDevMode ? [{ debugName: "button" }] : /* istanbul ignore next */ []));
382
+ this.destroyRef.onDestroy(() => this.state.complete());
383
+ }
384
+ /** Outer width of the element: its border box plus horizontal margins. */
327
385
  getOuterElementWidth() {
328
- if (!this.isBrowser)
329
- return 0;
330
- const { marginLeft, marginRight } = this.window.getComputedStyle(this.nativeElement);
331
- return [marginLeft, marginRight].reduce((acc, item) => acc + (parseFloat(item) || 0), this.nativeElement.getBoundingClientRect().width);
386
+ return this.isBrowser ? getOuterWidth(this.nativeElement, this.window) : 0;
332
387
  }
333
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqNavbarRectangleElement, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
334
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "20.3.30", type: KbqNavbarRectangleElement, isStandalone: true, selector: "kbq-navbar-item, [kbq-navbar-item], kbq-navbar-divider, kbq-navbar-brand, [kbq-navbar-brand]", host: { properties: { "class.kbq-vertical": "vertical", "class.kbq-horizontal": "horizontal", "class.kbq-expanded": "vertical && !collapsed", "class.kbq-collapsed": "vertical && collapsed" } }, queries: [{ propertyName: "button", first: true, predicate: KbqButtonCssStyler, descendants: true, isSignal: true }], ngImport: i0 }); }
388
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqNavbarRectangleElement, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
389
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.25", type: KbqNavbarRectangleElement, isStandalone: true, selector: "kbq-navbar-item, [kbq-navbar-item], kbq-navbar-divider, kbq-navbar-brand, [kbq-navbar-brand]", host: { properties: { "class.kbq-vertical": "isVertical()", "class.kbq-horizontal": "isHorizontal()", "class.kbq-expanded": "isVertical() && !collapsed", "class.kbq-collapsed": "isVertical() && collapsed" } }, queries: [{ propertyName: "button", first: true, predicate: KbqButtonCssStyler, descendants: true, isSignal: true }], ngImport: i0 }); }
335
390
  }
336
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqNavbarRectangleElement, decorators: [{
391
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqNavbarRectangleElement, decorators: [{
337
392
  type: Directive,
338
393
  args: [{
339
394
  selector: 'kbq-navbar-item, [kbq-navbar-item], kbq-navbar-divider, kbq-navbar-brand, [kbq-navbar-brand]',
340
395
  host: {
341
- '[class.kbq-vertical]': 'vertical',
342
- '[class.kbq-horizontal]': 'horizontal',
343
- '[class.kbq-expanded]': 'vertical && !collapsed',
344
- '[class.kbq-collapsed]': 'vertical && collapsed'
396
+ '[class.kbq-vertical]': 'isVertical()',
397
+ '[class.kbq-horizontal]': 'isHorizontal()',
398
+ '[class.kbq-expanded]': 'isVertical() && !collapsed',
399
+ '[class.kbq-collapsed]': 'isVertical() && collapsed'
345
400
  }
346
401
  }]
347
- }], propDecorators: { button: [{ type: i0.ContentChild, args: [i0.forwardRef(() => KbqButtonCssStyler), { isSignal: true }] }] } });
348
- class KbqNavbarItem extends KbqTooltipTrigger {
349
- // TODO: Skipped for migration because:
350
- // Accessor inputs cannot be migrated as they are too complex.
351
- get collapsedText() {
352
- return this._collapsedText;
353
- }
354
- set collapsedText(value) {
355
- this._collapsedText = value;
356
- this.updateTooltip();
357
- }
358
- // TODO: Skipped for migration because:
359
- // Accessor inputs cannot be migrated as they are too complex.
360
- get trigger() {
361
- return this._trigger;
362
- }
363
- set trigger(value) {
364
- if (value) {
365
- this._trigger = value;
366
- this.initListeners();
367
- }
368
- }
402
+ }], ctorParameters: () => [], propDecorators: { button: [{ type: i0.ContentChild, args: [i0.forwardRef(() => KbqButtonCssStyler), { isSignal: true }] }] } });
403
+ class KbqNavbarItem {
404
+ /** Collapses the item regardless of what the ambient navbar decided. */
369
405
  set collapsed(value) {
370
- if (this._collapsed !== value) {
371
- this._collapsed = value;
372
- this.updateTooltip();
373
- }
374
- }
375
- // todo in future need rename to 'collapsed'
376
- get isCollapsed() {
377
- return this._collapsed ?? this.rectangleElement.collapsed;
406
+ this.ownCollapsed.set(value);
378
407
  }
408
+ /** @docs-private */
379
409
  get croppedText() {
380
410
  const croppedTitleText = this.title()?.isOverflown ? this.titleText : '';
381
411
  return `${croppedTitleText}`;
382
412
  }
383
- // TODO: Skipped for migration because:
384
- // Accessor inputs cannot be migrated as they are too complex.
385
- get collapsable() {
386
- return this._collapsable;
387
- }
388
- set collapsable(value) {
389
- this._collapsable = coerceBooleanProperty(value);
390
- }
413
+ /** Text used for the tooltip and for the accessible name of a collapsed item. */
391
414
  get titleText() {
392
- return this._collapsedText || this.title()?.text || null;
393
- }
394
- get disabled() {
395
- if (this._disabled !== undefined) {
396
- return this._disabled;
397
- }
398
- return !this.isCollapsed && !this.hasCroppedText;
399
- }
400
- set disabled(value) {
401
- this._disabled = coerceBooleanProperty(value);
415
+ return this.collapsedText() || this.title()?.text || null;
402
416
  }
417
+ /** @docs-private */
403
418
  get hasDropDownTrigger() {
404
419
  return !!this.dropdownTrigger;
405
420
  }
406
- get showVerticalDropDownAngle() {
407
- return !this.bento && this.hasDropDownTrigger && this.rectangleElement.vertical && !this.isCollapsed;
408
- }
409
- get showHorizontalDropDownAngle() {
410
- return this.hasDropDownTrigger && this.rectangleElement.horizontal && !this.isCollapsed;
411
- }
421
+ /** @docs-private */
412
422
  get hasCroppedText() {
413
423
  return !!this.title()?.isOverflown;
414
424
  }
425
+ /**
426
+ * A collapsed item shows nothing but its icon, and a tooltip is a transient overlay — never an accessible
427
+ * name. The name is therefore published on the element itself, unless the consumer named it already.
428
+ */
429
+ get resolvedAriaLabel() {
430
+ return this.ariaLabel() ?? (this.isCollapsed() ? this.titleText : null);
431
+ }
432
+ /**
433
+ * Items authored as `<kbq-navbar-item>` are custom elements with no implicit role, so they are announced as
434
+ * plain content. Anything already actionable — a native element, or a projected button/form field that owns
435
+ * the interaction — keeps its own semantics.
436
+ *
437
+ * No `aria-haspopup` for dropdown-trigger items on purpose: `KbqDropdownTrigger` deliberately omits it
438
+ * because the panel carries no menu semantics; it does publish `aria-expanded` itself.
439
+ */
440
+ get role() {
441
+ if (NATIVELY_ACTIONABLE_TAGS.has(this.nativeElement.tagName) || this.navbarFocusableItem.nestedElement) {
442
+ return null;
443
+ }
444
+ return 'button';
445
+ }
446
+ /** Whether Enter/Space has to be turned into a click by hand. */
447
+ get needsSyntheticActivation() {
448
+ return this.role === 'button' && !this.hasDropDownTrigger;
449
+ }
415
450
  constructor() {
416
- super();
451
+ /** @docs-private */
417
452
  this.rectangleElement = inject(KbqNavbarRectangleElement);
453
+ /** @docs-private */
418
454
  this.navbarFocusableItem = inject(KbqNavbarFocusableItem);
455
+ /** @docs-private */
456
+ this.tooltip = inject(KbqTooltipTrigger, { self: true });
457
+ this.nativeElement = kbqInjectNativeElement();
419
458
  this.changeDetectorRef = inject(ChangeDetectorRef);
420
459
  this.dropdownTrigger = inject(KbqDropdownTrigger, { optional: true });
421
460
  this.bento = inject(KbqNavbarBento, { optional: true });
422
- this.title = contentChild(KbqNavbarTitle, ...(ngDevMode ? [{ debugName: "title" }] : []));
423
- this.icon = contentChild(KbqIcon, ...(ngDevMode ? [{ debugName: "icon" }] : []));
424
- this._collapsed = false;
425
- this._collapsable = true;
461
+ this.contentObserver = inject(ContentObserver);
462
+ this.injector = inject(Injector);
463
+ this.destroyRef = inject(DestroyRef);
464
+ // Outer widths recorded by `measureWidths()`, 0 while unknown.
465
+ this.expandedWidth = 0;
466
+ this.collapsedWidth = 0;
467
+ /** @docs-private */
468
+ this.title = contentChild(KbqNavbarTitle, ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
469
+ this.icons = contentChildren(KbqIcon, { ...(ngDevMode ? { debugName: "icons" } : /* istanbul ignore next */ {}), descendants: true });
470
+ /** Icon shown before the title; it stays visible when the item collapses. @docs-private */
471
+ this.icon = computed(() => this.icons().find((icon) => !icon.getHostElement().closest('[kbqNavbarItemSuffix]')), ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
472
+ /** Text shown in the tooltip of a collapsed item. Defaults to the text of the projected `kbq-navbar-title`. */
473
+ this.collapsedText = input('', ...(ngDevMode ? [{ debugName: "collapsedText" }] : /* istanbul ignore next */ []));
474
+ /** Whether the item may be collapsed when the horizontal navbar runs out of room. */
475
+ this.collapsable = input(true, { ...(ngDevMode ? { debugName: "collapsable" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
476
+ /**
477
+ * Explicitly enables or disables the item's tooltip.
478
+ *
479
+ * Left unset, the tooltip is enabled exactly when the title cannot be read from the item itself — the item
480
+ * is collapsed, its title is clipped, or it has no title at all.
481
+ */
482
+ this.tooltipDisabled = input(undefined, { ...(ngDevMode ? { debugName: "tooltipDisabled" } : /* istanbul ignore next */ {}), alias: 'kbqTooltipDisabled',
483
+ transform: (value) => (value === undefined ? undefined : booleanAttribute(value)) });
484
+ this.ownCollapsed = signal(undefined, ...(ngDevMode ? [{ debugName: "ownCollapsed" }] : /* istanbul ignore next */ []));
485
+ /** Whether the item is rendered in its collapsed (icon-only) form. */
486
+ // todo in future need rename to 'collapsed'
487
+ this.isCollapsed = computed(() => this.ownCollapsed() ?? this.rectangleElement.collapsedState(), ...(ngDevMode ? [{ debugName: "isCollapsed" }] : /* istanbul ignore next */ []));
488
+ /** @docs-private */
489
+ this.showVerticalDropDownAngle = computed(() => !this.bento && this.hasDropDownTrigger && this.rectangleElement.isVertical() && !this.isCollapsed(), ...(ngDevMode ? [{ debugName: "showVerticalDropDownAngle" }] : /* istanbul ignore next */ []));
490
+ /** @docs-private */
491
+ this.showHorizontalDropDownAngle = computed(() => this.hasDropDownTrigger && this.rectangleElement.isHorizontal() && !this.isCollapsed(), ...(ngDevMode ? [{ debugName: "showHorizontalDropDownAngle" }] : /* istanbul ignore next */ []));
492
+ /**
493
+ * Whether the title of a vertical bento item slides in without motion.
494
+ *
495
+ * @docs-private
496
+ */
497
+ this.animationsDisabled = kbqAnimationsDisabled();
498
+ /**
499
+ * Accessible name of the item. Needed for an icon-only item, which has no visible label of its own; an
500
+ * item that renders a title is named by it.
501
+ */
502
+ this.ariaLabel = input(null, { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
426
503
  if (this.hasDropDownTrigger) {
427
- this.dropdownTrigger.openByArrowDown = false;
504
+ this.dropdownTrigger.openByArrowDown.set(false);
428
505
  }
429
506
  this.rectangleElement.state.pipe(takeUntilDestroyed()).subscribe(() => {
430
- this.collapsed = this.rectangleElement.collapsed;
431
507
  this.updateDropdown();
432
- this.changeDetectorRef.detectChanges();
508
+ this.updateTooltip();
509
+ });
510
+ this.navbarFocusableItem.setTooltip(this.tooltip);
511
+ this.tooltip.arrow = false;
512
+ this.tooltip.offset = 0;
513
+ this.tooltip.setOverlayPanelClass('kbq-tooltip-panel_horizontal-navbar');
514
+ // The tooltip of a collapsed item stands in for its missing title, so it must not also open on focus:
515
+ // `KbqNavbarFocusableItem.focus()` shows it explicitly, and only for keyboard focus.
516
+ this.tooltip.trigger = `${PopUpTriggers.Hover}`;
517
+ effect(() => {
518
+ // Re-read the reactive inputs the tooltip content depends on.
519
+ this.collapsedText();
520
+ this.tooltipDisabled();
521
+ this.isCollapsed();
522
+ this.updateTooltip();
523
+ // Whether the title is clipped can only be measured once this change is rendered.
524
+ afterNextRender(() => this.updateTooltip(), { injector: this.injector });
433
525
  });
434
- this._trigger = `${PopUpTriggers.Hover}`;
435
- this.navbarFocusableItem.setTooltip(this);
436
- this.arrow = false;
437
- this.offset = 0;
438
- this.overlayConfig.panelClass = 'kbq-tooltip-panel_horizontal-navbar';
526
+ // Content changes, such as a new title text, can clip the title too.
527
+ afterNextRender(() => this.contentObserver
528
+ .observe(this.nativeElement)
529
+ .pipe(takeUntilDestroyed(this.destroyRef))
530
+ .subscribe(() => this.updateTooltip()));
439
531
  }
532
+ /** @docs-private */
440
533
  ngAfterContentInit() {
441
534
  this.updateTooltip();
442
535
  }
443
- updateDropdown() {
444
- if (!this.dropdownTrigger?.dropdown)
445
- return;
446
- if (this.rectangleElement.vertical) {
447
- this.dropdownTrigger.dropdown.overlapTriggerX = false;
448
- this.dropdownTrigger.dropdown.overlapTriggerY = true;
449
- // needs to shift dropdown to the left by 8 pixels
450
- this.dropdownTrigger.offsetX = -8;
451
- }
452
- }
536
+ /** @docs-private */
453
537
  updateTooltip() {
454
- if (this.isCollapsed) {
455
- this.content = `${this.titleText || ''}`;
538
+ const titleText = this.titleText;
539
+ // With no title or `collapsedText` to stand in, a collapsed item keeps the content bound as `tooltipText`.
540
+ if (this.isCollapsed() && titleText) {
541
+ this.tooltip.content = titleText;
456
542
  }
457
- else if (!this.isCollapsed && this.hasCroppedText) {
458
- this.content = this.croppedText;
543
+ else if (this.hasCroppedText) {
544
+ this.tooltip.content = this.croppedText;
459
545
  }
460
- if (this.rectangleElement.vertical) {
461
- this.placement = PopUpPlacements.Right;
462
- this.placementPriority = PopUpPlacements.Right;
546
+ // A fully visible title needs no tooltip; for a collapsed, clipped or missing one it is the only label.
547
+ this.tooltip.disabled =
548
+ this.tooltipDisabled() ?? (!!this.title() && !this.isCollapsed() && !this.hasCroppedText);
549
+ if (this.rectangleElement.isVertical()) {
550
+ this.tooltip.tooltipPlacement = PopUpPlacements.Right;
551
+ this.tooltip.tooltipPlacementPriority = PopUpPlacements.Right;
463
552
  }
464
553
  this.changeDetectorRef.markForCheck();
465
554
  }
466
- getTitleWidth() {
467
- return this.title()?.outerElementWidth ?? 0;
555
+ /**
556
+ * Records the outer width of the item in the presentation it is shown in, and measures the other one only while
557
+ * it is still unknown.
558
+ *
559
+ * The other presentation is read by toggling the collapse class around the measurement. Restoring it within
560
+ * the same task is safe: the browser does not paint mid-task, and the host binding only writes to the DOM when
561
+ * its value changes. Both rely on the item having no CSS transition. A width seen in the real presentation is
562
+ * preferred because a collapsed item does not render its dropdown chevron, so toggling it back undercounts.
563
+ *
564
+ * @docs-private
565
+ */
566
+ measureWidths() {
567
+ // A hidden item has no box, and its margins alone would be recorded as a width.
568
+ if (!this.nativeElement.getClientRects().length)
569
+ return;
570
+ const classList = this.nativeElement.classList;
571
+ const collapsed = classList.contains(COLLAPSED_ITEM_CLASS);
572
+ if (collapsed) {
573
+ this.collapsedWidth = this.rectangleElement.getOuterElementWidth();
574
+ }
575
+ else {
576
+ this.expandedWidth = this.rectangleElement.getOuterElementWidth();
577
+ }
578
+ if (collapsed ? this.expandedWidth : this.collapsedWidth)
579
+ return;
580
+ classList.toggle(COLLAPSED_ITEM_CLASS);
581
+ const otherWidth = this.rectangleElement.getOuterElementWidth();
582
+ classList.toggle(COLLAPSED_ITEM_CLASS);
583
+ if (collapsed) {
584
+ this.expandedWidth = otherWidth;
585
+ }
586
+ else {
587
+ this.collapsedWidth = otherWidth;
588
+ }
589
+ }
590
+ /**
591
+ * Width the item gives back by collapsing: its expanded outer width less its collapsed one, as last recorded by
592
+ * `measureWidths()`. It covers everything the collapse removes or changes — the title, a suffix, the dropdown
593
+ * chevron and the padding and margins that differ between the two presentations.
594
+ *
595
+ * @docs-private
596
+ */
597
+ getCollapsibleWidth() {
598
+ return Math.max(this.expandedWidth - this.collapsedWidth, 0);
468
599
  }
600
+ /** @docs-private */
469
601
  onKeyDown($event) {
602
+ if (this.needsSyntheticActivation && [ENTER, SPACE].includes($event.keyCode)) {
603
+ this.nativeElement.click();
604
+ $event.preventDefault();
605
+ return;
606
+ }
470
607
  if (!this.hasDropDownTrigger) {
471
608
  return;
472
609
  }
473
- if ((this.rectangleElement.horizontal && $event.keyCode === DOWN_ARROW) ||
474
- (this.rectangleElement.vertical && $event.keyCode === RIGHT_ARROW)) {
610
+ if ((this.rectangleElement.isHorizontal() && $event.keyCode === DOWN_ARROW) ||
611
+ (this.rectangleElement.isVertical() && $event.keyCode === RIGHT_ARROW)) {
475
612
  this.dropdownTrigger.openedBy = 'keyboard';
476
613
  this.dropdownTrigger.open();
477
614
  $event.stopPropagation();
478
615
  $event.preventDefault();
479
616
  }
480
617
  }
481
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqNavbarItem, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
482
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.30", type: KbqNavbarItem, isStandalone: true, selector: "kbq-navbar-item, [kbq-navbar-item]", inputs: { collapsedText: "collapsedText", trigger: ["kbqTrigger", "trigger"], collapsable: "collapsable" }, host: { listeners: { "keydown": "onKeyDown($event)" }, properties: { "class.kbq-navbar-item_collapsed": "isCollapsed", "class.kbq-navbar-item_with-title": "!!title()" }, classAttribute: "kbq-navbar-item" }, queries: [{ propertyName: "title", first: true, predicate: KbqNavbarTitle, descendants: true, isSignal: true }, { propertyName: "icon", first: true, predicate: KbqIcon, descendants: true, isSignal: true }], exportAs: ["kbqNavbarItem"], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"[kbq-icon]\" />\n\n@if (title()) {\n <div class=\"kbq-navbar-item__container\">\n <div class=\"kbq-navbar-item__title\">\n <ng-content select=\"kbq-navbar-title, [kbq-navbar-title]\" />\n </div>\n @if (showVerticalDropDownAngle) {\n <i class=\"kbq-navbar-item__arrow-icon\" kbq-icon=\"kbq-chevron-right_16\" color=\"contrast\"></i>\n }\n @if (showHorizontalDropDownAngle) {\n <i class=\"kbq-navbar-item__arrow-icon\" kbq-icon=\"kbq-chevron-down-s_16\" color=\"contrast\"></i>\n }\n </div>\n}\n\n<ng-content />\n", dependencies: [{ kind: "component", type: KbqIcon, selector: "[kbq-icon]", inputs: ["small", "autoColor", "kbq-icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
618
+ updateDropdown() {
619
+ const dropdown = this.dropdownTrigger?.dropdown();
620
+ if (!dropdown)
621
+ return;
622
+ if (this.rectangleElement.isVertical()) {
623
+ dropdown.overlapTriggerX.set(false);
624
+ dropdown.overlapTriggerY.set(true);
625
+ // needs to shift dropdown to the left by 8 pixels
626
+ this.dropdownTrigger.offsetX.set(-8);
627
+ }
628
+ }
629
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqNavbarItem, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
630
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.25", type: KbqNavbarItem, isStandalone: true, selector: "kbq-navbar-item, [kbq-navbar-item]", inputs: { collapsedText: { classPropertyName: "collapsedText", publicName: "collapsedText", isSignal: true, isRequired: false, transformFunction: null }, collapsable: { classPropertyName: "collapsable", publicName: "collapsable", isSignal: true, isRequired: false, transformFunction: null }, tooltipDisabled: { classPropertyName: "tooltipDisabled", publicName: "kbqTooltipDisabled", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "keydown": "onKeyDown($event)" }, properties: { "class.kbq-navbar-item_collapsed": "isCollapsed()", "class.kbq-navbar-item_with-title": "!!title()", "attr.role": "role", "attr.aria-label": "resolvedAriaLabel" }, classAttribute: "kbq-navbar-item" }, queries: [{ propertyName: "title", first: true, predicate: KbqNavbarTitle, descendants: true, isSignal: true }, { propertyName: "icons", predicate: KbqIcon, descendants: true, isSignal: true }], exportAs: ["kbqNavbarItem"], hostDirectives: [{ directive: i1.KbqTooltipTrigger, inputs: ["kbqTooltip", "tooltipText", "kbqTooltipClass", "kbqTooltipClass", "kbqTooltipColor", "kbqTooltipColor", "kbqTooltipContext", "kbqTooltipContext", "kbqTooltipOffset", "kbqTooltipOffset", "kbqTrigger", "kbqTrigger", "kbqPlacement", "kbqPlacement", "kbqPlacementPriority", "kbqPlacementPriority", "kbqEnterDelay", "kbqEnterDelay", "kbqLeaveDelay", "kbqLeaveDelay", "kbqVisible", "kbqVisible"], outputs: ["kbqVisibleChange", "kbqVisibleChange", "kbqPlacementChange", "kbqPlacementChange"] }], ngImport: i0, template: "<ng-content select=\"[kbq-icon]:not([kbqNavbarItemSuffix])\" />\n\n@if (title()) {\n <div class=\"kbq-navbar-item__container\">\n <div class=\"kbq-navbar-item__title\" [class.kbq-animations-disabled]=\"animationsDisabled\">\n <ng-content select=\"kbq-navbar-title, [kbq-navbar-title]\" />\n </div>\n <ng-content select=\"[kbqNavbarItemSuffix]\" />\n @if (showVerticalDropDownAngle()) {\n <i class=\"kbq-navbar-item__arrow-icon\" kbq-icon=\"kbq-chevron-right_16\" color=\"contrast\"></i>\n }\n @if (showHorizontalDropDownAngle()) {\n <i class=\"kbq-navbar-item__arrow-icon\" kbq-icon=\"kbq-chevron-down-s_16\" color=\"contrast\"></i>\n }\n </div>\n}\n\n<ng-content />\n", dependencies: [{ kind: "component", type: KbqIcon, selector: "[kbq-icon]", inputs: ["aria-hidden", "iconSize", "autoColor", "kbq-icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
483
631
  }
484
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqNavbarItem, decorators: [{
632
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqNavbarItem, decorators: [{
485
633
  type: Component,
486
634
  args: [{ selector: 'kbq-navbar-item, [kbq-navbar-item]', imports: [
487
635
  KbqIcon
488
636
  ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
489
637
  class: 'kbq-navbar-item',
490
- '[class.kbq-navbar-item_collapsed]': 'isCollapsed',
638
+ [`[class.${COLLAPSED_ITEM_CLASS}]`]: 'isCollapsed()',
491
639
  '[class.kbq-navbar-item_with-title]': '!!title()',
640
+ '[attr.role]': 'role',
641
+ '[attr.aria-label]': 'resolvedAriaLabel',
492
642
  '(keydown)': 'onKeyDown($event)'
493
- }, exportAs: 'kbqNavbarItem', template: "<ng-content select=\"[kbq-icon]\" />\n\n@if (title()) {\n <div class=\"kbq-navbar-item__container\">\n <div class=\"kbq-navbar-item__title\">\n <ng-content select=\"kbq-navbar-title, [kbq-navbar-title]\" />\n </div>\n @if (showVerticalDropDownAngle) {\n <i class=\"kbq-navbar-item__arrow-icon\" kbq-icon=\"kbq-chevron-right_16\" color=\"contrast\"></i>\n }\n @if (showHorizontalDropDownAngle) {\n <i class=\"kbq-navbar-item__arrow-icon\" kbq-icon=\"kbq-chevron-down-s_16\" color=\"contrast\"></i>\n }\n </div>\n}\n\n<ng-content />\n" }]
494
- }], ctorParameters: () => [], propDecorators: { title: [{ type: i0.ContentChild, args: [i0.forwardRef(() => KbqNavbarTitle), { isSignal: true }] }], icon: [{ type: i0.ContentChild, args: [i0.forwardRef(() => KbqIcon), { isSignal: true }] }], collapsedText: [{
495
- type: Input
496
- }], trigger: [{
497
- type: Input,
498
- args: ['kbqTrigger']
499
- }], collapsable: [{
500
- type: Input
501
- }] } });
643
+ }, hostDirectives: [
644
+ {
645
+ directive: KbqTooltipTrigger,
646
+ inputs: [
647
+ 'kbqTooltip: tooltipText',
648
+ 'kbqTooltipClass',
649
+ 'kbqTooltipColor',
650
+ 'kbqTooltipContext',
651
+ 'kbqTooltipOffset',
652
+ 'kbqTrigger',
653
+ 'kbqPlacement',
654
+ 'kbqPlacementPriority',
655
+ 'kbqEnterDelay',
656
+ 'kbqLeaveDelay',
657
+ 'kbqVisible'
658
+ ],
659
+ outputs: [
660
+ 'kbqVisibleChange',
661
+ 'kbqPlacementChange'
662
+ ]
663
+ }
664
+ ], exportAs: 'kbqNavbarItem', template: "<ng-content select=\"[kbq-icon]:not([kbqNavbarItemSuffix])\" />\n\n@if (title()) {\n <div class=\"kbq-navbar-item__container\">\n <div class=\"kbq-navbar-item__title\" [class.kbq-animations-disabled]=\"animationsDisabled\">\n <ng-content select=\"kbq-navbar-title, [kbq-navbar-title]\" />\n </div>\n <ng-content select=\"[kbqNavbarItemSuffix]\" />\n @if (showVerticalDropDownAngle()) {\n <i class=\"kbq-navbar-item__arrow-icon\" kbq-icon=\"kbq-chevron-right_16\" color=\"contrast\"></i>\n }\n @if (showHorizontalDropDownAngle()) {\n <i class=\"kbq-navbar-item__arrow-icon\" kbq-icon=\"kbq-chevron-down-s_16\" color=\"contrast\"></i>\n }\n </div>\n}\n\n<ng-content />\n" }]
665
+ }], ctorParameters: () => [], propDecorators: { title: [{ type: i0.ContentChild, args: [i0.forwardRef(() => KbqNavbarTitle), { isSignal: true }] }], icons: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => KbqIcon), { ...{ descendants: true }, isSignal: true }] }], collapsedText: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsedText", required: false }] }], collapsable: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsable", required: false }] }], tooltipDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "kbqTooltipDisabled", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }] } });
502
666
 
503
667
  /** Switches the brand title to the compact two-line presentation. */
504
668
  const LONG_TITLE_CLASS = 'kbq-navbar-brand_long-title';
505
- class KbqNavbarBrand extends KbqTooltipTrigger {
506
- /** text that will be displayed in the tooltip. By default, the text is taken from kbq-navbar-title. */
507
- // TODO: Skipped for migration because:
508
- // Accessor inputs cannot be migrated as they are too complex.
509
- get collapsedText() {
510
- return this._collapsedText;
511
- }
512
- set collapsedText(value) {
513
- this._collapsedText = value;
514
- this.updateTooltip();
515
- }
669
+ class KbqNavbarBrand {
670
+ /** Whether the brand is rendered as a native link. */
516
671
  get isLink() {
517
672
  return this.nativeElement.tagName === 'A';
518
673
  }
@@ -528,30 +683,16 @@ class KbqNavbarBrand extends KbqTooltipTrigger {
528
683
  }
529
684
  /** @docs-private */
530
685
  get titleText() {
531
- return this.collapsedText || this.title()?.text || null;
532
- }
533
- /** @docs-private */
534
- get disabled() {
535
- if (this._disabled !== undefined) {
536
- return this._disabled;
537
- }
538
- return !this.collapsed && !this.hasCroppedText;
539
- }
540
- set disabled(value) {
541
- this._disabled = coerceBooleanProperty(value);
542
- }
543
- /** @docs-private */
544
- get collapsed() {
545
- return this._collapsed ?? this.rectangleElement.collapsed;
686
+ return this.collapsedText() || this.title()?.text || null;
546
687
  }
547
- set collapsed(value) {
548
- if (this._collapsed !== value) {
549
- this._collapsed = value;
550
- this.updateTooltip();
551
- }
688
+ /**
689
+ * A collapsed brand shows nothing but its logo, and a tooltip is a transient overlay — never an accessible
690
+ * name. The name is therefore published on the element itself, unless the consumer named it already.
691
+ */
692
+ get resolvedAriaLabel() {
693
+ return this.ariaLabel() ?? (this.collapsed() ? this.titleText : null);
552
694
  }
553
695
  constructor() {
554
- super();
555
696
  /** @docs-private */
556
697
  this.nativeElement = kbqInjectNativeElement();
557
698
  /** @docs-private */
@@ -560,50 +701,67 @@ class KbqNavbarBrand extends KbqTooltipTrigger {
560
701
  this.rectangleElement = inject(KbqNavbarRectangleElement);
561
702
  /** @docs-private */
562
703
  this.navbarFocusableItem = inject(KbqNavbarFocusableItem);
704
+ /** @docs-private */
705
+ this.tooltip = inject(KbqTooltipTrigger, { self: true });
563
706
  this.isBrowser = inject(Platform).isBrowser;
564
707
  this.resizeObserver = inject(SharedResizeObserver);
565
708
  this.contentObserver = inject(ContentObserver);
566
709
  this.document = inject(DOCUMENT);
567
710
  this.injector = inject(Injector);
711
+ this.destroyRef = inject(DestroyRef);
712
+ this.renderer = inject(Renderer2);
568
713
  this.debounceInterval = 100;
569
714
  /** @docs-private */
570
- this.title = contentChild(KbqNavbarTitle, ...(ngDevMode ? [{ debugName: "title" }] : []));
571
- /** Whether the title has been measured as not fitting into a single line. */
572
- this.autoLongTitle = signal(false, ...(ngDevMode ? [{ debugName: "autoLongTitle" }] : []));
715
+ this.title = contentChild(KbqNavbarTitle, ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
573
716
  /**
574
- * Alternative display of the brand name in two lines.
717
+ * Whether the title has been measured as not fitting into a single line, which switches it to the compact
718
+ * two-line presentation.
575
719
  *
576
- * @deprecated The mode is now detected automatically when the title does not fit into a single line.
577
- * Leave unset for auto-detection; `true` and `false` force the mode on and off respectively.
578
- * Will be removed in the next major release.
720
+ * @docs-private
579
721
  */
580
- this.longTitle = input(...(ngDevMode ? [undefined, { debugName: "longTitle" }] : []));
581
- /** @docs-private */
582
- this.longTitleEnabled = computed(() => this.longTitle() ?? this.autoLongTitle(), ...(ngDevMode ? [{ debugName: "longTitleEnabled" }] : []));
583
- this._collapsed = false;
584
- this.rectangleElement.state.pipe(takeUntilDestroyed()).subscribe(() => {
585
- this.collapsed = this.rectangleElement.collapsed;
586
- this.changeDetectorRef.detectChanges();
587
- });
588
- this._trigger = `${PopUpTriggers.Hover}`;
589
- this.navbarFocusableItem.setTooltip(this);
590
- this.arrow = false;
591
- this.offset = 0;
592
- this.navbarFocusableItem.decorative = !this.isLink;
593
- afterNextRender(() => {
594
- // Deferred a microtask: the ambient `KbqNavbar` flips this item's rectangle element to
595
- // horizontal via its own `Promise.resolve().then()` (see `KbqNavbar.setItemsState`), which
596
- // runs after this callback. Without the extra hop, the first measurement below can run while
597
- // the rectangle element still reports its default vertical/expanded state.
598
- Promise.resolve().then(() => this.observeLongTitle());
722
+ this.longTitleEnabled = signal(false, ...(ngDevMode ? [{ debugName: "longTitleEnabled" }] : /* istanbul ignore next */ []));
723
+ /** text that will be displayed in the tooltip. By default, the text is taken from kbq-navbar-title. */
724
+ this.collapsedText = input('', ...(ngDevMode ? [{ debugName: "collapsedText" }] : /* istanbul ignore next */ []));
725
+ /**
726
+ * Explicitly enables or disables the brand's tooltip.
727
+ *
728
+ * Left unset, the tooltip is enabled exactly when the title cannot be read from the brand itself — the
729
+ * navbar is collapsed, the title is clipped, or there is no title at all.
730
+ */
731
+ this.tooltipDisabled = input(undefined, { ...(ngDevMode ? { debugName: "tooltipDisabled" } : /* istanbul ignore next */ {}), alias: 'kbqTooltipDisabled',
732
+ transform: (value) => (value === undefined ? undefined : booleanAttribute(value)) });
733
+ /** Whether the brand is rendered in its collapsed (logo-only) form. @docs-private */
734
+ this.collapsed = this.rectangleElement.collapsedState;
735
+ /** Accessible name of the brand. Needed when the brand renders nothing but a logo. */
736
+ this.ariaLabel = input(null, { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
737
+ this.rectangleElement.state.pipe(takeUntilDestroyed()).subscribe(() => this.updateTooltip());
738
+ this.tooltip.arrow = false;
739
+ this.tooltip.offset = 0;
740
+ // A brand tooltip stands in for a title that cannot be read from the element itself, so it opens on
741
+ // hover only; keyboard focus surfaces it through `KbqNavbarFocusableItem.focus()`.
742
+ this.tooltip.trigger = `${PopUpTriggers.Hover}`;
743
+ this.navbarFocusableItem.setTooltip(this.tooltip);
744
+ effect(() => {
745
+ // Re-read the reactive inputs the tooltip content depends on.
746
+ this.collapsedText();
747
+ this.tooltipDisabled();
748
+ this.collapsed();
749
+ this.updateTooltip();
599
750
  });
751
+ afterNextRender(() => this.observeLongTitle());
600
752
  // A disabled navbar item takes `pointer-events: none`, which on a brand would also stop the tooltip a
601
753
  // collapsed brand depends on. Capturing on the host runs ahead of every listener of the link, `RouterLink`
602
754
  // included.
603
755
  const unlisten = this.renderer.listen(this.nativeElement, 'click', (event) => this.preventDisabledActivation(event), { capture: true });
604
756
  this.destroyRef.onDestroy(unlisten);
605
757
  }
758
+ /** @docs-private */
606
759
  ngAfterContentInit() {
760
+ // A brand that is neither a link nor a wrapper around something interactive is decorative, and only
761
+ // then is it kept out of the roving focus order. Deciding this here and not in the constructor is what
762
+ // makes the projected content visible at all; deciding it from `isLink` alone used to disable every
763
+ // `<div kbq-navbar-brand>`, however interactive its content was.
764
+ this.navbarFocusableItem.decorative.set(!this.isLink && !this.navbarFocusableItem.nestedElement);
607
765
  this.updateTooltip();
608
766
  }
609
767
  preventDisabledActivation(event) {
@@ -613,14 +771,18 @@ class KbqNavbarBrand extends KbqTooltipTrigger {
613
771
  event.stopImmediatePropagation();
614
772
  }
615
773
  updateTooltip() {
616
- if (this.collapsed) {
617
- this.content = `${this.titleText || ''}`;
774
+ const titleText = this.titleText;
775
+ // With no title or `collapsedText` to stand in, a collapsed brand keeps the content bound as `tooltipText`.
776
+ if (this.collapsed() && titleText) {
777
+ this.tooltip.content = titleText;
618
778
  }
619
- else if (!this.collapsed && this.hasCroppedText) {
620
- this.content = this.croppedText;
779
+ else if (this.hasCroppedText) {
780
+ this.tooltip.content = this.croppedText;
621
781
  }
622
- if (this.rectangleElement.vertical) {
623
- this.placement = PopUpPlacements.Right;
782
+ // A fully visible title needs no tooltip; for a collapsed, clipped or missing one it is the only label.
783
+ this.tooltip.disabled = this.tooltipDisabled() ?? (!!this.title() && !this.collapsed() && !this.hasCroppedText);
784
+ if (this.rectangleElement.isVertical()) {
785
+ this.tooltip.tooltipPlacement = PopUpPlacements.Right;
624
786
  }
625
787
  this.changeDetectorRef.markForCheck();
626
788
  }
@@ -652,7 +814,7 @@ class KbqNavbarBrand extends KbqTooltipTrigger {
652
814
  .subscribe(() => afterNextRender({ mixedReadWrite: () => this.updateAutoLongTitle() }, { injector: this.injector }));
653
815
  }
654
816
  updateAutoLongTitle() {
655
- this.autoLongTitle.set(this.measureNeedsLongTitle());
817
+ this.longTitleEnabled.set(this.measureNeedsLongTitle());
656
818
  // The clamp state feeds into `hasCroppedText`, which the tooltip's content depends on - refresh it
657
819
  // so a title that becomes clamped after the initial render doesn't show stale/empty tooltip content.
658
820
  this.updateTooltip();
@@ -668,7 +830,7 @@ class KbqNavbarBrand extends KbqTooltipTrigger {
668
830
  const title = this.title();
669
831
  // A collapsed title is `display: none`, so it measures as 0 - keep the last known value instead.
670
832
  if (!title || this.rectangleElement.collapsed) {
671
- return this.autoLongTitle();
833
+ return this.longTitleEnabled();
672
834
  }
673
835
  const host = this.nativeElement;
674
836
  const applied = host.classList.contains(LONG_TITLE_CLASS);
@@ -679,71 +841,131 @@ class KbqNavbarBrand extends KbqTooltipTrigger {
679
841
  host.classList.add(LONG_TITLE_CLASS);
680
842
  return overflown;
681
843
  }
682
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqNavbarBrand, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
683
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.30", type: KbqNavbarBrand, isStandalone: true, selector: "kbq-navbar-brand, [kbq-navbar-brand]", inputs: { longTitle: { classPropertyName: "longTitle", publicName: "longTitle", isSignal: true, isRequired: false, transformFunction: null }, collapsedText: { classPropertyName: "collapsedText", publicName: "collapsedText", isSignal: false, isRequired: false, transformFunction: null } }, host: { properties: { "class.kbq-navbar-brand_long-title": "longTitleEnabled()", "class.kbq-navbar-brand_link": "isLink" }, classAttribute: "kbq-navbar-brand" }, queries: [{ propertyName: "title", first: true, predicate: KbqNavbarTitle, descendants: true, isSignal: true }], exportAs: ["kbqNavbarBrand"], usesInheritance: true, ngImport: i0, template: `
844
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqNavbarBrand, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
845
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.25", type: KbqNavbarBrand, isStandalone: true, selector: "kbq-navbar-brand, [kbq-navbar-brand]", inputs: { collapsedText: { classPropertyName: "collapsedText", publicName: "collapsedText", isSignal: true, isRequired: false, transformFunction: null }, tooltipDisabled: { classPropertyName: "tooltipDisabled", publicName: "kbqTooltipDisabled", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.kbq-navbar-brand_long-title": "longTitleEnabled()", "class.kbq-navbar-brand_link": "isLink", "attr.aria-label": "resolvedAriaLabel" }, classAttribute: "kbq-navbar-brand" }, queries: [{ propertyName: "title", first: true, predicate: KbqNavbarTitle, descendants: true, isSignal: true }], exportAs: ["kbqNavbarBrand"], hostDirectives: [{ directive: i1.KbqTooltipTrigger, inputs: ["kbqTooltip", "tooltipText", "kbqTooltipClass", "kbqTooltipClass", "kbqTooltipColor", "kbqTooltipColor", "kbqTooltipOffset", "kbqTooltipOffset", "kbqTrigger", "kbqTrigger", "kbqPlacement", "kbqPlacement", "kbqEnterDelay", "kbqEnterDelay", "kbqLeaveDelay", "kbqLeaveDelay", "kbqVisible", "kbqVisible"], outputs: ["kbqVisibleChange", "kbqVisibleChange", "kbqPlacementChange", "kbqPlacementChange"] }], ngImport: i0, template: `
684
846
  <ng-content />
685
- `, isInline: true, styles: ["button.kbq-navbar-item,button.kbq-navbar-brand{background:transparent;border:none}.kbq-navbar-logo{display:flex}.kbq-navbar-brand{position:relative;display:flex;border-radius:var(--kbq-size-s)}.kbq-navbar-brand:after{position:absolute;content:\"\";display:none;border-radius:var(--kbq-navbar-item-size-content-border-radius)}.kbq-navbar-brand:not(.kbq-disabled) .kbq-navbar-title{cursor:pointer}a.kbq-navbar-brand{text-decoration:none}.kbq-navbar-brand.kbq-horizontal{padding:var(--kbq-size-s) var(--kbq-size-xs) var(--kbq-size-s) var(--kbq-size-xxs);align-items:center;gap:var(--kbq-size-s)}.kbq-navbar-brand.kbq-horizontal:after{top:var(--kbq-size-xxs);right:var(--kbq-size-xxs);bottom:var(--kbq-size-xxs);left:0}.kbq-navbar-brand.kbq-horizontal .kbq-navbar-title{box-sizing:content-box;max-width:154px;padding-right:var(--kbq-size-m)}.kbq-navbar-brand.kbq-vertical{flex-direction:row;align-items:center;padding:var(--kbq-size-m)}.kbq-navbar-brand.kbq-vertical:after{top:var(--kbq-size-s);right:var(--kbq-size-s);bottom:var(--kbq-size-s);left:var(--kbq-size-s)}.kbq-navbar-brand.kbq-vertical .kbq-navbar-logo{align-items:center}.kbq-navbar-brand.kbq-vertical .kbq-navbar-title{display:block;align-items:center;padding-left:var(--kbq-size-s)}.kbq-navbar-brand.kbq-vertical.kbq-expanded .kbq-navbar-title{max-width:200px}.kbq-navbar-brand.kbq-vertical.kbq-collapsed .kbq-navbar-title{display:none!important}.kbq-navbar-brand.kbq-navbar-brand_long-title .kbq-navbar-title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;white-space:normal}.kbq-navbar-brand:not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-default-content-background)}.kbq-navbar-brand .kbq-navbar-title{color:var(--kbq-navbar-item-default-content-text)}.kbq-navbar-brand>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-default-content-icon-left)!important}.kbq-navbar-brand.kbq-disabled{cursor:default}.kbq-navbar-brand.kbq-navbar-brand_link:not(.kbq-disabled){cursor:pointer}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-hover-content-background)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled) .kbq-navbar-title{color:var(--kbq-navbar-item-states-hover-content-text)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-hover-content-icon-left)!important}.kbq-navbar-brand.kbq-navbar-brand_link.cdk-focused.cdk-keyboard-focused:not(.kbq-disabled){outline:none}.kbq-navbar-brand.kbq-navbar-brand_link.cdk-focused.cdk-keyboard-focused:not(.kbq-disabled):after{display:block;box-shadow:inset 0 0 0 2px var(--kbq-states-line-focus-theme)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand):not(.kbq-navbar-item_has-nested):after,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-selected-content-background)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-title,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-title{color:var(--kbq-navbar-item-states-selected-content-text)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand)>.kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-selected-content-icon-left)!important}.kbq-navbar-brand.kbq-navbar-brand_link.kbq-vertical:hover:not(.kbq-disabled) .kbq-navbar-logo{transform:scale(1.06)}.kbq-navbar-brand.kbq-navbar-brand_link.kbq-horizontal:hover:not(.kbq-disabled) .kbq-navbar-logo{z-index:1}.kbq-navbar-brand.kbq-navbar-focusable-item{outline:none}.kbq-navbar-brand .kbq-navbar-title{font-size:var(--kbq-typography-navbar-title-font-size);font-style:var(--kbq-typography-navbar-title-font-style);font-weight:var(--kbq-typography-navbar-title-font-weight);line-height:var(--kbq-typography-navbar-title-line-height);font-family:var(--kbq-typography-navbar-title-font-family);text-transform:var(--kbq-typography-navbar-title-text-transform);font-feature-settings:var(--kbq-typography-navbar-title-font-feature-settings);letter-spacing:var(--kbq-typography-navbar-title-letter-spacing)}.kbq-navbar-brand.kbq-navbar-brand_long-title .kbq-navbar-title{font-size:var(--kbq-typography-text-normal-strong-font-size);font-style:var(--kbq-typography-text-normal-strong-font-style);font-weight:var(--kbq-typography-text-normal-strong-font-weight);line-height:var(--kbq-typography-text-normal-strong-line-height);font-family:var(--kbq-typography-text-normal-strong-font-family);text-transform:var(--kbq-typography-text-normal-strong-text-transform);font-feature-settings:var(--kbq-typography-text-normal-strong-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-strong-letter-spacing);line-height:16px}\n"] }); }
847
+ `, isInline: true, styles: ["button.kbq-navbar-item,button.kbq-navbar-brand{background:transparent;border:none}.kbq-navbar-logo{display:flex}.kbq-navbar-brand{position:relative;display:flex;border-radius:var(--kbq-size-s)}@supports (corner-shape: squircle){.kbq-navbar-brand{corner-shape:squircle;border-radius:clamp(var(--kbq-size-s) * 1.85,var(--kbq-size-s) * 2.3 - 3.6px,var(--kbq-size-s) * 2)}}.kbq-navbar-brand:after{position:absolute;content:\"\";display:none;border-radius:var(--kbq-navbar-item-size-content-border-radius)}@supports (corner-shape: squircle){.kbq-navbar-brand:after{corner-shape:squircle;border-radius:clamp(var(--kbq-navbar-item-size-content-border-radius) * 1.85,var(--kbq-navbar-item-size-content-border-radius) * 2.3 - 3.6px,var(--kbq-navbar-item-size-content-border-radius) * 2)}}.kbq-navbar-brand:not(.kbq-disabled) .kbq-navbar-title{cursor:pointer}a.kbq-navbar-brand{text-decoration:none}.kbq-navbar-brand.kbq-horizontal{padding:var(--kbq-size-s) var(--kbq-size-xs) var(--kbq-size-s) var(--kbq-size-xxs);align-items:center;gap:var(--kbq-size-s)}.kbq-navbar-brand.kbq-horizontal:after{top:var(--kbq-size-xxs);right:var(--kbq-size-xxs);bottom:var(--kbq-size-xxs);left:0}.kbq-navbar-brand.kbq-horizontal .kbq-navbar-title{box-sizing:content-box;max-width:154px;padding-right:var(--kbq-size-m)}.kbq-navbar-brand.kbq-vertical{flex-direction:row;align-items:center;padding:var(--kbq-size-m)}.kbq-navbar-brand.kbq-vertical:after{top:var(--kbq-size-s);right:var(--kbq-size-s);bottom:var(--kbq-size-s);left:var(--kbq-size-s)}.kbq-navbar-brand.kbq-vertical .kbq-navbar-logo{align-items:center}.kbq-navbar-brand.kbq-vertical .kbq-navbar-title{display:block;align-items:center;padding-left:var(--kbq-size-s)}.kbq-navbar-brand.kbq-vertical.kbq-expanded .kbq-navbar-title{max-width:var(--kbq-navbar-brand-vertical-size-title-max-width)}.kbq-navbar-brand.kbq-vertical.kbq-collapsed .kbq-navbar-title{display:none}.kbq-navbar-brand.kbq-navbar-brand_long-title .kbq-navbar-title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;white-space:normal}.kbq-navbar-brand:not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-default-content-background)}.kbq-navbar-brand .kbq-navbar-title{color:var(--kbq-navbar-item-default-content-text)}.kbq-navbar-brand>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-default-content-icon-left)}.kbq-navbar-brand .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-brand .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-default-content-icon-right)}.kbq-navbar-brand.kbq-disabled{cursor:default}.kbq-navbar-brand.kbq-navbar-brand_link:not(.kbq-disabled){cursor:pointer}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-hover-content-background)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled) .kbq-navbar-title{color:var(--kbq-navbar-item-states-hover-content-text)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-hover-content-icon-left)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled) .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-hover-content-icon-right)}.kbq-navbar-brand.kbq-navbar-brand_link.cdk-focused.cdk-keyboard-focused:not(.kbq-disabled){outline:none}.kbq-navbar-brand.kbq-navbar-brand_link.cdk-focused.cdk-keyboard-focused:not(.kbq-disabled):after{display:block;box-shadow:inset 0 0 0 2px var(--kbq-states-line-focus-theme)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand):not(.kbq-navbar-item_has-nested):after,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-selected-content-background)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-title,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-title{color:var(--kbq-navbar-item-states-selected-content-text)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand)>.kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-selected-content-icon-left)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-item-suffix .kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-selected-content-icon-right)}.kbq-navbar-brand.kbq-navbar-brand_link.kbq-vertical:hover:not(.kbq-disabled) .kbq-navbar-logo{transform:scale(1.06)}.kbq-navbar-brand.kbq-navbar-brand_link.kbq-horizontal:hover:not(.kbq-disabled) .kbq-navbar-logo{z-index:1}.kbq-navbar-brand.kbq-navbar-focusable-item{outline:none}.kbq-navbar-brand .kbq-navbar-title{font-size:var(--kbq-typography-navbar-title-font-size);font-style:var(--kbq-typography-navbar-title-font-style);font-weight:var(--kbq-typography-navbar-title-font-weight);line-height:var(--kbq-typography-navbar-title-line-height);font-family:var(--kbq-typography-navbar-title-font-family);text-transform:var(--kbq-typography-navbar-title-text-transform);font-feature-settings:var(--kbq-typography-navbar-title-font-feature-settings);letter-spacing:var(--kbq-typography-navbar-title-letter-spacing)}.kbq-navbar-brand.kbq-navbar-brand_long-title .kbq-navbar-title{font-size:var(--kbq-typography-text-normal-strong-font-size);font-style:var(--kbq-typography-text-normal-strong-font-style);font-weight:var(--kbq-typography-text-normal-strong-font-weight);line-height:var(--kbq-typography-text-normal-strong-line-height);font-family:var(--kbq-typography-text-normal-strong-font-family);text-transform:var(--kbq-typography-text-normal-strong-text-transform);font-feature-settings:var(--kbq-typography-text-normal-strong-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-strong-letter-spacing);line-height:16px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
686
848
  }
687
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqNavbarBrand, decorators: [{
849
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqNavbarBrand, decorators: [{
688
850
  type: Component,
689
851
  args: [{ selector: 'kbq-navbar-brand, [kbq-navbar-brand]', template: `
690
852
  <ng-content />
691
- `, host: {
853
+ `, changeDetection: ChangeDetectionStrategy.OnPush, host: {
692
854
  class: 'kbq-navbar-brand',
693
855
  [`[class.${LONG_TITLE_CLASS}]`]: 'longTitleEnabled()',
694
- '[class.kbq-navbar-brand_link]': 'isLink'
695
- }, exportAs: 'kbqNavbarBrand', styles: ["button.kbq-navbar-item,button.kbq-navbar-brand{background:transparent;border:none}.kbq-navbar-logo{display:flex}.kbq-navbar-brand{position:relative;display:flex;border-radius:var(--kbq-size-s)}.kbq-navbar-brand:after{position:absolute;content:\"\";display:none;border-radius:var(--kbq-navbar-item-size-content-border-radius)}.kbq-navbar-brand:not(.kbq-disabled) .kbq-navbar-title{cursor:pointer}a.kbq-navbar-brand{text-decoration:none}.kbq-navbar-brand.kbq-horizontal{padding:var(--kbq-size-s) var(--kbq-size-xs) var(--kbq-size-s) var(--kbq-size-xxs);align-items:center;gap:var(--kbq-size-s)}.kbq-navbar-brand.kbq-horizontal:after{top:var(--kbq-size-xxs);right:var(--kbq-size-xxs);bottom:var(--kbq-size-xxs);left:0}.kbq-navbar-brand.kbq-horizontal .kbq-navbar-title{box-sizing:content-box;max-width:154px;padding-right:var(--kbq-size-m)}.kbq-navbar-brand.kbq-vertical{flex-direction:row;align-items:center;padding:var(--kbq-size-m)}.kbq-navbar-brand.kbq-vertical:after{top:var(--kbq-size-s);right:var(--kbq-size-s);bottom:var(--kbq-size-s);left:var(--kbq-size-s)}.kbq-navbar-brand.kbq-vertical .kbq-navbar-logo{align-items:center}.kbq-navbar-brand.kbq-vertical .kbq-navbar-title{display:block;align-items:center;padding-left:var(--kbq-size-s)}.kbq-navbar-brand.kbq-vertical.kbq-expanded .kbq-navbar-title{max-width:200px}.kbq-navbar-brand.kbq-vertical.kbq-collapsed .kbq-navbar-title{display:none!important}.kbq-navbar-brand.kbq-navbar-brand_long-title .kbq-navbar-title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;white-space:normal}.kbq-navbar-brand:not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-default-content-background)}.kbq-navbar-brand .kbq-navbar-title{color:var(--kbq-navbar-item-default-content-text)}.kbq-navbar-brand>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-default-content-icon-left)!important}.kbq-navbar-brand.kbq-disabled{cursor:default}.kbq-navbar-brand.kbq-navbar-brand_link:not(.kbq-disabled){cursor:pointer}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-hover-content-background)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled) .kbq-navbar-title{color:var(--kbq-navbar-item-states-hover-content-text)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-hover-content-icon-left)!important}.kbq-navbar-brand.kbq-navbar-brand_link.cdk-focused.cdk-keyboard-focused:not(.kbq-disabled){outline:none}.kbq-navbar-brand.kbq-navbar-brand_link.cdk-focused.cdk-keyboard-focused:not(.kbq-disabled):after{display:block;box-shadow:inset 0 0 0 2px var(--kbq-states-line-focus-theme)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand):not(.kbq-navbar-item_has-nested):after,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-selected-content-background)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-title,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-title{color:var(--kbq-navbar-item-states-selected-content-text)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand)>.kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-selected-content-icon-left)!important}.kbq-navbar-brand.kbq-navbar-brand_link.kbq-vertical:hover:not(.kbq-disabled) .kbq-navbar-logo{transform:scale(1.06)}.kbq-navbar-brand.kbq-navbar-brand_link.kbq-horizontal:hover:not(.kbq-disabled) .kbq-navbar-logo{z-index:1}.kbq-navbar-brand.kbq-navbar-focusable-item{outline:none}.kbq-navbar-brand .kbq-navbar-title{font-size:var(--kbq-typography-navbar-title-font-size);font-style:var(--kbq-typography-navbar-title-font-style);font-weight:var(--kbq-typography-navbar-title-font-weight);line-height:var(--kbq-typography-navbar-title-line-height);font-family:var(--kbq-typography-navbar-title-font-family);text-transform:var(--kbq-typography-navbar-title-text-transform);font-feature-settings:var(--kbq-typography-navbar-title-font-feature-settings);letter-spacing:var(--kbq-typography-navbar-title-letter-spacing)}.kbq-navbar-brand.kbq-navbar-brand_long-title .kbq-navbar-title{font-size:var(--kbq-typography-text-normal-strong-font-size);font-style:var(--kbq-typography-text-normal-strong-font-style);font-weight:var(--kbq-typography-text-normal-strong-font-weight);line-height:var(--kbq-typography-text-normal-strong-line-height);font-family:var(--kbq-typography-text-normal-strong-font-family);text-transform:var(--kbq-typography-text-normal-strong-text-transform);font-feature-settings:var(--kbq-typography-text-normal-strong-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-strong-letter-spacing);line-height:16px}\n"] }]
696
- }], ctorParameters: () => [], propDecorators: { title: [{ type: i0.ContentChild, args: [i0.forwardRef(() => KbqNavbarTitle), { isSignal: true }] }], longTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "longTitle", required: false }] }], collapsedText: [{
697
- type: Input
698
- }] } });
856
+ '[class.kbq-navbar-brand_link]': 'isLink',
857
+ '[attr.aria-label]': 'resolvedAriaLabel'
858
+ }, hostDirectives: [
859
+ {
860
+ directive: KbqTooltipTrigger,
861
+ inputs: [
862
+ 'kbqTooltip: tooltipText',
863
+ 'kbqTooltipClass',
864
+ 'kbqTooltipColor',
865
+ 'kbqTooltipOffset',
866
+ 'kbqTrigger',
867
+ 'kbqPlacement',
868
+ 'kbqEnterDelay',
869
+ 'kbqLeaveDelay',
870
+ 'kbqVisible'
871
+ ],
872
+ outputs: [
873
+ 'kbqVisibleChange',
874
+ 'kbqPlacementChange'
875
+ ]
876
+ }
877
+ ], exportAs: 'kbqNavbarBrand', styles: ["button.kbq-navbar-item,button.kbq-navbar-brand{background:transparent;border:none}.kbq-navbar-logo{display:flex}.kbq-navbar-brand{position:relative;display:flex;border-radius:var(--kbq-size-s)}@supports (corner-shape: squircle){.kbq-navbar-brand{corner-shape:squircle;border-radius:clamp(var(--kbq-size-s) * 1.85,var(--kbq-size-s) * 2.3 - 3.6px,var(--kbq-size-s) * 2)}}.kbq-navbar-brand:after{position:absolute;content:\"\";display:none;border-radius:var(--kbq-navbar-item-size-content-border-radius)}@supports (corner-shape: squircle){.kbq-navbar-brand:after{corner-shape:squircle;border-radius:clamp(var(--kbq-navbar-item-size-content-border-radius) * 1.85,var(--kbq-navbar-item-size-content-border-radius) * 2.3 - 3.6px,var(--kbq-navbar-item-size-content-border-radius) * 2)}}.kbq-navbar-brand:not(.kbq-disabled) .kbq-navbar-title{cursor:pointer}a.kbq-navbar-brand{text-decoration:none}.kbq-navbar-brand.kbq-horizontal{padding:var(--kbq-size-s) var(--kbq-size-xs) var(--kbq-size-s) var(--kbq-size-xxs);align-items:center;gap:var(--kbq-size-s)}.kbq-navbar-brand.kbq-horizontal:after{top:var(--kbq-size-xxs);right:var(--kbq-size-xxs);bottom:var(--kbq-size-xxs);left:0}.kbq-navbar-brand.kbq-horizontal .kbq-navbar-title{box-sizing:content-box;max-width:154px;padding-right:var(--kbq-size-m)}.kbq-navbar-brand.kbq-vertical{flex-direction:row;align-items:center;padding:var(--kbq-size-m)}.kbq-navbar-brand.kbq-vertical:after{top:var(--kbq-size-s);right:var(--kbq-size-s);bottom:var(--kbq-size-s);left:var(--kbq-size-s)}.kbq-navbar-brand.kbq-vertical .kbq-navbar-logo{align-items:center}.kbq-navbar-brand.kbq-vertical .kbq-navbar-title{display:block;align-items:center;padding-left:var(--kbq-size-s)}.kbq-navbar-brand.kbq-vertical.kbq-expanded .kbq-navbar-title{max-width:var(--kbq-navbar-brand-vertical-size-title-max-width)}.kbq-navbar-brand.kbq-vertical.kbq-collapsed .kbq-navbar-title{display:none}.kbq-navbar-brand.kbq-navbar-brand_long-title .kbq-navbar-title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;white-space:normal}.kbq-navbar-brand:not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-default-content-background)}.kbq-navbar-brand .kbq-navbar-title{color:var(--kbq-navbar-item-default-content-text)}.kbq-navbar-brand>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-default-content-icon-left)}.kbq-navbar-brand .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-brand .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-default-content-icon-right)}.kbq-navbar-brand.kbq-disabled{cursor:default}.kbq-navbar-brand.kbq-navbar-brand_link:not(.kbq-disabled){cursor:pointer}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-hover-content-background)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled) .kbq-navbar-title{color:var(--kbq-navbar-item-states-hover-content-text)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-hover-content-icon-left)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled) .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-hover-content-icon-right)}.kbq-navbar-brand.kbq-navbar-brand_link.cdk-focused.cdk-keyboard-focused:not(.kbq-disabled){outline:none}.kbq-navbar-brand.kbq-navbar-brand_link.cdk-focused.cdk-keyboard-focused:not(.kbq-disabled):after{display:block;box-shadow:inset 0 0 0 2px var(--kbq-states-line-focus-theme)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand):not(.kbq-navbar-item_has-nested):after,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-selected-content-background)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-title,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-title{color:var(--kbq-navbar-item-states-selected-content-text)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand)>.kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-selected-content-icon-left)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-item-suffix .kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-selected-content-icon-right)}.kbq-navbar-brand.kbq-navbar-brand_link.kbq-vertical:hover:not(.kbq-disabled) .kbq-navbar-logo{transform:scale(1.06)}.kbq-navbar-brand.kbq-navbar-brand_link.kbq-horizontal:hover:not(.kbq-disabled) .kbq-navbar-logo{z-index:1}.kbq-navbar-brand.kbq-navbar-focusable-item{outline:none}.kbq-navbar-brand .kbq-navbar-title{font-size:var(--kbq-typography-navbar-title-font-size);font-style:var(--kbq-typography-navbar-title-font-style);font-weight:var(--kbq-typography-navbar-title-font-weight);line-height:var(--kbq-typography-navbar-title-line-height);font-family:var(--kbq-typography-navbar-title-font-family);text-transform:var(--kbq-typography-navbar-title-text-transform);font-feature-settings:var(--kbq-typography-navbar-title-font-feature-settings);letter-spacing:var(--kbq-typography-navbar-title-letter-spacing)}.kbq-navbar-brand.kbq-navbar-brand_long-title .kbq-navbar-title{font-size:var(--kbq-typography-text-normal-strong-font-size);font-style:var(--kbq-typography-text-normal-strong-font-style);font-weight:var(--kbq-typography-text-normal-strong-font-weight);line-height:var(--kbq-typography-text-normal-strong-line-height);font-family:var(--kbq-typography-text-normal-strong-font-family);text-transform:var(--kbq-typography-text-normal-strong-text-transform);font-feature-settings:var(--kbq-typography-text-normal-strong-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-strong-letter-spacing);line-height:16px}\n"] }]
878
+ }], ctorParameters: () => [], propDecorators: { title: [{ type: i0.ContentChild, args: [i0.forwardRef(() => KbqNavbarTitle), { isSignal: true }] }], collapsedText: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsedText", required: false }] }], tooltipDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "kbqTooltipDisabled", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }] } });
699
879
 
700
880
  class KbqFocusableComponent {
701
881
  constructor() {
882
+ /** @docs-private */
702
883
  this.changeDetectorRef = inject(ChangeDetectorRef);
884
+ /** @docs-private */
703
885
  this.elementRef = inject(ElementRef);
886
+ /** @docs-private */
704
887
  this.focusMonitor = inject(FocusMonitor);
705
- this._tabIndex = 0;
706
- this.lastFocusOrigin = null;
888
+ /** @docs-private */
707
889
  this.destroyRef = inject(DestroyRef);
890
+ this.focusableItemsQuery = contentChildren(forwardRef(() => KbqNavbarFocusableItem), { ...(ngDevMode ? { debugName: "focusableItemsQuery" } : /* istanbul ignore next */ {}), descendants: true });
891
+ this.focusableItemsList = kbqQueryListFrom(this.focusableItemsQuery);
892
+ /**
893
+ * Tab index of the navbar host. The navbar owns the single tab stop of the whole widget and moves focus
894
+ * between its items with the arrow keys. A navbar without a focusable item stays out of the tab order.
895
+ */
896
+ this.tabIndex = model(0, ...(ngDevMode ? [{ debugName: "tabIndex" }] : /* istanbul ignore next */ []));
897
+ /**
898
+ * Tab index the host renders: {@link tabIndex}, or `-1` while there is no item to hand the focus to. Derived
899
+ * rather than written to the model, which a consumer may bind.
900
+ *
901
+ * @docs-private
902
+ */
903
+ this.renderedTabIndex = computed(() => this.focusableItemsQuery().length === 0 ? -1 : this.tabIndex(), ...(ngDevMode ? [{ debugName: "renderedTabIndex" }] : /* istanbul ignore next */ []));
904
+ /**
905
+ * Accessible name of the navigation landmark. Set it whenever a page renders more than one navbar, so
906
+ * assistive technology can tell them apart.
907
+ */
908
+ this.ariaLabel = input(null, { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
909
+ this.lastFocusOrigin = null;
910
+ this.cachedOptionFocusChanges = null;
911
+ this.cachedOptionBlurChanges = null;
912
+ this.optionFocusSubscription = null;
913
+ this.optionBlurSubscription = null;
708
914
  }
709
- // TODO: Skipped for migration because:
710
- // Accessor inputs cannot be migrated as they are too complex.
711
- get tabIndex() {
712
- return this._tabIndex;
713
- }
714
- set tabIndex(value) {
715
- this._tabIndex = value;
915
+ /** @docs-private */
916
+ get focusableItems() {
917
+ return this.focusableItemsList();
716
918
  }
919
+ /** Focus events of every focusable item, merged once per change of the item set. @docs-private */
717
920
  get optionFocusChanges() {
718
- return merge(...this.focusableItems.map((item) => item.onFocus));
921
+ return (this.cachedOptionFocusChanges ??= merge(...this.focusableItems.map((item) => item.onFocus)));
719
922
  }
923
+ /** Blur events of every focusable item, merged once per change of the item set. @docs-private */
720
924
  get optionBlurChanges() {
721
- return merge(...this.focusableItems.map((option) => option.onBlur));
925
+ return (this.cachedOptionBlurChanges ??= merge(...this.focusableItems.map((option) => option.onBlur)));
722
926
  }
927
+ /** @docs-private */
723
928
  ngAfterContentInit() {
724
929
  this.keyManager = new FocusKeyManager(this.focusableItems).withTypeAhead();
725
- this.keyManager.tabOut.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {
726
- this.tabIndex = -1;
727
- setTimeout(() => {
728
- this.tabIndex = 0;
729
- this.changeDetectorRef.markForCheck();
730
- });
731
- });
732
- this.focusableItems.changes.pipe(startWith(null), takeUntilDestroyed(this.destroyRef)).subscribe(() => {
733
- this.resetOptions();
734
- // Check to see if we need to update our tab index
735
- this.updateTabIndex();
736
- });
930
+ kbqLeaveTabOrderOnTabOut(this.keyManager.tabOut, this.elementRef.nativeElement, () => this.renderedTabIndex(), this.destroyRef);
931
+ this.focusableItems.changes
932
+ .pipe(startWith(null), takeUntilDestroyed(this.destroyRef))
933
+ .subscribe(() => this.resetOptions());
737
934
  }
935
+ /** @docs-private */
936
+ ngAfterContentChecked() {
937
+ // Syncs the list here so `changes` emits after the projected items are bound and before the host bindings.
938
+ this.focusableItemsList();
939
+ }
940
+ /**
941
+ * Monitored with `checkChildren`, because the navbar is one composite widget: the host owns the tab stop
942
+ * but hands focus straight to an item, and without it that hand-off reads as the navbar being blurred.
943
+ *
944
+ * @docs-private
945
+ */
738
946
  ngAfterViewInit() {
739
- this.focusMonitor.monitor(this.elementRef).subscribe((focusOrigin) => {
947
+ this.focusMonitor
948
+ .monitor(this.elementRef, true)
949
+ .pipe(takeUntilDestroyed(this.destroyRef))
950
+ .subscribe((focusOrigin) => {
951
+ // A child losing focus to another child reports `null` in between; keep the origin the arrow
952
+ // keys travel on, and let a real blur of the whole navbar be handled by `blur()`.
953
+ if (focusOrigin === null)
954
+ return;
740
955
  this.lastFocusOrigin = focusOrigin;
741
956
  this.keyManager.setFocusOrigin(focusOrigin);
742
957
  });
743
958
  }
959
+ /** @docs-private */
744
960
  ngOnDestroy() {
961
+ this.dropSubscriptions();
745
962
  this.focusMonitor.stopMonitoring(this.elementRef);
746
963
  }
964
+ /** Host element of the navbar. @docs-private */
965
+ getNativeElement() {
966
+ return this.elementRef.nativeElement;
967
+ }
968
+ /** @docs-private */
747
969
  focus() {
748
970
  if (this.focusableItems.length === 0) {
749
971
  return;
@@ -755,25 +977,26 @@ class KbqFocusableComponent {
755
977
  }
756
978
  this.keyManager.setFirstItemActive();
757
979
  }
980
+ /** @docs-private */
758
981
  blur() {
759
982
  if (!this.hasFocusedItem()) {
760
983
  this.keyManager.setActiveItem(-1);
761
984
  }
762
985
  this.changeDetectorRef.markForCheck();
763
986
  }
987
+ /** @docs-private */
764
988
  resetOptions() {
765
989
  this.dropSubscriptions();
766
990
  this.listenToOptionsFocus();
767
991
  }
992
+ /** @docs-private */
768
993
  dropSubscriptions() {
769
- if (this.optionFocusSubscription) {
770
- this.optionFocusSubscription.unsubscribe();
771
- this.optionFocusSubscription = null;
772
- }
773
- if (this.optionBlurSubscription) {
774
- this.optionBlurSubscription.unsubscribe();
775
- this.optionBlurSubscription = null;
776
- }
994
+ this.optionFocusSubscription?.unsubscribe();
995
+ this.optionFocusSubscription = null;
996
+ this.optionBlurSubscription?.unsubscribe();
997
+ this.optionBlurSubscription = null;
998
+ this.cachedOptionFocusChanges = null;
999
+ this.cachedOptionBlurChanges = null;
777
1000
  }
778
1001
  listenToOptionsFocus() {
779
1002
  this.optionFocusSubscription = this.optionFocusChanges.subscribe((event) => {
@@ -784,31 +1007,23 @@ class KbqFocusableComponent {
784
1007
  });
785
1008
  this.optionBlurSubscription = this.optionBlurChanges.subscribe(() => this.blur());
786
1009
  }
787
- updateTabIndex() {
788
- this.tabIndex = this.focusableItems.length === 0 ? -1 : 0;
789
- }
790
1010
  isValidIndex(index) {
791
1011
  return index >= 0 && index < this.focusableItems.length;
792
1012
  }
793
1013
  hasFocusedItem() {
794
1014
  return this.focusableItems.some((item) => item.hasFocus);
795
1015
  }
796
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqFocusableComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
797
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.30", type: KbqFocusableComponent, isStandalone: true, inputs: { tabIndex: "tabIndex" }, queries: [{ propertyName: "focusableItems", predicate: i0.forwardRef(() => KbqNavbarFocusableItem), descendants: true }], ngImport: i0 }); }
1016
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqFocusableComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1017
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.25", type: KbqFocusableComponent, isStandalone: true, inputs: { tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { tabIndex: "tabIndexChange" }, queries: [{ propertyName: "focusableItemsQuery", predicate: i0.forwardRef(() => KbqNavbarFocusableItem), descendants: true, isSignal: true }], ngImport: i0 }); }
798
1018
  }
799
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqFocusableComponent, decorators: [{
1019
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqFocusableComponent, decorators: [{
800
1020
  type: Directive
801
- }], propDecorators: { focusableItems: [{
802
- type: ContentChildren,
803
- args: [forwardRef(() => KbqNavbarFocusableItem), { descendants: true }]
804
- }], tabIndex: [{
805
- type: Input
806
- }] } });
1021
+ }], propDecorators: { focusableItemsQuery: [{ type: i0.ContentChildren, args: [forwardRef(() => KbqNavbarFocusableItem), { ...{ descendants: true }, isSignal: true }] }], tabIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabIndex", required: false }] }, { type: i0.Output, args: ["tabIndexChange"] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }] } });
807
1022
  class KbqNavbarContainer {
808
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqNavbarContainer, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
809
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.30", type: KbqNavbarContainer, isStandalone: true, selector: "kbq-navbar-container", host: { classAttribute: "kbq-navbar-container" }, ngImport: i0 }); }
1023
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqNavbarContainer, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1024
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.25", type: KbqNavbarContainer, isStandalone: true, selector: "kbq-navbar-container", host: { classAttribute: "kbq-navbar-container" }, ngImport: i0 }); }
810
1025
  }
811
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqNavbarContainer, decorators: [{
1026
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqNavbarContainer, decorators: [{
812
1027
  type: Directive,
813
1028
  args: [{
814
1029
  selector: 'kbq-navbar-container',
@@ -821,63 +1036,95 @@ class KbqNavbar extends KbqFocusableComponent {
821
1036
  get width() {
822
1037
  return this.elementRef.nativeElement.getBoundingClientRect().width;
823
1038
  }
824
- get totalItemsWidth() {
825
- return this.rectangleElements().reduce((acc, item) => acc + item.getOuterElementWidth(), 0);
1039
+ /**
1040
+ * Room the content needs: the outer widths of the containers' children plus the containers' own margins, which
1041
+ * hold the gap between them. The containers' boxes are not measured whole, so a container styled to grow still
1042
+ * reports what it needs rather than what it was given.
1043
+ */
1044
+ get contentWidth() {
1045
+ return Array.from(this.elementRef.nativeElement.children).reduce((total, container) => {
1046
+ const { marginLeft, marginRight } = this.window.getComputedStyle(container);
1047
+ return Array.from(container.children).reduce((acc, child) => acc + getOuterWidth(child, this.window), total + (parseFloat(marginLeft) || 0) + (parseFloat(marginRight) || 0));
1048
+ }, 0);
826
1049
  }
827
1050
  get collapsableItems() {
828
1051
  return this.navbarItems()
829
- .filter((item) => item.icon() && item.title() && item.collapsable)
1052
+ .filter((item) => item.icon() && item.title() && item.collapsable())
830
1053
  .reverse();
831
1054
  }
832
1055
  constructor() {
833
- const elementRef = inject(ElementRef);
834
- const changeDetectorRef = inject(ChangeDetectorRef);
835
- const focusMonitor = inject(FocusMonitor);
836
1056
  super();
837
1057
  this.platform = inject(Platform);
838
- this.rectangleElements = contentChildren(forwardRef(() => KbqNavbarRectangleElement), ...(ngDevMode ? [{ debugName: "rectangleElements", descendants: true }] : [{ descendants: true }]));
839
- this.navbarItems = contentChildren(forwardRef(() => KbqNavbarItem), ...(ngDevMode ? [{ debugName: "navbarItems", descendants: true }] : [{ descendants: true }]));
1058
+ this.ngZone = inject(NgZone);
1059
+ this.window = inject(KBQ_WINDOW);
1060
+ /** @docs-private */
1061
+ this.rectangleElements = contentChildren(forwardRef(() => KbqNavbarRectangleElement), { ...(ngDevMode ? { debugName: "rectangleElements" } : /* istanbul ignore next */ {}), descendants: true });
1062
+ /** @docs-private */
1063
+ this.navbarItems = contentChildren(forwardRef(() => KbqNavbarItem), { ...(ngDevMode ? { debugName: "navbarItems" } : /* istanbul ignore next */ {}), descendants: true });
1064
+ /** Raw `resize` events of the window, fed from outside the Angular zone. @docs-private */
840
1065
  this.resizeStream = new Subject();
841
1066
  this.resizeDebounceInterval = 100;
1067
+ /**
1068
+ * Recomputes which collapsable items fit into the current navbar width.
1069
+ *
1070
+ * Every measurement is taken up front, and only then is anything written: collapsing an item invalidates
1071
+ * layout, so a measurement taken afterwards forces a synchronous reflow for each of the remaining items. The
1072
+ * width an item frees by collapsing comes from its own record of both presentations, see
1073
+ * `KbqNavbarItem.measureWidths()`.
1074
+ *
1075
+ * @docs-private
1076
+ */
842
1077
  this.updateExpandedStateForItems = () => {
843
- const collapseDelta = this.totalItemsWidth - this.width;
844
- const needCollapse = collapseDelta > 0;
845
- if (needCollapse) {
846
- this.collapseItems(collapseDelta);
847
- }
848
- else {
849
- this.expandItems(collapseDelta);
850
- }
851
- };
852
- this.setItemsState = (rectangleElements) => {
853
- Promise.resolve().then(() => rectangleElements.forEach((item) => (item.horizontal = true)));
1078
+ // Untracked: called from a consumer's `effect()`, the items and their collapsed state read here would make the
1079
+ // effect run again on every collapse it makes.
1080
+ untracked(() => this.fitItems());
854
1081
  };
855
- this.elementRef = elementRef;
856
- this.changeDetectorRef = changeDetectorRef;
857
- this.focusMonitor = focusMonitor;
858
- this.resizeSubscription = this.resizeStream
1082
+ this.destroyRef.onDestroy(() => this.resizeStream.complete());
1083
+ // Raw resize events must not enter the zone: a single drag fires hundreds of them, and only the
1084
+ // debounced recompute at the end of the burst is worth a change detection pass.
1085
+ if (this.platform.isBrowser) {
1086
+ this.ngZone.runOutsideAngular(() => {
1087
+ fromEvent(this.window, 'resize')
1088
+ .pipe(takeUntilDestroyed(this.destroyRef))
1089
+ .subscribe((event) => this.resizeStream.next(event));
1090
+ });
1091
+ }
1092
+ this.resizeStream
859
1093
  .pipe(debounceTime(this.resizeDebounceInterval), takeUntilDestroyed())
860
- .subscribe(this.updateExpandedStateForItems);
861
- effect(() => this.setItemsState(this.rectangleElements()));
1094
+ .subscribe(() => this.ngZone.run(this.updateExpandedStateForItems));
1095
+ effect(() => this.rectangleElements().forEach((item) => (item.orientation = 'horizontal')));
1096
+ // Note: this wait is required for loading and rendering fonts for icons;
1097
+ // unfortunately we cannot control font rendering. Bound to the component's lifetime, unlike a bare
1098
+ // `setTimeout`, so it can never run against a destroyed view.
1099
+ afterNextRender(() => this.updateExpandedStateForItems());
862
1100
  }
1101
+ /** @docs-private */
863
1102
  ngAfterContentInit() {
864
1103
  super.ngAfterContentInit();
865
1104
  this.keyManager.withVerticalOrientation(false).withHorizontalOrientation('ltr');
866
1105
  }
867
- ngAfterViewInit() {
868
- super.ngAfterViewInit();
869
- if (!this.platform.isBrowser)
1106
+ /** Body of `updateExpandedStateForItems()`. */
1107
+ fitItems() {
1108
+ const availableWidth = this.width;
1109
+ // A navbar that is not rendered, e.g. hidden in an inactive tab, has nothing to measure yet.
1110
+ if (!availableWidth)
870
1111
  return;
871
- // Note: this wait is required for loading and rendering fonts for icons;
872
- // unfortunately we cannot control font rendering
873
- setTimeout(this.updateExpandedStateForItems);
874
- }
875
- ngOnDestroy() {
876
- this.resizeSubscription.unsubscribe();
877
- super.ngOnDestroy();
1112
+ const items = this.collapsableItems;
1113
+ // Before the content is read, because an item seen in one presentation measures the other by toggling a class.
1114
+ items.forEach((item) => item.measureWidths());
1115
+ const collapseDelta = this.contentWidth - availableWidth;
1116
+ if (collapseDelta > 0) {
1117
+ this.collapseItems(items, collapseDelta);
1118
+ }
1119
+ else {
1120
+ this.expandItems(items, collapseDelta);
1121
+ }
878
1122
  }
1123
+ /** @docs-private */
879
1124
  onKeyDown(event) {
880
1125
  const keyCode = event.keyCode;
1126
+ // The origin of the last focus event may be a click, and an item takes no DOM focus for a pointer origin.
1127
+ this.keyManager.setFocusOrigin('keyboard');
881
1128
  if (!this.eventFromInput(event) && (isVerticalMovement(event) || isHorizontalMovement(event))) {
882
1129
  event.preventDefault();
883
1130
  }
@@ -906,116 +1153,109 @@ class KbqNavbar extends KbqFocusableComponent {
906
1153
  const input = event.target;
907
1154
  return input.selectionEnd === input.value.length;
908
1155
  }
909
- collapseItems(collapseDelta) {
1156
+ collapseItems(items, collapseDelta) {
910
1157
  let delta = collapseDelta;
911
- const unCollapsedItems = this.collapsableItems.filter((item) => !item.collapsed);
912
- for (const item of unCollapsedItems) {
1158
+ // An item that frees nothing has not been measured, because it is hidden, and collapsing it gains nothing.
1159
+ for (const item of items.filter((item) => !item.isCollapsed() && item.getCollapsibleWidth() > 0)) {
913
1160
  item.collapsed = true;
914
- delta -= item.getTitleWidth();
915
- if (delta < 0) {
1161
+ delta -= item.getCollapsibleWidth();
1162
+ if (delta <= 0)
916
1163
  break;
917
- }
918
1164
  }
919
1165
  }
920
- expandItems(collapseDelta) {
1166
+ expandItems(items, collapseDelta) {
921
1167
  let delta = collapseDelta;
922
- this.collapsableItems
923
- .filter((item) => item.collapsed)
924
- .forEach((item) => {
925
- if (delta + item.getTitleWidth() < 0) {
1168
+ for (const item of items.filter((item) => item.isCollapsed())) {
1169
+ if (delta + item.getCollapsibleWidth() <= 0) {
926
1170
  item.collapsed = false;
927
- delta += item.getTitleWidth();
1171
+ delta += item.getCollapsibleWidth();
928
1172
  }
929
- });
1173
+ }
930
1174
  }
931
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqNavbar, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
932
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.30", type: KbqNavbar, isStandalone: true, selector: "kbq-navbar", host: { listeners: { "focus": "focus()", "blur": "blur()", "keydown": "onKeyDown($event)", "window:resize": "resizeStream.next($event)" }, properties: { "attr.tabindex": "tabIndex" }, classAttribute: "kbq-navbar" }, providers: [
933
- { provide: KBQ_DROPDOWN_HOST, useExisting: KbqNavbar }
934
- ], queries: [{ propertyName: "rectangleElements", predicate: i0.forwardRef(() => KbqNavbarRectangleElement), descendants: true, isSignal: true }, { propertyName: "navbarItems", predicate: i0.forwardRef(() => KbqNavbarItem), descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
1175
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqNavbar, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1176
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.25", type: KbqNavbar, isStandalone: true, selector: "kbq-navbar", host: { attributes: { "role": "navigation" }, listeners: { "focus": "focus()", "blur": "blur()", "keydown": "onKeyDown($event)" }, properties: { "attr.aria-label": "ariaLabel()", "attr.tabindex": "renderedTabIndex()" }, classAttribute: "kbq-navbar" }, queries: [{ propertyName: "rectangleElements", predicate: i0.forwardRef(() => KbqNavbarRectangleElement), descendants: true, isSignal: true }, { propertyName: "navbarItems", predicate: i0.forwardRef(() => KbqNavbarItem), descendants: true, isSignal: true }], usesInheritance: true, hostDirectives: [{ directive: i2.KbqOverlayLayerExclude }], ngImport: i0, template: `
935
1177
  <ng-content select="[kbq-navbar-container], kbq-navbar-container" />
936
- `, isInline: true, styles: ["button.kbq-navbar-item,button.kbq-navbar-brand{background:transparent;border:none}.kbq-navbar{z-index:1000;display:flex;flex-direction:row;justify-content:space-between;align-items:center;position:relative}.kbq-navbar-container{display:flex;flex-shrink:0;flex-direction:row;justify-content:space-between;align-items:center;position:relative}.kbq-navbar .kbq-navbar-container+.kbq-navbar-container{margin-left:var(--kbq-size-xxl)}.kbq-navbar{background-color:var(--kbq-navbar-background)}.kbq-vertical-navbar .kbq-vertical-navbar__container{background-color:var(--kbq-navbar-vertical-background);border-right:1px solid var(--kbq-navbar-border)}.kbq-navbar-item{cursor:pointer}.kbq-navbar-item:not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-default-content-background)}.kbq-navbar-item .kbq-navbar-title{color:var(--kbq-navbar-item-default-content-text)}.kbq-navbar-item>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-default-content-icon-left)!important}.kbq-navbar-item.kbq-hovered:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after,.kbq-navbar-item:hover:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-hover-content-background)}.kbq-navbar-item.kbq-hovered:not(.kbq-disabled) .kbq-navbar-title,.kbq-navbar-item:hover:not(.kbq-disabled) .kbq-navbar-title{color:var(--kbq-navbar-item-states-hover-content-text)}.kbq-navbar-item.kbq-hovered:not(.kbq-disabled)>.kbq-icon.kbq-empty,.kbq-navbar-item:hover:not(.kbq-disabled)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-hover-content-icon-left)!important}.kbq-navbar-item.cdk-focused.cdk-keyboard-focused{outline:none}.kbq-navbar-item.cdk-focused.cdk-keyboard-focused:after{display:block;box-shadow:inset 0 0 0 2px var(--kbq-states-line-focus-theme)}.kbq-navbar-item:active:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after,.kbq-navbar-item.kbq-active:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-selected-content-background)}.kbq-navbar-item:active:not(.kbq-disabled) .kbq-navbar-title,.kbq-navbar-item.kbq-active:not(.kbq-disabled) .kbq-navbar-title{color:var(--kbq-navbar-item-states-selected-content-text)}.kbq-navbar-item:active:not(.kbq-disabled)>.kbq-icon.kbq-empty,.kbq-navbar-item.kbq-active:not(.kbq-disabled)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-selected-content-icon-left)!important}.kbq-navbar-item.kbq-navbar-focusable-item{outline:none}.kbq-navbar-item.kbq-disabled:not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-disabled-content-background)}.kbq-navbar-item.kbq-disabled .kbq-navbar-title{color:var(--kbq-navbar-item-states-disabled-content-text)}.kbq-navbar-item.kbq-disabled>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-disabled-content-icon-left)!important}.kbq-navbar-item.kbq-disabled{pointer-events:none;cursor:default}.kbq-navbar-divider{background:var(--kbq-line-contrast-less)}.kbq-navbar-title{font-size:var(--kbq-typography-text-normal-medium-font-size);font-style:var(--kbq-typography-text-normal-medium-font-style);font-weight:var(--kbq-typography-text-normal-medium-font-weight);line-height:var(--kbq-typography-text-normal-medium-line-height);font-family:var(--kbq-typography-text-normal-medium-font-family);text-transform:var(--kbq-typography-text-normal-medium-text-transform);font-feature-settings:var(--kbq-typography-text-normal-medium-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-medium-letter-spacing)}\n", ".kbq-truncate-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.kbq-no-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.kbq-navbar-item.kbq-vertical{height:41px}.kbq-navbar-item.kbq-vertical .kbq-navbar-item__container{gap:var(--kbq-size-m)}.kbq-navbar-item.kbq-vertical{padding-right:var(--kbq-size-xl);padding-left:var(--kbq-size-xl)}.kbq-navbar-item.kbq-vertical:after{top:0;right:var(--kbq-size-s);bottom:1px;left:var(--kbq-size-s)}.kbq-navbar-item.kbq-vertical.kbq-navbar-bento{display:flex;justify-content:start;align-items:center;height:var(--kbq-size-5xl);padding-top:var(--kbq-size-s)}.kbq-navbar-item.kbq-vertical.kbq-navbar-bento:after{top:var(--kbq-size-s);bottom:0}.kbq-navbar-item.kbq-vertical.kbq-navbar-bento+.kbq-navbar-brand.kbq-vertical{padding:var(--kbq-size-xxs) var(--kbq-size-m) var(--kbq-size-m)}.kbq-navbar-item.kbq-vertical.kbq-navbar-bento+.kbq-navbar-brand.kbq-vertical:after{top:0}.kbq-navbar-item.kbq-vertical.kbq-expanded{align-items:center;gap:var(--kbq-size-m)}.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-item_has-nested{align-items:center;padding:0 var(--kbq-size-m)}.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento .kbq-navbar-item__title{margin-left:-8px;opacity:0;transition:opacity .15s ease-out,margin-left .15s ease-out}.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento:hover .kbq-navbar-item__title,.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento.cdk-keyboard-focused .kbq-navbar-item__title,.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento.kbq-active .kbq-navbar-item__title,.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento.kbq-pressed .kbq-navbar-item__title{margin-left:0;opacity:1}.kbq-navbar-item.kbq-vertical.kbq-collapsed{width:var(--kbq-size-6xl);justify-content:center}.kbq-navbar-item.kbq-vertical.kbq-collapsed .kbq-badge{position:absolute;z-index:1;top:calc(-1 * var(--kbq-size-3xs));right:var(--kbq-size-xs)}.kbq-navbar-item.kbq-vertical.kbq-collapsed .kbq-navbar-item__container{display:none}.kbq-navbar-item.kbq-vertical>.kbq-icon{display:flex;justify-content:center;align-items:center}button.kbq-navbar-item.kbq-vertical{width:100%}.kbq-navbar-item.kbq-horizontal{position:relative;flex-direction:row;box-sizing:border-box;outline:none;-webkit-tap-highlight-color:transparent;min-height:var(--kbq-size-3xl);min-width:var(--kbq-size-3xl);margin:var(--kbq-size-s);justify-content:center}.kbq-navbar-item.kbq-horizontal:before{top:calc(-1 * var(--kbq-size-s));left:calc(-1 * var(--kbq-size-s));right:calc(-1 * var(--kbq-size-s));bottom:calc(-1 * var(--kbq-size-s))}.kbq-navbar-item.kbq-horizontal:after{inset:0}.kbq-navbar-item.kbq-horizontal .kbq-navbar-item__title{padding-left:var(--kbq-size-xxs);padding-right:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal .kbq-navbar-item__arrow-icon{padding-left:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_with-title:not(.kbq-navbar-item_collapsed){margin-left:0;margin-right:0;padding-right:var(--kbq-size-m);padding-left:var(--kbq-size-m)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_with-title:not(.kbq-navbar-item_collapsed):before{left:0;right:0}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_with-title:not(.kbq-navbar-item_collapsed)>.kbq-icon{align-self:center;padding-right:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-bento{justify-content:center;margin-right:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-bento:before{right:calc(-1 * var(--kbq-size-xxs))}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_collapsed{justify-content:center;padding:var(--kbq-size-s)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_collapsed .kbq-navbar-item__container{display:none}.kbq-navbar-item.kbq-horizontal .kbq-badge{position:absolute;z-index:1;top:-2px;right:-2px}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_has-nested{margin-left:var(--kbq-size-m);margin-right:var(--kbq-size-m)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_has-nested:before{left:calc(-1 * var(--kbq-size-m));right:calc(-1 * var(--kbq-size-m))}.kbq-navbar-item{box-sizing:border-box;position:relative;display:flex;align-items:center;border-radius:var(--kbq-navbar-item-size-content-border-radius)}.kbq-navbar-item .kbq-icon{min-width:var(--kbq-size-l);min-height:var(--kbq-size-l)}.kbq-navbar-item .kbq-badge-filled.kbq-badge_fade-contrast{background:linear-gradient(var(--kbq-background-contrast-fade),var(--kbq-background-contrast-fade)),var(--kbq-background-bg-tertiary)}.kbq-navbar-item .kbq-button-icon{position:absolute;padding-left:var(--kbq-size-xs);padding-right:var(--kbq-size-xs);top:50%;transform:translateY(-50%)}.kbq-navbar-item:before{position:absolute;content:\"\"}.kbq-navbar-item:after{position:absolute;content:\"\";display:none;border-radius:var(--kbq-navbar-item-size-content-border-radius)}.kbq-navbar-title{display:inline-block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.kbq-navbar-item__title{display:flex;flex-direction:column;align-self:center;min-width:0}.kbq-navbar-item__container{display:flex;flex-direction:row;flex:1 1 auto;justify-content:space-between;min-width:0}.kbq-navbar-item__container .kbq-icon{align-self:center}.kbq-navbar-item.kbq-navbar-item_has-nested .kbq-button{flex:1}.kbq-navbar-item.kbq-navbar-item_has-nested .kbq-button .kbq-button-wrapper{justify-content:center}.kbq-navbar-item.kbq-navbar-item_has-nested .kbq-button .kbq-button-wrapper .kbq-icon.kbq-icon_left{margin-left:unset}.kbq-navbar-item.kbq-navbar-item_has-nested .kbq-button .kbq-button-wrapper .kbq-icon.kbq-icon_right{margin-right:unset}a.kbq-navbar-item,a.kbq-navbar-title{text-decoration:none}.kbq-navbar-item [kbq-button],.kbq-navbar-brand [kbq-button],.kbq-navbar-toggle [kbq-button]{z-index:1}\n", "button.kbq-navbar-item,button.kbq-navbar-brand{background:transparent;border:none}.kbq-navbar-logo{display:flex}.kbq-navbar-brand{position:relative;display:flex;border-radius:var(--kbq-size-s)}.kbq-navbar-brand:after{position:absolute;content:\"\";display:none;border-radius:var(--kbq-navbar-item-size-content-border-radius)}.kbq-navbar-brand:not(.kbq-disabled) .kbq-navbar-title{cursor:pointer}a.kbq-navbar-brand{text-decoration:none}.kbq-navbar-brand.kbq-horizontal{padding:var(--kbq-size-s) var(--kbq-size-xs) var(--kbq-size-s) var(--kbq-size-xxs);align-items:center;gap:var(--kbq-size-s)}.kbq-navbar-brand.kbq-horizontal:after{top:var(--kbq-size-xxs);right:var(--kbq-size-xxs);bottom:var(--kbq-size-xxs);left:0}.kbq-navbar-brand.kbq-horizontal .kbq-navbar-title{box-sizing:content-box;max-width:154px;padding-right:var(--kbq-size-m)}.kbq-navbar-brand.kbq-vertical{flex-direction:row;align-items:center;padding:var(--kbq-size-m)}.kbq-navbar-brand.kbq-vertical:after{top:var(--kbq-size-s);right:var(--kbq-size-s);bottom:var(--kbq-size-s);left:var(--kbq-size-s)}.kbq-navbar-brand.kbq-vertical .kbq-navbar-logo{align-items:center}.kbq-navbar-brand.kbq-vertical .kbq-navbar-title{display:block;align-items:center;padding-left:var(--kbq-size-s)}.kbq-navbar-brand.kbq-vertical.kbq-expanded .kbq-navbar-title{max-width:200px}.kbq-navbar-brand.kbq-vertical.kbq-collapsed .kbq-navbar-title{display:none!important}.kbq-navbar-brand.kbq-navbar-brand_long-title .kbq-navbar-title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;white-space:normal}.kbq-navbar-brand:not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-default-content-background)}.kbq-navbar-brand .kbq-navbar-title{color:var(--kbq-navbar-item-default-content-text)}.kbq-navbar-brand>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-default-content-icon-left)!important}.kbq-navbar-brand.kbq-disabled{cursor:default}.kbq-navbar-brand.kbq-navbar-brand_link:not(.kbq-disabled){cursor:pointer}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-hover-content-background)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled) .kbq-navbar-title{color:var(--kbq-navbar-item-states-hover-content-text)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-hover-content-icon-left)!important}.kbq-navbar-brand.kbq-navbar-brand_link.cdk-focused.cdk-keyboard-focused:not(.kbq-disabled){outline:none}.kbq-navbar-brand.kbq-navbar-brand_link.cdk-focused.cdk-keyboard-focused:not(.kbq-disabled):after{display:block;box-shadow:inset 0 0 0 2px var(--kbq-states-line-focus-theme)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand):not(.kbq-navbar-item_has-nested):after,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-selected-content-background)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-title,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-title{color:var(--kbq-navbar-item-states-selected-content-text)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand)>.kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-selected-content-icon-left)!important}.kbq-navbar-brand.kbq-navbar-brand_link.kbq-vertical:hover:not(.kbq-disabled) .kbq-navbar-logo{transform:scale(1.06)}.kbq-navbar-brand.kbq-navbar-brand_link.kbq-horizontal:hover:not(.kbq-disabled) .kbq-navbar-logo{z-index:1}.kbq-navbar-brand.kbq-navbar-focusable-item{outline:none}.kbq-navbar-brand .kbq-navbar-title{font-size:var(--kbq-typography-navbar-title-font-size);font-style:var(--kbq-typography-navbar-title-font-style);font-weight:var(--kbq-typography-navbar-title-font-weight);line-height:var(--kbq-typography-navbar-title-line-height);font-family:var(--kbq-typography-navbar-title-font-family);text-transform:var(--kbq-typography-navbar-title-text-transform);font-feature-settings:var(--kbq-typography-navbar-title-font-feature-settings);letter-spacing:var(--kbq-typography-navbar-title-letter-spacing)}.kbq-navbar-brand.kbq-navbar-brand_long-title .kbq-navbar-title{font-size:var(--kbq-typography-text-normal-strong-font-size);font-style:var(--kbq-typography-text-normal-strong-font-style);font-weight:var(--kbq-typography-text-normal-strong-font-weight);line-height:var(--kbq-typography-text-normal-strong-line-height);font-family:var(--kbq-typography-text-normal-strong-font-family);text-transform:var(--kbq-typography-text-normal-strong-text-transform);font-feature-settings:var(--kbq-typography-text-normal-strong-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-strong-letter-spacing);line-height:16px}\n", ".kbq-navbar-divider{display:block}.kbq-navbar-divider.kbq-vertical{height:1px;margin:var(--kbq-size-xs) var(--kbq-size-l)}.kbq-navbar-divider.kbq-horizontal{width:1px;height:12px;margin-left:var(--kbq-size-m);margin-right:var(--kbq-size-m)}\n", ".kbq-navbar,.kbq-vertical-navbar{--kbq-navbar-item-size-content-border-radius: var(--kbq-size-border-radius);--kbq-navbar-background: var(--kbq-background-bg);--kbq-navbar-vertical-background: var(--kbq-background-bg-tertiary);--kbq-navbar-border: var(--kbq-line-contrast-less);--kbq-navbar-item-default-content-text: var(--kbq-foreground-contrast);--kbq-navbar-item-default-content-background: transparent;--kbq-navbar-item-default-content-icon-left: var(--kbq-icon-contrast);--kbq-navbar-item-default-content-icon-right: var(--kbq-icon-contrast);--kbq-navbar-item-states-hover-content-text: var(--kbq-foreground-contrast);--kbq-navbar-item-states-hover-content-background: var(--kbq-states-background-transparent-hover);--kbq-navbar-item-states-hover-content-icon-left: var(--kbq-states-icon-contrast-hover);--kbq-navbar-item-states-hover-content-icon-right: var(--kbq-states-icon-contrast-hover);--kbq-navbar-item-states-selected-content-text: var(--kbq-foreground-contrast);--kbq-navbar-item-states-selected-content-background: var(--kbq-states-background-transparent-active);--kbq-navbar-item-states-selected-content-icon-left: var(--kbq-states-icon-contrast-active);--kbq-navbar-item-states-selected-content-icon-right: var(--kbq-states-icon-contrast-active);--kbq-navbar-item-states-selected-hover-content-text: var(--kbq-foreground-contrast);--kbq-navbar-item-states-selected-hover-content-background: var(--kbq-states-background-transparent-hover);--kbq-navbar-item-states-selected-hover-content-icon-left: var(--kbq-states-icon-contrast-hover);--kbq-navbar-item-states-selected-hover-content-icon-right: var(--kbq-states-icon-contrast-hover);--kbq-navbar-item-states-disabled-content-text: var(--kbq-states-foreground-disabled);--kbq-navbar-item-states-disabled-content-background: transparent;--kbq-navbar-item-states-disabled-content-icon-left: var(--kbq-states-icon-disabled);--kbq-navbar-item-states-disabled-content-icon-right: var(--kbq-states-icon-disabled)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1178
+ `, isInline: true, styles: ["button.kbq-navbar-item,button.kbq-navbar-brand{background:transparent;border:none}.kbq-navbar{z-index:var(--kbq-navbar-z-index);display:flex;flex-direction:row;justify-content:space-between;align-items:center;position:relative}.kbq-navbar-container{display:flex;flex-shrink:0;flex-direction:row;justify-content:space-between;align-items:center;position:relative}.kbq-navbar .kbq-navbar-container+.kbq-navbar-container{margin-left:var(--kbq-size-xxl)}.kbq-navbar{background-color:var(--kbq-navbar-background)}.kbq-vertical-navbar .kbq-vertical-navbar__container{background-color:var(--kbq-navbar-vertical-background);border-right:1px solid var(--kbq-navbar-border)}.kbq-navbar-item{cursor:pointer}.kbq-navbar-item:not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-default-content-background)}.kbq-navbar-item .kbq-navbar-title{color:var(--kbq-navbar-item-default-content-text)}.kbq-navbar-item>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-default-content-icon-left)}.kbq-navbar-item .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-item .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-default-content-icon-right)}.kbq-navbar-item.kbq-hovered:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after,.kbq-navbar-item:hover:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-hover-content-background)}.kbq-navbar-item.kbq-hovered:not(.kbq-disabled) .kbq-navbar-title,.kbq-navbar-item:hover:not(.kbq-disabled) .kbq-navbar-title{color:var(--kbq-navbar-item-states-hover-content-text)}.kbq-navbar-item.kbq-hovered:not(.kbq-disabled)>.kbq-icon.kbq-empty,.kbq-navbar-item:hover:not(.kbq-disabled)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-hover-content-icon-left)}.kbq-navbar-item.kbq-hovered:not(.kbq-disabled) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-item.kbq-hovered:not(.kbq-disabled) .kbq-navbar-item-suffix .kbq-icon.kbq-empty,.kbq-navbar-item:hover:not(.kbq-disabled) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-item:hover:not(.kbq-disabled) .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-hover-content-icon-right)}.kbq-navbar-item.cdk-focused.cdk-keyboard-focused{outline:none}.kbq-navbar-item.cdk-focused.cdk-keyboard-focused:after{display:block;box-shadow:inset 0 0 0 2px var(--kbq-states-line-focus-theme)}.kbq-navbar-item:active:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after,.kbq-navbar-item.kbq-active:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-selected-content-background)}.kbq-navbar-item:active:not(.kbq-disabled) .kbq-navbar-title,.kbq-navbar-item.kbq-active:not(.kbq-disabled) .kbq-navbar-title{color:var(--kbq-navbar-item-states-selected-content-text)}.kbq-navbar-item:active:not(.kbq-disabled)>.kbq-icon.kbq-empty,.kbq-navbar-item.kbq-active:not(.kbq-disabled)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-selected-content-icon-left)}.kbq-navbar-item:active:not(.kbq-disabled) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-item:active:not(.kbq-disabled) .kbq-navbar-item-suffix .kbq-icon.kbq-empty,.kbq-navbar-item.kbq-active:not(.kbq-disabled) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-item.kbq-active:not(.kbq-disabled) .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-selected-content-icon-right)}.kbq-navbar-item.kbq-navbar-focusable-item{outline:none}.kbq-navbar-item.kbq-disabled:not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-disabled-content-background)}.kbq-navbar-item.kbq-disabled .kbq-navbar-title{color:var(--kbq-navbar-item-states-disabled-content-text)}.kbq-navbar-item.kbq-disabled>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-disabled-content-icon-left)}.kbq-navbar-item.kbq-disabled .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-item.kbq-disabled .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-disabled-content-icon-right)}.kbq-navbar-item.kbq-disabled{pointer-events:none;cursor:default}.kbq-navbar-divider{background:var(--kbq-line-contrast-less)}.kbq-navbar-title{font-size:var(--kbq-typography-text-normal-medium-font-size);font-style:var(--kbq-typography-text-normal-medium-font-style);font-weight:var(--kbq-typography-text-normal-medium-font-weight);line-height:var(--kbq-typography-text-normal-medium-line-height);font-family:var(--kbq-typography-text-normal-medium-font-family);text-transform:var(--kbq-typography-text-normal-medium-text-transform);font-feature-settings:var(--kbq-typography-text-normal-medium-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-medium-letter-spacing)}\n", "@charset \"UTF-8\";.kbq-truncate-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.kbq-navbar-item.kbq-vertical{height:var(--kbq-navbar-item-vertical-size-height)}.kbq-navbar-item.kbq-vertical .kbq-navbar-item__container{gap:var(--kbq-size-m)}.kbq-navbar-item.kbq-vertical .kbq-navbar-item-suffix{margin-left:auto}.kbq-navbar-item.kbq-vertical{padding-right:var(--kbq-size-xl);padding-left:var(--kbq-size-xl)}.kbq-navbar-item.kbq-vertical:after{top:0;right:var(--kbq-size-s);bottom:1px;left:var(--kbq-size-s)}.kbq-navbar-item.kbq-vertical.kbq-navbar-bento{display:flex;justify-content:start;align-items:center;height:var(--kbq-size-5xl);padding-top:var(--kbq-size-s)}.kbq-navbar-item.kbq-vertical.kbq-navbar-bento:after{top:var(--kbq-size-s);bottom:0}.kbq-navbar-item.kbq-vertical.kbq-navbar-bento+.kbq-navbar-brand.kbq-vertical{padding:var(--kbq-size-xxs) var(--kbq-size-m) var(--kbq-size-m)}.kbq-navbar-item.kbq-vertical.kbq-navbar-bento+.kbq-navbar-brand.kbq-vertical:after{top:0}.kbq-navbar-item.kbq-vertical.kbq-expanded{align-items:center;gap:var(--kbq-size-m)}.kbq-navbar-item.kbq-vertical.kbq-expanded .kbq-badge{position:static}.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-item_has-nested{align-items:center;padding:0 var(--kbq-size-m)}.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento .kbq-navbar-item__title{margin-left:calc(-1 * var(--kbq-size-s));opacity:0;transition:opacity .15s ease-out,margin-left .15s ease-out}.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento .kbq-navbar-item__title.kbq-animations-disabled{animation:none;transition:none}@media(prefers-reduced-motion:reduce){.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento .kbq-navbar-item__title{animation:none;transition:none}}.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento:hover .kbq-navbar-item__title,.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento.cdk-keyboard-focused .kbq-navbar-item__title,.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento.kbq-active .kbq-navbar-item__title,.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento.kbq-pressed .kbq-navbar-item__title{margin-left:0;opacity:1}.kbq-navbar-item.kbq-vertical.kbq-collapsed{width:var(--kbq-size-6xl);justify-content:center}.kbq-navbar-item.kbq-vertical.kbq-collapsed .kbq-badge{top:calc(-1 * var(--kbq-size-3xs));right:var(--kbq-size-xs)}.kbq-navbar-item.kbq-vertical.kbq-collapsed .kbq-navbar-item__container{display:none}.kbq-navbar-item.kbq-vertical>.kbq-icon{display:flex;justify-content:center;align-items:center}button.kbq-navbar-item.kbq-vertical{width:100%}.kbq-navbar-item.kbq-horizontal{position:relative;flex-direction:row;box-sizing:border-box;outline:none;-webkit-tap-highlight-color:transparent;min-height:var(--kbq-size-3xl);min-width:var(--kbq-size-3xl);margin:var(--kbq-size-s);justify-content:center}.kbq-navbar-item.kbq-horizontal:before{top:calc(-1 * var(--kbq-size-s));left:calc(-1 * var(--kbq-size-s));right:calc(-1 * var(--kbq-size-s));bottom:calc(-1 * var(--kbq-size-s))}.kbq-navbar-item.kbq-horizontal:after{inset:0}.kbq-navbar-item.kbq-horizontal .kbq-navbar-item__title{padding-left:var(--kbq-size-xxs);padding-right:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal .kbq-navbar-item__arrow-icon{padding-left:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal .kbq-navbar-item-suffix{margin-left:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_with-title:not(.kbq-navbar-item_collapsed){margin-left:0;margin-right:0;padding-right:var(--kbq-size-m);padding-left:var(--kbq-size-m)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_with-title:not(.kbq-navbar-item_collapsed):before{left:0;right:0}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_with-title:not(.kbq-navbar-item_collapsed)>.kbq-icon{align-self:center;padding-right:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-bento{justify-content:center;margin-right:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-bento:before{right:calc(-1 * var(--kbq-size-xxs))}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_collapsed{justify-content:center;padding:var(--kbq-size-s)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_collapsed .kbq-navbar-item__container{display:none}.kbq-navbar-item.kbq-horizontal .kbq-badge{top:calc(-1 * var(--kbq-size-3xs));right:calc(-1 * var(--kbq-size-3xs))}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_has-nested{margin-left:var(--kbq-size-m);margin-right:var(--kbq-size-m)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_has-nested:before{left:calc(-1 * var(--kbq-size-m));right:calc(-1 * var(--kbq-size-m))}.kbq-navbar-item{box-sizing:border-box;position:relative;display:flex;align-items:center;border-radius:var(--kbq-navbar-item-size-content-border-radius)}@supports (corner-shape: squircle){.kbq-navbar-item{corner-shape:squircle;border-radius:clamp(var(--kbq-navbar-item-size-content-border-radius) * 1.85,var(--kbq-navbar-item-size-content-border-radius) * 2.3 - 3.6px,var(--kbq-navbar-item-size-content-border-radius) * 2)}}.kbq-navbar-item .kbq-icon{min-width:var(--kbq-size-l);min-height:var(--kbq-size-l)}.kbq-navbar-item .kbq-badge-filled.kbq-badge_fade-contrast{background:linear-gradient(var(--kbq-background-contrast-fade),var(--kbq-background-contrast-fade)),var(--kbq-background-bg-tertiary)}.kbq-navbar-item .kbq-button-icon{position:absolute;padding-left:var(--kbq-size-xs);padding-right:var(--kbq-size-xs);top:50%;transform:translateY(-50%)}.kbq-navbar-item:before{position:absolute;content:\"\"}.kbq-navbar-item:after{position:absolute;content:\"\";display:none;border-radius:var(--kbq-navbar-item-size-content-border-radius)}@supports (corner-shape: squircle){.kbq-navbar-item:after{corner-shape:squircle;border-radius:clamp(var(--kbq-navbar-item-size-content-border-radius) * 1.85,var(--kbq-navbar-item-size-content-border-radius) * 2.3 - 3.6px,var(--kbq-navbar-item-size-content-border-radius) * 2)}}.kbq-navbar-item .kbq-badge{position:absolute;z-index:1}.kbq-navbar-title{display:inline-block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.kbq-navbar-item__title{display:flex;flex-direction:column;align-self:center;min-width:0}.kbq-navbar-item__container{display:flex;flex-direction:row;flex:1 1 auto;justify-content:space-between;min-width:0}.kbq-navbar-item__container .kbq-icon{align-self:center}.kbq-navbar-item.kbq-navbar-item_has-nested .kbq-button{flex:1}.kbq-navbar-item.kbq-navbar-item_has-nested .kbq-button .kbq-button-wrapper{justify-content:center}.kbq-navbar-item.kbq-navbar-item_has-nested .kbq-button .kbq-button-wrapper .kbq-icon.kbq-icon_left{margin-left:unset}.kbq-navbar-item.kbq-navbar-item_has-nested .kbq-button .kbq-button-wrapper .kbq-icon.kbq-icon_right{margin-right:unset}a.kbq-navbar-item,a.kbq-navbar-title{text-decoration:none}.kbq-navbar-item [kbq-button],.kbq-navbar-brand [kbq-button],.kbq-navbar-toggle [kbq-button]{z-index:1}\n", "button.kbq-navbar-item,button.kbq-navbar-brand{background:transparent;border:none}.kbq-navbar-logo{display:flex}.kbq-navbar-brand{position:relative;display:flex;border-radius:var(--kbq-size-s)}@supports (corner-shape: squircle){.kbq-navbar-brand{corner-shape:squircle;border-radius:clamp(var(--kbq-size-s) * 1.85,var(--kbq-size-s) * 2.3 - 3.6px,var(--kbq-size-s) * 2)}}.kbq-navbar-brand:after{position:absolute;content:\"\";display:none;border-radius:var(--kbq-navbar-item-size-content-border-radius)}@supports (corner-shape: squircle){.kbq-navbar-brand:after{corner-shape:squircle;border-radius:clamp(var(--kbq-navbar-item-size-content-border-radius) * 1.85,var(--kbq-navbar-item-size-content-border-radius) * 2.3 - 3.6px,var(--kbq-navbar-item-size-content-border-radius) * 2)}}.kbq-navbar-brand:not(.kbq-disabled) .kbq-navbar-title{cursor:pointer}a.kbq-navbar-brand{text-decoration:none}.kbq-navbar-brand.kbq-horizontal{padding:var(--kbq-size-s) var(--kbq-size-xs) var(--kbq-size-s) var(--kbq-size-xxs);align-items:center;gap:var(--kbq-size-s)}.kbq-navbar-brand.kbq-horizontal:after{top:var(--kbq-size-xxs);right:var(--kbq-size-xxs);bottom:var(--kbq-size-xxs);left:0}.kbq-navbar-brand.kbq-horizontal .kbq-navbar-title{box-sizing:content-box;max-width:154px;padding-right:var(--kbq-size-m)}.kbq-navbar-brand.kbq-vertical{flex-direction:row;align-items:center;padding:var(--kbq-size-m)}.kbq-navbar-brand.kbq-vertical:after{top:var(--kbq-size-s);right:var(--kbq-size-s);bottom:var(--kbq-size-s);left:var(--kbq-size-s)}.kbq-navbar-brand.kbq-vertical .kbq-navbar-logo{align-items:center}.kbq-navbar-brand.kbq-vertical .kbq-navbar-title{display:block;align-items:center;padding-left:var(--kbq-size-s)}.kbq-navbar-brand.kbq-vertical.kbq-expanded .kbq-navbar-title{max-width:var(--kbq-navbar-brand-vertical-size-title-max-width)}.kbq-navbar-brand.kbq-vertical.kbq-collapsed .kbq-navbar-title{display:none}.kbq-navbar-brand.kbq-navbar-brand_long-title .kbq-navbar-title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;white-space:normal}.kbq-navbar-brand:not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-default-content-background)}.kbq-navbar-brand .kbq-navbar-title{color:var(--kbq-navbar-item-default-content-text)}.kbq-navbar-brand>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-default-content-icon-left)}.kbq-navbar-brand .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-brand .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-default-content-icon-right)}.kbq-navbar-brand.kbq-disabled{cursor:default}.kbq-navbar-brand.kbq-navbar-brand_link:not(.kbq-disabled){cursor:pointer}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-hover-content-background)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled) .kbq-navbar-title{color:var(--kbq-navbar-item-states-hover-content-text)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-hover-content-icon-left)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled) .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-hover-content-icon-right)}.kbq-navbar-brand.kbq-navbar-brand_link.cdk-focused.cdk-keyboard-focused:not(.kbq-disabled){outline:none}.kbq-navbar-brand.kbq-navbar-brand_link.cdk-focused.cdk-keyboard-focused:not(.kbq-disabled):after{display:block;box-shadow:inset 0 0 0 2px var(--kbq-states-line-focus-theme)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand):not(.kbq-navbar-item_has-nested):after,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-selected-content-background)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-title,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-title{color:var(--kbq-navbar-item-states-selected-content-text)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand)>.kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-selected-content-icon-left)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-item-suffix .kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-selected-content-icon-right)}.kbq-navbar-brand.kbq-navbar-brand_link.kbq-vertical:hover:not(.kbq-disabled) .kbq-navbar-logo{transform:scale(1.06)}.kbq-navbar-brand.kbq-navbar-brand_link.kbq-horizontal:hover:not(.kbq-disabled) .kbq-navbar-logo{z-index:1}.kbq-navbar-brand.kbq-navbar-focusable-item{outline:none}.kbq-navbar-brand .kbq-navbar-title{font-size:var(--kbq-typography-navbar-title-font-size);font-style:var(--kbq-typography-navbar-title-font-style);font-weight:var(--kbq-typography-navbar-title-font-weight);line-height:var(--kbq-typography-navbar-title-line-height);font-family:var(--kbq-typography-navbar-title-font-family);text-transform:var(--kbq-typography-navbar-title-text-transform);font-feature-settings:var(--kbq-typography-navbar-title-font-feature-settings);letter-spacing:var(--kbq-typography-navbar-title-letter-spacing)}.kbq-navbar-brand.kbq-navbar-brand_long-title .kbq-navbar-title{font-size:var(--kbq-typography-text-normal-strong-font-size);font-style:var(--kbq-typography-text-normal-strong-font-style);font-weight:var(--kbq-typography-text-normal-strong-font-weight);line-height:var(--kbq-typography-text-normal-strong-line-height);font-family:var(--kbq-typography-text-normal-strong-font-family);text-transform:var(--kbq-typography-text-normal-strong-text-transform);font-feature-settings:var(--kbq-typography-text-normal-strong-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-strong-letter-spacing);line-height:16px}\n", ".kbq-navbar-divider{display:block}.kbq-navbar-divider.kbq-vertical{height:1px;margin:var(--kbq-size-xs) var(--kbq-size-l)}.kbq-navbar-divider.kbq-horizontal{width:1px;height:var(--kbq-size-m);margin-left:var(--kbq-size-m);margin-right:var(--kbq-size-m)}\n", ".kbq-navbar,.kbq-vertical-navbar{--kbq-navbar-item-size-content-border-radius: var(--kbq-size-border-radius);--kbq-navbar-item-vertical-size-height: 41px;--kbq-navbar-vertical-size-expanded-width: 240px;--kbq-navbar-brand-vertical-size-title-max-width: 200px;--kbq-navbar-toggle-size-circle: 28px;--kbq-navbar-z-index: 990;--kbq-navbar-vertical-open-over-z-index: 989;--kbq-navbar-toggle-z-index: 991;--kbq-navbar-background: var(--kbq-background-bg);--kbq-navbar-vertical-background: var(--kbq-background-bg-tertiary);--kbq-navbar-border: var(--kbq-line-contrast-less);--kbq-navbar-item-default-content-text: var(--kbq-foreground-contrast);--kbq-navbar-item-default-content-background: transparent;--kbq-navbar-item-default-content-icon-left: var(--kbq-icon-contrast);--kbq-navbar-item-default-content-icon-right: var(--kbq-icon-contrast);--kbq-navbar-item-states-hover-content-text: var(--kbq-foreground-contrast);--kbq-navbar-item-states-hover-content-background: var(--kbq-states-background-transparent-hover);--kbq-navbar-item-states-hover-content-icon-left: var(--kbq-states-icon-contrast-hover);--kbq-navbar-item-states-hover-content-icon-right: var(--kbq-states-icon-contrast-hover);--kbq-navbar-item-states-selected-content-text: var(--kbq-foreground-contrast);--kbq-navbar-item-states-selected-content-background: var(--kbq-states-background-transparent-active);--kbq-navbar-item-states-selected-content-icon-left: var(--kbq-states-icon-contrast-active);--kbq-navbar-item-states-selected-content-icon-right: var(--kbq-states-icon-contrast-active);--kbq-navbar-item-states-selected-hover-content-text: var(--kbq-foreground-contrast);--kbq-navbar-item-states-selected-hover-content-background: var(--kbq-states-background-transparent-hover);--kbq-navbar-item-states-selected-hover-content-icon-left: var(--kbq-states-icon-contrast-hover);--kbq-navbar-item-states-selected-hover-content-icon-right: var(--kbq-states-icon-contrast-hover);--kbq-navbar-item-states-disabled-content-text: var(--kbq-states-foreground-disabled);--kbq-navbar-item-states-disabled-content-background: transparent;--kbq-navbar-item-states-disabled-content-icon-left: var(--kbq-states-icon-disabled);--kbq-navbar-item-states-disabled-content-icon-right: var(--kbq-states-icon-disabled)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
937
1179
  }
938
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqNavbar, decorators: [{
1180
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqNavbar, decorators: [{
939
1181
  type: Component,
940
1182
  args: [{ selector: 'kbq-navbar', template: `
941
1183
  <ng-content select="[kbq-navbar-container], kbq-navbar-container" />
942
- `, providers: [
943
- { provide: KBQ_DROPDOWN_HOST, useExisting: KbqNavbar }
944
- ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
1184
+ `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
945
1185
  class: 'kbq-navbar',
946
- '[attr.tabindex]': 'tabIndex',
1186
+ role: 'navigation',
1187
+ '[attr.aria-label]': 'ariaLabel()',
1188
+ '[attr.tabindex]': 'renderedTabIndex()',
947
1189
  '(focus)': 'focus()',
948
1190
  '(blur)': 'blur()',
949
- '(keydown)': 'onKeyDown($event)',
950
- '(window:resize)': 'resizeStream.next($event)'
951
- }, styles: ["button.kbq-navbar-item,button.kbq-navbar-brand{background:transparent;border:none}.kbq-navbar{z-index:1000;display:flex;flex-direction:row;justify-content:space-between;align-items:center;position:relative}.kbq-navbar-container{display:flex;flex-shrink:0;flex-direction:row;justify-content:space-between;align-items:center;position:relative}.kbq-navbar .kbq-navbar-container+.kbq-navbar-container{margin-left:var(--kbq-size-xxl)}.kbq-navbar{background-color:var(--kbq-navbar-background)}.kbq-vertical-navbar .kbq-vertical-navbar__container{background-color:var(--kbq-navbar-vertical-background);border-right:1px solid var(--kbq-navbar-border)}.kbq-navbar-item{cursor:pointer}.kbq-navbar-item:not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-default-content-background)}.kbq-navbar-item .kbq-navbar-title{color:var(--kbq-navbar-item-default-content-text)}.kbq-navbar-item>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-default-content-icon-left)!important}.kbq-navbar-item.kbq-hovered:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after,.kbq-navbar-item:hover:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-hover-content-background)}.kbq-navbar-item.kbq-hovered:not(.kbq-disabled) .kbq-navbar-title,.kbq-navbar-item:hover:not(.kbq-disabled) .kbq-navbar-title{color:var(--kbq-navbar-item-states-hover-content-text)}.kbq-navbar-item.kbq-hovered:not(.kbq-disabled)>.kbq-icon.kbq-empty,.kbq-navbar-item:hover:not(.kbq-disabled)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-hover-content-icon-left)!important}.kbq-navbar-item.cdk-focused.cdk-keyboard-focused{outline:none}.kbq-navbar-item.cdk-focused.cdk-keyboard-focused:after{display:block;box-shadow:inset 0 0 0 2px var(--kbq-states-line-focus-theme)}.kbq-navbar-item:active:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after,.kbq-navbar-item.kbq-active:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-selected-content-background)}.kbq-navbar-item:active:not(.kbq-disabled) .kbq-navbar-title,.kbq-navbar-item.kbq-active:not(.kbq-disabled) .kbq-navbar-title{color:var(--kbq-navbar-item-states-selected-content-text)}.kbq-navbar-item:active:not(.kbq-disabled)>.kbq-icon.kbq-empty,.kbq-navbar-item.kbq-active:not(.kbq-disabled)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-selected-content-icon-left)!important}.kbq-navbar-item.kbq-navbar-focusable-item{outline:none}.kbq-navbar-item.kbq-disabled:not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-disabled-content-background)}.kbq-navbar-item.kbq-disabled .kbq-navbar-title{color:var(--kbq-navbar-item-states-disabled-content-text)}.kbq-navbar-item.kbq-disabled>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-disabled-content-icon-left)!important}.kbq-navbar-item.kbq-disabled{pointer-events:none;cursor:default}.kbq-navbar-divider{background:var(--kbq-line-contrast-less)}.kbq-navbar-title{font-size:var(--kbq-typography-text-normal-medium-font-size);font-style:var(--kbq-typography-text-normal-medium-font-style);font-weight:var(--kbq-typography-text-normal-medium-font-weight);line-height:var(--kbq-typography-text-normal-medium-line-height);font-family:var(--kbq-typography-text-normal-medium-font-family);text-transform:var(--kbq-typography-text-normal-medium-text-transform);font-feature-settings:var(--kbq-typography-text-normal-medium-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-medium-letter-spacing)}\n", ".kbq-truncate-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.kbq-no-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.kbq-navbar-item.kbq-vertical{height:41px}.kbq-navbar-item.kbq-vertical .kbq-navbar-item__container{gap:var(--kbq-size-m)}.kbq-navbar-item.kbq-vertical{padding-right:var(--kbq-size-xl);padding-left:var(--kbq-size-xl)}.kbq-navbar-item.kbq-vertical:after{top:0;right:var(--kbq-size-s);bottom:1px;left:var(--kbq-size-s)}.kbq-navbar-item.kbq-vertical.kbq-navbar-bento{display:flex;justify-content:start;align-items:center;height:var(--kbq-size-5xl);padding-top:var(--kbq-size-s)}.kbq-navbar-item.kbq-vertical.kbq-navbar-bento:after{top:var(--kbq-size-s);bottom:0}.kbq-navbar-item.kbq-vertical.kbq-navbar-bento+.kbq-navbar-brand.kbq-vertical{padding:var(--kbq-size-xxs) var(--kbq-size-m) var(--kbq-size-m)}.kbq-navbar-item.kbq-vertical.kbq-navbar-bento+.kbq-navbar-brand.kbq-vertical:after{top:0}.kbq-navbar-item.kbq-vertical.kbq-expanded{align-items:center;gap:var(--kbq-size-m)}.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-item_has-nested{align-items:center;padding:0 var(--kbq-size-m)}.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento .kbq-navbar-item__title{margin-left:-8px;opacity:0;transition:opacity .15s ease-out,margin-left .15s ease-out}.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento:hover .kbq-navbar-item__title,.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento.cdk-keyboard-focused .kbq-navbar-item__title,.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento.kbq-active .kbq-navbar-item__title,.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento.kbq-pressed .kbq-navbar-item__title{margin-left:0;opacity:1}.kbq-navbar-item.kbq-vertical.kbq-collapsed{width:var(--kbq-size-6xl);justify-content:center}.kbq-navbar-item.kbq-vertical.kbq-collapsed .kbq-badge{position:absolute;z-index:1;top:calc(-1 * var(--kbq-size-3xs));right:var(--kbq-size-xs)}.kbq-navbar-item.kbq-vertical.kbq-collapsed .kbq-navbar-item__container{display:none}.kbq-navbar-item.kbq-vertical>.kbq-icon{display:flex;justify-content:center;align-items:center}button.kbq-navbar-item.kbq-vertical{width:100%}.kbq-navbar-item.kbq-horizontal{position:relative;flex-direction:row;box-sizing:border-box;outline:none;-webkit-tap-highlight-color:transparent;min-height:var(--kbq-size-3xl);min-width:var(--kbq-size-3xl);margin:var(--kbq-size-s);justify-content:center}.kbq-navbar-item.kbq-horizontal:before{top:calc(-1 * var(--kbq-size-s));left:calc(-1 * var(--kbq-size-s));right:calc(-1 * var(--kbq-size-s));bottom:calc(-1 * var(--kbq-size-s))}.kbq-navbar-item.kbq-horizontal:after{inset:0}.kbq-navbar-item.kbq-horizontal .kbq-navbar-item__title{padding-left:var(--kbq-size-xxs);padding-right:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal .kbq-navbar-item__arrow-icon{padding-left:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_with-title:not(.kbq-navbar-item_collapsed){margin-left:0;margin-right:0;padding-right:var(--kbq-size-m);padding-left:var(--kbq-size-m)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_with-title:not(.kbq-navbar-item_collapsed):before{left:0;right:0}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_with-title:not(.kbq-navbar-item_collapsed)>.kbq-icon{align-self:center;padding-right:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-bento{justify-content:center;margin-right:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-bento:before{right:calc(-1 * var(--kbq-size-xxs))}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_collapsed{justify-content:center;padding:var(--kbq-size-s)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_collapsed .kbq-navbar-item__container{display:none}.kbq-navbar-item.kbq-horizontal .kbq-badge{position:absolute;z-index:1;top:-2px;right:-2px}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_has-nested{margin-left:var(--kbq-size-m);margin-right:var(--kbq-size-m)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_has-nested:before{left:calc(-1 * var(--kbq-size-m));right:calc(-1 * var(--kbq-size-m))}.kbq-navbar-item{box-sizing:border-box;position:relative;display:flex;align-items:center;border-radius:var(--kbq-navbar-item-size-content-border-radius)}.kbq-navbar-item .kbq-icon{min-width:var(--kbq-size-l);min-height:var(--kbq-size-l)}.kbq-navbar-item .kbq-badge-filled.kbq-badge_fade-contrast{background:linear-gradient(var(--kbq-background-contrast-fade),var(--kbq-background-contrast-fade)),var(--kbq-background-bg-tertiary)}.kbq-navbar-item .kbq-button-icon{position:absolute;padding-left:var(--kbq-size-xs);padding-right:var(--kbq-size-xs);top:50%;transform:translateY(-50%)}.kbq-navbar-item:before{position:absolute;content:\"\"}.kbq-navbar-item:after{position:absolute;content:\"\";display:none;border-radius:var(--kbq-navbar-item-size-content-border-radius)}.kbq-navbar-title{display:inline-block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.kbq-navbar-item__title{display:flex;flex-direction:column;align-self:center;min-width:0}.kbq-navbar-item__container{display:flex;flex-direction:row;flex:1 1 auto;justify-content:space-between;min-width:0}.kbq-navbar-item__container .kbq-icon{align-self:center}.kbq-navbar-item.kbq-navbar-item_has-nested .kbq-button{flex:1}.kbq-navbar-item.kbq-navbar-item_has-nested .kbq-button .kbq-button-wrapper{justify-content:center}.kbq-navbar-item.kbq-navbar-item_has-nested .kbq-button .kbq-button-wrapper .kbq-icon.kbq-icon_left{margin-left:unset}.kbq-navbar-item.kbq-navbar-item_has-nested .kbq-button .kbq-button-wrapper .kbq-icon.kbq-icon_right{margin-right:unset}a.kbq-navbar-item,a.kbq-navbar-title{text-decoration:none}.kbq-navbar-item [kbq-button],.kbq-navbar-brand [kbq-button],.kbq-navbar-toggle [kbq-button]{z-index:1}\n", "button.kbq-navbar-item,button.kbq-navbar-brand{background:transparent;border:none}.kbq-navbar-logo{display:flex}.kbq-navbar-brand{position:relative;display:flex;border-radius:var(--kbq-size-s)}.kbq-navbar-brand:after{position:absolute;content:\"\";display:none;border-radius:var(--kbq-navbar-item-size-content-border-radius)}.kbq-navbar-brand:not(.kbq-disabled) .kbq-navbar-title{cursor:pointer}a.kbq-navbar-brand{text-decoration:none}.kbq-navbar-brand.kbq-horizontal{padding:var(--kbq-size-s) var(--kbq-size-xs) var(--kbq-size-s) var(--kbq-size-xxs);align-items:center;gap:var(--kbq-size-s)}.kbq-navbar-brand.kbq-horizontal:after{top:var(--kbq-size-xxs);right:var(--kbq-size-xxs);bottom:var(--kbq-size-xxs);left:0}.kbq-navbar-brand.kbq-horizontal .kbq-navbar-title{box-sizing:content-box;max-width:154px;padding-right:var(--kbq-size-m)}.kbq-navbar-brand.kbq-vertical{flex-direction:row;align-items:center;padding:var(--kbq-size-m)}.kbq-navbar-brand.kbq-vertical:after{top:var(--kbq-size-s);right:var(--kbq-size-s);bottom:var(--kbq-size-s);left:var(--kbq-size-s)}.kbq-navbar-brand.kbq-vertical .kbq-navbar-logo{align-items:center}.kbq-navbar-brand.kbq-vertical .kbq-navbar-title{display:block;align-items:center;padding-left:var(--kbq-size-s)}.kbq-navbar-brand.kbq-vertical.kbq-expanded .kbq-navbar-title{max-width:200px}.kbq-navbar-brand.kbq-vertical.kbq-collapsed .kbq-navbar-title{display:none!important}.kbq-navbar-brand.kbq-navbar-brand_long-title .kbq-navbar-title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;white-space:normal}.kbq-navbar-brand:not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-default-content-background)}.kbq-navbar-brand .kbq-navbar-title{color:var(--kbq-navbar-item-default-content-text)}.kbq-navbar-brand>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-default-content-icon-left)!important}.kbq-navbar-brand.kbq-disabled{cursor:default}.kbq-navbar-brand.kbq-navbar-brand_link:not(.kbq-disabled){cursor:pointer}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-hover-content-background)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled) .kbq-navbar-title{color:var(--kbq-navbar-item-states-hover-content-text)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-hover-content-icon-left)!important}.kbq-navbar-brand.kbq-navbar-brand_link.cdk-focused.cdk-keyboard-focused:not(.kbq-disabled){outline:none}.kbq-navbar-brand.kbq-navbar-brand_link.cdk-focused.cdk-keyboard-focused:not(.kbq-disabled):after{display:block;box-shadow:inset 0 0 0 2px var(--kbq-states-line-focus-theme)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand):not(.kbq-navbar-item_has-nested):after,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-selected-content-background)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-title,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-title{color:var(--kbq-navbar-item-states-selected-content-text)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand)>.kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-selected-content-icon-left)!important}.kbq-navbar-brand.kbq-navbar-brand_link.kbq-vertical:hover:not(.kbq-disabled) .kbq-navbar-logo{transform:scale(1.06)}.kbq-navbar-brand.kbq-navbar-brand_link.kbq-horizontal:hover:not(.kbq-disabled) .kbq-navbar-logo{z-index:1}.kbq-navbar-brand.kbq-navbar-focusable-item{outline:none}.kbq-navbar-brand .kbq-navbar-title{font-size:var(--kbq-typography-navbar-title-font-size);font-style:var(--kbq-typography-navbar-title-font-style);font-weight:var(--kbq-typography-navbar-title-font-weight);line-height:var(--kbq-typography-navbar-title-line-height);font-family:var(--kbq-typography-navbar-title-font-family);text-transform:var(--kbq-typography-navbar-title-text-transform);font-feature-settings:var(--kbq-typography-navbar-title-font-feature-settings);letter-spacing:var(--kbq-typography-navbar-title-letter-spacing)}.kbq-navbar-brand.kbq-navbar-brand_long-title .kbq-navbar-title{font-size:var(--kbq-typography-text-normal-strong-font-size);font-style:var(--kbq-typography-text-normal-strong-font-style);font-weight:var(--kbq-typography-text-normal-strong-font-weight);line-height:var(--kbq-typography-text-normal-strong-line-height);font-family:var(--kbq-typography-text-normal-strong-font-family);text-transform:var(--kbq-typography-text-normal-strong-text-transform);font-feature-settings:var(--kbq-typography-text-normal-strong-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-strong-letter-spacing);line-height:16px}\n", ".kbq-navbar-divider{display:block}.kbq-navbar-divider.kbq-vertical{height:1px;margin:var(--kbq-size-xs) var(--kbq-size-l)}.kbq-navbar-divider.kbq-horizontal{width:1px;height:12px;margin-left:var(--kbq-size-m);margin-right:var(--kbq-size-m)}\n", ".kbq-navbar,.kbq-vertical-navbar{--kbq-navbar-item-size-content-border-radius: var(--kbq-size-border-radius);--kbq-navbar-background: var(--kbq-background-bg);--kbq-navbar-vertical-background: var(--kbq-background-bg-tertiary);--kbq-navbar-border: var(--kbq-line-contrast-less);--kbq-navbar-item-default-content-text: var(--kbq-foreground-contrast);--kbq-navbar-item-default-content-background: transparent;--kbq-navbar-item-default-content-icon-left: var(--kbq-icon-contrast);--kbq-navbar-item-default-content-icon-right: var(--kbq-icon-contrast);--kbq-navbar-item-states-hover-content-text: var(--kbq-foreground-contrast);--kbq-navbar-item-states-hover-content-background: var(--kbq-states-background-transparent-hover);--kbq-navbar-item-states-hover-content-icon-left: var(--kbq-states-icon-contrast-hover);--kbq-navbar-item-states-hover-content-icon-right: var(--kbq-states-icon-contrast-hover);--kbq-navbar-item-states-selected-content-text: var(--kbq-foreground-contrast);--kbq-navbar-item-states-selected-content-background: var(--kbq-states-background-transparent-active);--kbq-navbar-item-states-selected-content-icon-left: var(--kbq-states-icon-contrast-active);--kbq-navbar-item-states-selected-content-icon-right: var(--kbq-states-icon-contrast-active);--kbq-navbar-item-states-selected-hover-content-text: var(--kbq-foreground-contrast);--kbq-navbar-item-states-selected-hover-content-background: var(--kbq-states-background-transparent-hover);--kbq-navbar-item-states-selected-hover-content-icon-left: var(--kbq-states-icon-contrast-hover);--kbq-navbar-item-states-selected-hover-content-icon-right: var(--kbq-states-icon-contrast-hover);--kbq-navbar-item-states-disabled-content-text: var(--kbq-states-foreground-disabled);--kbq-navbar-item-states-disabled-content-background: transparent;--kbq-navbar-item-states-disabled-content-icon-left: var(--kbq-states-icon-disabled);--kbq-navbar-item-states-disabled-content-icon-right: var(--kbq-states-icon-disabled)}\n"] }]
1191
+ '(keydown)': 'onKeyDown($event)'
1192
+ }, hostDirectives: [KbqOverlayLayerExclude], styles: ["button.kbq-navbar-item,button.kbq-navbar-brand{background:transparent;border:none}.kbq-navbar{z-index:var(--kbq-navbar-z-index);display:flex;flex-direction:row;justify-content:space-between;align-items:center;position:relative}.kbq-navbar-container{display:flex;flex-shrink:0;flex-direction:row;justify-content:space-between;align-items:center;position:relative}.kbq-navbar .kbq-navbar-container+.kbq-navbar-container{margin-left:var(--kbq-size-xxl)}.kbq-navbar{background-color:var(--kbq-navbar-background)}.kbq-vertical-navbar .kbq-vertical-navbar__container{background-color:var(--kbq-navbar-vertical-background);border-right:1px solid var(--kbq-navbar-border)}.kbq-navbar-item{cursor:pointer}.kbq-navbar-item:not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-default-content-background)}.kbq-navbar-item .kbq-navbar-title{color:var(--kbq-navbar-item-default-content-text)}.kbq-navbar-item>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-default-content-icon-left)}.kbq-navbar-item .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-item .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-default-content-icon-right)}.kbq-navbar-item.kbq-hovered:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after,.kbq-navbar-item:hover:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-hover-content-background)}.kbq-navbar-item.kbq-hovered:not(.kbq-disabled) .kbq-navbar-title,.kbq-navbar-item:hover:not(.kbq-disabled) .kbq-navbar-title{color:var(--kbq-navbar-item-states-hover-content-text)}.kbq-navbar-item.kbq-hovered:not(.kbq-disabled)>.kbq-icon.kbq-empty,.kbq-navbar-item:hover:not(.kbq-disabled)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-hover-content-icon-left)}.kbq-navbar-item.kbq-hovered:not(.kbq-disabled) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-item.kbq-hovered:not(.kbq-disabled) .kbq-navbar-item-suffix .kbq-icon.kbq-empty,.kbq-navbar-item:hover:not(.kbq-disabled) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-item:hover:not(.kbq-disabled) .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-hover-content-icon-right)}.kbq-navbar-item.cdk-focused.cdk-keyboard-focused{outline:none}.kbq-navbar-item.cdk-focused.cdk-keyboard-focused:after{display:block;box-shadow:inset 0 0 0 2px var(--kbq-states-line-focus-theme)}.kbq-navbar-item:active:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after,.kbq-navbar-item.kbq-active:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-selected-content-background)}.kbq-navbar-item:active:not(.kbq-disabled) .kbq-navbar-title,.kbq-navbar-item.kbq-active:not(.kbq-disabled) .kbq-navbar-title{color:var(--kbq-navbar-item-states-selected-content-text)}.kbq-navbar-item:active:not(.kbq-disabled)>.kbq-icon.kbq-empty,.kbq-navbar-item.kbq-active:not(.kbq-disabled)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-selected-content-icon-left)}.kbq-navbar-item:active:not(.kbq-disabled) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-item:active:not(.kbq-disabled) .kbq-navbar-item-suffix .kbq-icon.kbq-empty,.kbq-navbar-item.kbq-active:not(.kbq-disabled) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-item.kbq-active:not(.kbq-disabled) .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-selected-content-icon-right)}.kbq-navbar-item.kbq-navbar-focusable-item{outline:none}.kbq-navbar-item.kbq-disabled:not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-disabled-content-background)}.kbq-navbar-item.kbq-disabled .kbq-navbar-title{color:var(--kbq-navbar-item-states-disabled-content-text)}.kbq-navbar-item.kbq-disabled>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-disabled-content-icon-left)}.kbq-navbar-item.kbq-disabled .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-item.kbq-disabled .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-disabled-content-icon-right)}.kbq-navbar-item.kbq-disabled{pointer-events:none;cursor:default}.kbq-navbar-divider{background:var(--kbq-line-contrast-less)}.kbq-navbar-title{font-size:var(--kbq-typography-text-normal-medium-font-size);font-style:var(--kbq-typography-text-normal-medium-font-style);font-weight:var(--kbq-typography-text-normal-medium-font-weight);line-height:var(--kbq-typography-text-normal-medium-line-height);font-family:var(--kbq-typography-text-normal-medium-font-family);text-transform:var(--kbq-typography-text-normal-medium-text-transform);font-feature-settings:var(--kbq-typography-text-normal-medium-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-medium-letter-spacing)}\n", "@charset \"UTF-8\";.kbq-truncate-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.kbq-navbar-item.kbq-vertical{height:var(--kbq-navbar-item-vertical-size-height)}.kbq-navbar-item.kbq-vertical .kbq-navbar-item__container{gap:var(--kbq-size-m)}.kbq-navbar-item.kbq-vertical .kbq-navbar-item-suffix{margin-left:auto}.kbq-navbar-item.kbq-vertical{padding-right:var(--kbq-size-xl);padding-left:var(--kbq-size-xl)}.kbq-navbar-item.kbq-vertical:after{top:0;right:var(--kbq-size-s);bottom:1px;left:var(--kbq-size-s)}.kbq-navbar-item.kbq-vertical.kbq-navbar-bento{display:flex;justify-content:start;align-items:center;height:var(--kbq-size-5xl);padding-top:var(--kbq-size-s)}.kbq-navbar-item.kbq-vertical.kbq-navbar-bento:after{top:var(--kbq-size-s);bottom:0}.kbq-navbar-item.kbq-vertical.kbq-navbar-bento+.kbq-navbar-brand.kbq-vertical{padding:var(--kbq-size-xxs) var(--kbq-size-m) var(--kbq-size-m)}.kbq-navbar-item.kbq-vertical.kbq-navbar-bento+.kbq-navbar-brand.kbq-vertical:after{top:0}.kbq-navbar-item.kbq-vertical.kbq-expanded{align-items:center;gap:var(--kbq-size-m)}.kbq-navbar-item.kbq-vertical.kbq-expanded .kbq-badge{position:static}.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-item_has-nested{align-items:center;padding:0 var(--kbq-size-m)}.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento .kbq-navbar-item__title{margin-left:calc(-1 * var(--kbq-size-s));opacity:0;transition:opacity .15s ease-out,margin-left .15s ease-out}.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento .kbq-navbar-item__title.kbq-animations-disabled{animation:none;transition:none}@media(prefers-reduced-motion:reduce){.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento .kbq-navbar-item__title{animation:none;transition:none}}.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento:hover .kbq-navbar-item__title,.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento.cdk-keyboard-focused .kbq-navbar-item__title,.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento.kbq-active .kbq-navbar-item__title,.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento.kbq-pressed .kbq-navbar-item__title{margin-left:0;opacity:1}.kbq-navbar-item.kbq-vertical.kbq-collapsed{width:var(--kbq-size-6xl);justify-content:center}.kbq-navbar-item.kbq-vertical.kbq-collapsed .kbq-badge{top:calc(-1 * var(--kbq-size-3xs));right:var(--kbq-size-xs)}.kbq-navbar-item.kbq-vertical.kbq-collapsed .kbq-navbar-item__container{display:none}.kbq-navbar-item.kbq-vertical>.kbq-icon{display:flex;justify-content:center;align-items:center}button.kbq-navbar-item.kbq-vertical{width:100%}.kbq-navbar-item.kbq-horizontal{position:relative;flex-direction:row;box-sizing:border-box;outline:none;-webkit-tap-highlight-color:transparent;min-height:var(--kbq-size-3xl);min-width:var(--kbq-size-3xl);margin:var(--kbq-size-s);justify-content:center}.kbq-navbar-item.kbq-horizontal:before{top:calc(-1 * var(--kbq-size-s));left:calc(-1 * var(--kbq-size-s));right:calc(-1 * var(--kbq-size-s));bottom:calc(-1 * var(--kbq-size-s))}.kbq-navbar-item.kbq-horizontal:after{inset:0}.kbq-navbar-item.kbq-horizontal .kbq-navbar-item__title{padding-left:var(--kbq-size-xxs);padding-right:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal .kbq-navbar-item__arrow-icon{padding-left:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal .kbq-navbar-item-suffix{margin-left:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_with-title:not(.kbq-navbar-item_collapsed){margin-left:0;margin-right:0;padding-right:var(--kbq-size-m);padding-left:var(--kbq-size-m)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_with-title:not(.kbq-navbar-item_collapsed):before{left:0;right:0}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_with-title:not(.kbq-navbar-item_collapsed)>.kbq-icon{align-self:center;padding-right:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-bento{justify-content:center;margin-right:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-bento:before{right:calc(-1 * var(--kbq-size-xxs))}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_collapsed{justify-content:center;padding:var(--kbq-size-s)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_collapsed .kbq-navbar-item__container{display:none}.kbq-navbar-item.kbq-horizontal .kbq-badge{top:calc(-1 * var(--kbq-size-3xs));right:calc(-1 * var(--kbq-size-3xs))}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_has-nested{margin-left:var(--kbq-size-m);margin-right:var(--kbq-size-m)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_has-nested:before{left:calc(-1 * var(--kbq-size-m));right:calc(-1 * var(--kbq-size-m))}.kbq-navbar-item{box-sizing:border-box;position:relative;display:flex;align-items:center;border-radius:var(--kbq-navbar-item-size-content-border-radius)}@supports (corner-shape: squircle){.kbq-navbar-item{corner-shape:squircle;border-radius:clamp(var(--kbq-navbar-item-size-content-border-radius) * 1.85,var(--kbq-navbar-item-size-content-border-radius) * 2.3 - 3.6px,var(--kbq-navbar-item-size-content-border-radius) * 2)}}.kbq-navbar-item .kbq-icon{min-width:var(--kbq-size-l);min-height:var(--kbq-size-l)}.kbq-navbar-item .kbq-badge-filled.kbq-badge_fade-contrast{background:linear-gradient(var(--kbq-background-contrast-fade),var(--kbq-background-contrast-fade)),var(--kbq-background-bg-tertiary)}.kbq-navbar-item .kbq-button-icon{position:absolute;padding-left:var(--kbq-size-xs);padding-right:var(--kbq-size-xs);top:50%;transform:translateY(-50%)}.kbq-navbar-item:before{position:absolute;content:\"\"}.kbq-navbar-item:after{position:absolute;content:\"\";display:none;border-radius:var(--kbq-navbar-item-size-content-border-radius)}@supports (corner-shape: squircle){.kbq-navbar-item:after{corner-shape:squircle;border-radius:clamp(var(--kbq-navbar-item-size-content-border-radius) * 1.85,var(--kbq-navbar-item-size-content-border-radius) * 2.3 - 3.6px,var(--kbq-navbar-item-size-content-border-radius) * 2)}}.kbq-navbar-item .kbq-badge{position:absolute;z-index:1}.kbq-navbar-title{display:inline-block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.kbq-navbar-item__title{display:flex;flex-direction:column;align-self:center;min-width:0}.kbq-navbar-item__container{display:flex;flex-direction:row;flex:1 1 auto;justify-content:space-between;min-width:0}.kbq-navbar-item__container .kbq-icon{align-self:center}.kbq-navbar-item.kbq-navbar-item_has-nested .kbq-button{flex:1}.kbq-navbar-item.kbq-navbar-item_has-nested .kbq-button .kbq-button-wrapper{justify-content:center}.kbq-navbar-item.kbq-navbar-item_has-nested .kbq-button .kbq-button-wrapper .kbq-icon.kbq-icon_left{margin-left:unset}.kbq-navbar-item.kbq-navbar-item_has-nested .kbq-button .kbq-button-wrapper .kbq-icon.kbq-icon_right{margin-right:unset}a.kbq-navbar-item,a.kbq-navbar-title{text-decoration:none}.kbq-navbar-item [kbq-button],.kbq-navbar-brand [kbq-button],.kbq-navbar-toggle [kbq-button]{z-index:1}\n", "button.kbq-navbar-item,button.kbq-navbar-brand{background:transparent;border:none}.kbq-navbar-logo{display:flex}.kbq-navbar-brand{position:relative;display:flex;border-radius:var(--kbq-size-s)}@supports (corner-shape: squircle){.kbq-navbar-brand{corner-shape:squircle;border-radius:clamp(var(--kbq-size-s) * 1.85,var(--kbq-size-s) * 2.3 - 3.6px,var(--kbq-size-s) * 2)}}.kbq-navbar-brand:after{position:absolute;content:\"\";display:none;border-radius:var(--kbq-navbar-item-size-content-border-radius)}@supports (corner-shape: squircle){.kbq-navbar-brand:after{corner-shape:squircle;border-radius:clamp(var(--kbq-navbar-item-size-content-border-radius) * 1.85,var(--kbq-navbar-item-size-content-border-radius) * 2.3 - 3.6px,var(--kbq-navbar-item-size-content-border-radius) * 2)}}.kbq-navbar-brand:not(.kbq-disabled) .kbq-navbar-title{cursor:pointer}a.kbq-navbar-brand{text-decoration:none}.kbq-navbar-brand.kbq-horizontal{padding:var(--kbq-size-s) var(--kbq-size-xs) var(--kbq-size-s) var(--kbq-size-xxs);align-items:center;gap:var(--kbq-size-s)}.kbq-navbar-brand.kbq-horizontal:after{top:var(--kbq-size-xxs);right:var(--kbq-size-xxs);bottom:var(--kbq-size-xxs);left:0}.kbq-navbar-brand.kbq-horizontal .kbq-navbar-title{box-sizing:content-box;max-width:154px;padding-right:var(--kbq-size-m)}.kbq-navbar-brand.kbq-vertical{flex-direction:row;align-items:center;padding:var(--kbq-size-m)}.kbq-navbar-brand.kbq-vertical:after{top:var(--kbq-size-s);right:var(--kbq-size-s);bottom:var(--kbq-size-s);left:var(--kbq-size-s)}.kbq-navbar-brand.kbq-vertical .kbq-navbar-logo{align-items:center}.kbq-navbar-brand.kbq-vertical .kbq-navbar-title{display:block;align-items:center;padding-left:var(--kbq-size-s)}.kbq-navbar-brand.kbq-vertical.kbq-expanded .kbq-navbar-title{max-width:var(--kbq-navbar-brand-vertical-size-title-max-width)}.kbq-navbar-brand.kbq-vertical.kbq-collapsed .kbq-navbar-title{display:none}.kbq-navbar-brand.kbq-navbar-brand_long-title .kbq-navbar-title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;white-space:normal}.kbq-navbar-brand:not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-default-content-background)}.kbq-navbar-brand .kbq-navbar-title{color:var(--kbq-navbar-item-default-content-text)}.kbq-navbar-brand>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-default-content-icon-left)}.kbq-navbar-brand .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-brand .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-default-content-icon-right)}.kbq-navbar-brand.kbq-disabled{cursor:default}.kbq-navbar-brand.kbq-navbar-brand_link:not(.kbq-disabled){cursor:pointer}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-hover-content-background)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled) .kbq-navbar-title{color:var(--kbq-navbar-item-states-hover-content-text)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-hover-content-icon-left)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled) .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-hover-content-icon-right)}.kbq-navbar-brand.kbq-navbar-brand_link.cdk-focused.cdk-keyboard-focused:not(.kbq-disabled){outline:none}.kbq-navbar-brand.kbq-navbar-brand_link.cdk-focused.cdk-keyboard-focused:not(.kbq-disabled):after{display:block;box-shadow:inset 0 0 0 2px var(--kbq-states-line-focus-theme)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand):not(.kbq-navbar-item_has-nested):after,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-selected-content-background)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-title,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-title{color:var(--kbq-navbar-item-states-selected-content-text)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand)>.kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-selected-content-icon-left)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-item-suffix .kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-selected-content-icon-right)}.kbq-navbar-brand.kbq-navbar-brand_link.kbq-vertical:hover:not(.kbq-disabled) .kbq-navbar-logo{transform:scale(1.06)}.kbq-navbar-brand.kbq-navbar-brand_link.kbq-horizontal:hover:not(.kbq-disabled) .kbq-navbar-logo{z-index:1}.kbq-navbar-brand.kbq-navbar-focusable-item{outline:none}.kbq-navbar-brand .kbq-navbar-title{font-size:var(--kbq-typography-navbar-title-font-size);font-style:var(--kbq-typography-navbar-title-font-style);font-weight:var(--kbq-typography-navbar-title-font-weight);line-height:var(--kbq-typography-navbar-title-line-height);font-family:var(--kbq-typography-navbar-title-font-family);text-transform:var(--kbq-typography-navbar-title-text-transform);font-feature-settings:var(--kbq-typography-navbar-title-font-feature-settings);letter-spacing:var(--kbq-typography-navbar-title-letter-spacing)}.kbq-navbar-brand.kbq-navbar-brand_long-title .kbq-navbar-title{font-size:var(--kbq-typography-text-normal-strong-font-size);font-style:var(--kbq-typography-text-normal-strong-font-style);font-weight:var(--kbq-typography-text-normal-strong-font-weight);line-height:var(--kbq-typography-text-normal-strong-line-height);font-family:var(--kbq-typography-text-normal-strong-font-family);text-transform:var(--kbq-typography-text-normal-strong-text-transform);font-feature-settings:var(--kbq-typography-text-normal-strong-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-strong-letter-spacing);line-height:16px}\n", ".kbq-navbar-divider{display:block}.kbq-navbar-divider.kbq-vertical{height:1px;margin:var(--kbq-size-xs) var(--kbq-size-l)}.kbq-navbar-divider.kbq-horizontal{width:1px;height:var(--kbq-size-m);margin-left:var(--kbq-size-m);margin-right:var(--kbq-size-m)}\n", ".kbq-navbar,.kbq-vertical-navbar{--kbq-navbar-item-size-content-border-radius: var(--kbq-size-border-radius);--kbq-navbar-item-vertical-size-height: 41px;--kbq-navbar-vertical-size-expanded-width: 240px;--kbq-navbar-brand-vertical-size-title-max-width: 200px;--kbq-navbar-toggle-size-circle: 28px;--kbq-navbar-z-index: 990;--kbq-navbar-vertical-open-over-z-index: 989;--kbq-navbar-toggle-z-index: 991;--kbq-navbar-background: var(--kbq-background-bg);--kbq-navbar-vertical-background: var(--kbq-background-bg-tertiary);--kbq-navbar-border: var(--kbq-line-contrast-less);--kbq-navbar-item-default-content-text: var(--kbq-foreground-contrast);--kbq-navbar-item-default-content-background: transparent;--kbq-navbar-item-default-content-icon-left: var(--kbq-icon-contrast);--kbq-navbar-item-default-content-icon-right: var(--kbq-icon-contrast);--kbq-navbar-item-states-hover-content-text: var(--kbq-foreground-contrast);--kbq-navbar-item-states-hover-content-background: var(--kbq-states-background-transparent-hover);--kbq-navbar-item-states-hover-content-icon-left: var(--kbq-states-icon-contrast-hover);--kbq-navbar-item-states-hover-content-icon-right: var(--kbq-states-icon-contrast-hover);--kbq-navbar-item-states-selected-content-text: var(--kbq-foreground-contrast);--kbq-navbar-item-states-selected-content-background: var(--kbq-states-background-transparent-active);--kbq-navbar-item-states-selected-content-icon-left: var(--kbq-states-icon-contrast-active);--kbq-navbar-item-states-selected-content-icon-right: var(--kbq-states-icon-contrast-active);--kbq-navbar-item-states-selected-hover-content-text: var(--kbq-foreground-contrast);--kbq-navbar-item-states-selected-hover-content-background: var(--kbq-states-background-transparent-hover);--kbq-navbar-item-states-selected-hover-content-icon-left: var(--kbq-states-icon-contrast-hover);--kbq-navbar-item-states-selected-hover-content-icon-right: var(--kbq-states-icon-contrast-hover);--kbq-navbar-item-states-disabled-content-text: var(--kbq-states-foreground-disabled);--kbq-navbar-item-states-disabled-content-background: transparent;--kbq-navbar-item-states-disabled-content-icon-left: var(--kbq-states-icon-disabled);--kbq-navbar-item-states-disabled-content-icon-right: var(--kbq-states-icon-disabled)}\n"] }]
952
1193
  }], ctorParameters: () => [], propDecorators: { rectangleElements: [{ type: i0.ContentChildren, args: [forwardRef(() => KbqNavbarRectangleElement), { ...{ descendants: true }, isSignal: true }] }], navbarItems: [{ type: i0.ContentChildren, args: [forwardRef(() => KbqNavbarItem), { ...{ descendants: true }, isSignal: true }] }] } });
953
1194
 
954
1195
  /** default configuration of navbar */
955
1196
  /** @docs-private */
956
- const KBQ_VERTICAL_NAVBAR_DEFAULT_CONFIGURATION = ruRULocaleData.navbar;
1197
+ const KBQ_NAVBAR_DEFAULT_LOCALE_CONFIGURATION = ruRULocaleData.navbar;
957
1198
  /** Injection Token for providing configuration of navbar */
958
1199
  /** @docs-private */
959
- const KBQ_VERTICAL_NAVBAR_CONFIGURATION = new InjectionToken('KbqVerticalNavbarConfiguration');
1200
+ const KBQ_NAVBAR_LOCALE_CONFIGURATION = new InjectionToken('KbqNavbarLocaleConfiguration', { factory: () => KBQ_NAVBAR_DEFAULT_LOCALE_CONFIGURATION });
1201
+ /**
1202
+ * Utility provider for `KBQ_NAVBAR_LOCALE_CONFIGURATION`. Only the strings you pass are overridden; the
1203
+ * rest keep following the active locale.
1204
+ */
1205
+ const kbqNavbarLocaleConfigurationProvider = (configuration) => kbqLocaleConfigurationOverrideProvider('navbar', configuration);
1206
+ /** @deprecated Use {@link KBQ_NAVBAR_DEFAULT_LOCALE_CONFIGURATION}. Will be removed in 22.0.0. */
1207
+ const KBQ_VERTICAL_NAVBAR_DEFAULT_CONFIGURATION = KBQ_NAVBAR_DEFAULT_LOCALE_CONFIGURATION;
1208
+ /** @deprecated Use {@link KBQ_NAVBAR_LOCALE_CONFIGURATION}. Will be removed in 22.0.0. */
1209
+ const KBQ_VERTICAL_NAVBAR_CONFIGURATION = KBQ_NAVBAR_LOCALE_CONFIGURATION;
960
1210
  class KbqVerticalNavbar extends KbqFocusableComponent {
961
- // TODO: Skipped for migration because:
962
- // Accessor inputs cannot be migrated as they are too complex.
963
- get expanded() {
964
- return this._expanded;
965
- }
966
- set expanded(value) {
967
- this._expanded = coerceBooleanProperty(value);
968
- this.updateExpandedStateForItems();
969
- }
970
1211
  constructor() {
971
- const elementRef = inject(ElementRef);
972
1212
  super();
1213
+ /**
1214
+ * Localized strings of the navbar.
1215
+ *
1216
+ * A signal, so that a locale change reaches the `OnPush` descendants that render these strings — a plain
1217
+ * field would leave them showing the previous locale until something else marked them dirty. It also keeps
1218
+ * the value observable from outside: `KbqNavbarToggle` reads it in an `effect` to refresh its tooltip,
1219
+ * which a `markForCheck()` here could never have reached in that separate `OnPush` view.
1220
+ */
1221
+ this.localeConfiguration = inject(KbqLocaleOverridesDirective, { self: true }).read('navbar', KBQ_NAVBAR_LOCALE_CONFIGURATION);
973
1222
  /** @docs-private */
974
- this.localeService = inject(KBQ_LOCALE_SERVICE, { optional: true });
975
- this.externalConfiguration = inject(KBQ_VERTICAL_NAVBAR_CONFIGURATION, { optional: true });
976
- this.rectangleElements = contentChildren(forwardRef(() => KbqNavbarRectangleElement), ...(ngDevMode ? [{ debugName: "rectangleElements", descendants: true }] : [{ descendants: true }]));
977
- this.items = contentChildren(forwardRef(() => KbqNavbarItem), ...(ngDevMode ? [{ debugName: "items", descendants: true }] : [{ descendants: true }]));
978
- this.bento = contentChild(forwardRef(() => KbqNavbarBento), ...(ngDevMode ? [{ debugName: "bento" }] : []));
979
- this.animationDone = new Subject();
980
- this.openOver = input(false, ...(ngDevMode ? [{ debugName: "openOver" }] : []));
981
- this._expanded = false;
982
- this.updateExpandedStateForItems = () => this.rectangleElements().forEach(this.updateItemExpandedState);
983
- this.updateTooltipForItems = () => this.items().forEach((item) => item.updateTooltip());
984
- this.setItemsVerticalStateAndUpdateExpandedState = (rectangleElements) => rectangleElements.forEach(this.setItemVerticalStateAndUpdateExpandedState);
985
- this.setItemVerticalStateAndUpdateExpandedState = (item) => {
986
- queueMicrotask(() => this.setItemVerticalState(item));
987
- this.updateItemExpandedState(item);
988
- };
989
- this.setItemVerticalState = (item) => {
990
- item.vertical = true;
991
- };
992
- this.updateItemExpandedState = (item) => {
993
- item.collapsed = !this.expanded;
994
- setTimeout(() => item.button()?.updateClassModifierForIcons());
995
- };
996
- this.updateLocaleParams = () => {
997
- this.configuration = this.externalConfiguration || this.localeService?.getParams('navbar');
998
- this.changeDetectorRef.markForCheck();
999
- };
1000
- this.elementRef = elementRef;
1001
- this.animationDone.pipe(takeUntilDestroyed()).subscribe(this.updateTooltipForItems);
1002
- effect(() => this.setItemsVerticalStateAndUpdateExpandedState(this.rectangleElements()));
1003
- this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe(this.updateLocaleParams);
1004
- if (!this.localeService) {
1005
- this.initDefaultParams();
1006
- }
1223
+ this.rectangleElements = contentChildren(forwardRef(() => KbqNavbarRectangleElement), { ...(ngDevMode ? { debugName: "rectangleElements" } : /* istanbul ignore next */ {}), descendants: true });
1224
+ /** @docs-private */
1225
+ this.items = contentChildren(forwardRef(() => KbqNavbarItem), { ...(ngDevMode ? { debugName: "items" } : /* istanbul ignore next */ {}), descendants: true });
1226
+ /** @docs-private */
1227
+ this.bento = contentChild(forwardRef(() => KbqNavbarBento), ...(ngDevMode ? [{ debugName: "bento" }] : /* istanbul ignore next */ []));
1228
+ /** Whether the expanded navbar overlays the page content instead of taking room from it. */
1229
+ this.openOver = input(false, ...(ngDevMode ? [{ debugName: "openOver" }] : /* istanbul ignore next */ []));
1230
+ /** Whether the navbar is expanded. */
1231
+ this.expanded = model(false, ...(ngDevMode ? [{ debugName: "expanded" }] : /* istanbul ignore next */ []));
1232
+ this.destroyRef.onDestroy(() => clearTimeout(this.buttonIconsRefresh));
1233
+ effect(() => {
1234
+ // Re-runs both when the projected elements change and when the navbar is expanded or collapsed.
1235
+ const expanded = this.expanded();
1236
+ this.rectangleElements().forEach((item) => {
1237
+ item.orientation = 'vertical';
1238
+ item.collapsed = !expanded;
1239
+ });
1240
+ this.refreshButtonIcons();
1241
+ });
1007
1242
  }
1243
+ /** @docs-private */
1008
1244
  ngAfterContentInit() {
1009
- this.updateTooltipForItems();
1010
1245
  super.ngAfterContentInit();
1011
1246
  this.keyManager.withVerticalOrientation(true);
1012
1247
  }
1248
+ /** Expands a collapsed navbar and collapses an expanded one. */
1013
1249
  toggle() {
1014
- this.expanded = !this.expanded;
1015
- this.changeDetectorRef.markForCheck();
1250
+ // Untracked: called from a consumer's `effect()`, `expanded` read here would make the effect run again on every
1251
+ // expand and collapse.
1252
+ this.expanded.set(!untracked(this.expanded));
1016
1253
  }
1254
+ /** @docs-private */
1017
1255
  onKeyDown(event) {
1018
1256
  const keyCode = event.keyCode;
1257
+ // The origin of the last focus event may be a click, and an item takes no DOM focus for a pointer origin.
1258
+ this.keyManager.setFocusOrigin('keyboard');
1019
1259
  if (!event.target.attributes.getNamedItem('kbqinput') &&
1020
1260
  (isVerticalMovement(event) || isHorizontalMovement(event))) {
1021
1261
  event.preventDefault();
@@ -1034,65 +1274,159 @@ class KbqVerticalNavbar extends KbqFocusableComponent {
1034
1274
  this.keyManager.onKeydown(event);
1035
1275
  }
1036
1276
  }
1037
- initDefaultParams() {
1038
- this.configuration = KBQ_VERTICAL_NAVBAR_DEFAULT_CONFIGURATION;
1039
- }
1040
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqVerticalNavbar, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1041
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.30", type: KbqVerticalNavbar, isStandalone: true, selector: "kbq-vertical-navbar", inputs: { openOver: { classPropertyName: "openOver", publicName: "openOver", isSignal: true, isRequired: false, transformFunction: null }, expanded: { classPropertyName: "expanded", publicName: "expanded", isSignal: false, isRequired: false, transformFunction: null } }, host: { listeners: { "focus": "focus()", "blur": "blur()", "keydown": "onKeyDown($event)" }, properties: { "class.kbq-vertical-navbar_open-over": "openOver()", "attr.tabindex": "tabIndex", "attr.cdkMonitorSubtreeFocus": "true" }, classAttribute: "kbq-vertical-navbar" }, queries: [{ propertyName: "rectangleElements", predicate: i0.forwardRef(() => KbqNavbarRectangleElement), descendants: true, isSignal: true }, { propertyName: "items", predicate: i0.forwardRef(() => KbqNavbarItem), descendants: true, isSignal: true }, { propertyName: "bento", first: true, predicate: i0.forwardRef(() => KbqNavbarBento), descendants: true, isSignal: true }], exportAs: ["KbqVerticalNavbar"], usesInheritance: true, hostDirectives: [{ directive: i1.CdkMonitorFocus }], ngImport: i0, template: `
1042
- <div class="kbq-vertical-navbar__container" [class.kbq-collapsed]="!expanded" [class.kbq-expanded]="expanded">
1277
+ /**
1278
+ * Buttons projected into the items re-pick their icon-only modifier from the rendered width, so the pass
1279
+ * has to wait for the collapsed/expanded classes to reach the DOM. One deferred pass over every item, not
1280
+ * one timer per item.
1281
+ */
1282
+ refreshButtonIcons() {
1283
+ const elements = this.rectangleElements();
1284
+ // A pending pass is replaced: every element of it that is still projected is among these.
1285
+ clearTimeout(this.buttonIconsRefresh);
1286
+ if (!elements.length)
1287
+ return;
1288
+ this.buttonIconsRefresh = setTimeout(() => elements.forEach((item) => item.button()?.updateClassModifierForIcons()));
1289
+ }
1290
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqVerticalNavbar, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1291
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.25", type: KbqVerticalNavbar, isStandalone: true, selector: "kbq-vertical-navbar", inputs: { openOver: { classPropertyName: "openOver", publicName: "openOver", isSignal: true, isRequired: false, transformFunction: null }, expanded: { classPropertyName: "expanded", publicName: "expanded", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { expanded: "expandedChange" }, host: { attributes: { "role": "navigation" }, listeners: { "focus": "focus()", "blur": "blur()", "keydown": "onKeyDown($event)" }, properties: { "attr.aria-label": "ariaLabel()", "class.kbq-vertical-navbar_open-over": "openOver()", "attr.tabindex": "renderedTabIndex()", "attr.cdkMonitorSubtreeFocus": "true" }, classAttribute: "kbq-vertical-navbar" }, queries: [{ propertyName: "rectangleElements", predicate: i0.forwardRef(() => KbqNavbarRectangleElement), descendants: true, isSignal: true }, { propertyName: "items", predicate: i0.forwardRef(() => KbqNavbarItem), descendants: true, isSignal: true }, { propertyName: "bento", first: true, predicate: i0.forwardRef(() => KbqNavbarBento), descendants: true, isSignal: true }], exportAs: ["KbqVerticalNavbar"], usesInheritance: true, hostDirectives: [{ directive: i1$1.CdkMonitorFocus }, { directive: i2.KbqLocaleOverridesDirective, inputs: ["kbqLocaleOverrides", "localeOverrides"] }, { directive: i2.KbqOverlayLayerExclude }], ngImport: i0, template: `
1292
+ <div
1293
+ class="kbq-vertical-navbar__container"
1294
+ [class.kbq-collapsed]="!expanded()"
1295
+ [class.kbq-expanded]="expanded()"
1296
+ >
1043
1297
  <ng-content select="[kbq-navbar-container], kbq-navbar-container" />
1044
1298
  <ng-content select="[kbq-navbar-toggle], kbq-navbar-toggle" />
1045
1299
  </div>
1046
- `, isInline: true, styles: ["button.kbq-navbar-item,button.kbq-navbar-brand{background:transparent;border:none}.kbq-vertical-navbar{display:flex;flex-shrink:0;position:relative;min-width:var(--kbq-size-6xl);height:100%}.kbq-vertical-navbar:not(:hover,.kbq-hovered,.cdk-keyboard-focused) .kbq-navbar-toggle{display:none}.kbq-vertical-navbar .kbq-navbar-container{flex-direction:column;align-items:unset}.kbq-vertical-navbar .kbq-navbar-container+.kbq-navbar-container{padding-top:var(--kbq-size-xxl);padding-bottom:var(--kbq-size-s)}.kbq-vertical-navbar .kbq-vertical-navbar__container{box-sizing:border-box;position:relative;display:flex;flex-direction:column;justify-content:space-between;height:100%}.kbq-vertical-navbar .kbq-vertical-navbar__container.kbq-collapsed{width:var(--kbq-size-6xl)}.kbq-vertical-navbar .kbq-vertical-navbar__container.kbq-expanded{width:240px}.kbq-vertical-navbar.kbq-vertical-navbar_open-over .kbq-vertical-navbar__container{position:absolute;z-index:998}.kbq-navbar{background-color:var(--kbq-navbar-background)}.kbq-vertical-navbar .kbq-vertical-navbar__container{background-color:var(--kbq-navbar-vertical-background);border-right:1px solid var(--kbq-navbar-border)}.kbq-navbar-item{cursor:pointer}.kbq-navbar-item:not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-default-content-background)}.kbq-navbar-item .kbq-navbar-title{color:var(--kbq-navbar-item-default-content-text)}.kbq-navbar-item>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-default-content-icon-left)!important}.kbq-navbar-item.kbq-hovered:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after,.kbq-navbar-item:hover:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-hover-content-background)}.kbq-navbar-item.kbq-hovered:not(.kbq-disabled) .kbq-navbar-title,.kbq-navbar-item:hover:not(.kbq-disabled) .kbq-navbar-title{color:var(--kbq-navbar-item-states-hover-content-text)}.kbq-navbar-item.kbq-hovered:not(.kbq-disabled)>.kbq-icon.kbq-empty,.kbq-navbar-item:hover:not(.kbq-disabled)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-hover-content-icon-left)!important}.kbq-navbar-item.cdk-focused.cdk-keyboard-focused{outline:none}.kbq-navbar-item.cdk-focused.cdk-keyboard-focused:after{display:block;box-shadow:inset 0 0 0 2px var(--kbq-states-line-focus-theme)}.kbq-navbar-item:active:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after,.kbq-navbar-item.kbq-active:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-selected-content-background)}.kbq-navbar-item:active:not(.kbq-disabled) .kbq-navbar-title,.kbq-navbar-item.kbq-active:not(.kbq-disabled) .kbq-navbar-title{color:var(--kbq-navbar-item-states-selected-content-text)}.kbq-navbar-item:active:not(.kbq-disabled)>.kbq-icon.kbq-empty,.kbq-navbar-item.kbq-active:not(.kbq-disabled)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-selected-content-icon-left)!important}.kbq-navbar-item.kbq-navbar-focusable-item{outline:none}.kbq-navbar-item.kbq-disabled:not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-disabled-content-background)}.kbq-navbar-item.kbq-disabled .kbq-navbar-title{color:var(--kbq-navbar-item-states-disabled-content-text)}.kbq-navbar-item.kbq-disabled>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-disabled-content-icon-left)!important}.kbq-navbar-item.kbq-disabled{pointer-events:none;cursor:default}.kbq-navbar-divider{background:var(--kbq-line-contrast-less)}.kbq-navbar-title{font-size:var(--kbq-typography-text-normal-medium-font-size);font-style:var(--kbq-typography-text-normal-medium-font-style);font-weight:var(--kbq-typography-text-normal-medium-font-weight);line-height:var(--kbq-typography-text-normal-medium-line-height);font-family:var(--kbq-typography-text-normal-medium-font-family);text-transform:var(--kbq-typography-text-normal-medium-text-transform);font-feature-settings:var(--kbq-typography-text-normal-medium-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-medium-letter-spacing)}\n", ".kbq-truncate-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.kbq-no-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.kbq-navbar-item.kbq-vertical{height:41px}.kbq-navbar-item.kbq-vertical .kbq-navbar-item__container{gap:var(--kbq-size-m)}.kbq-navbar-item.kbq-vertical{padding-right:var(--kbq-size-xl);padding-left:var(--kbq-size-xl)}.kbq-navbar-item.kbq-vertical:after{top:0;right:var(--kbq-size-s);bottom:1px;left:var(--kbq-size-s)}.kbq-navbar-item.kbq-vertical.kbq-navbar-bento{display:flex;justify-content:start;align-items:center;height:var(--kbq-size-5xl);padding-top:var(--kbq-size-s)}.kbq-navbar-item.kbq-vertical.kbq-navbar-bento:after{top:var(--kbq-size-s);bottom:0}.kbq-navbar-item.kbq-vertical.kbq-navbar-bento+.kbq-navbar-brand.kbq-vertical{padding:var(--kbq-size-xxs) var(--kbq-size-m) var(--kbq-size-m)}.kbq-navbar-item.kbq-vertical.kbq-navbar-bento+.kbq-navbar-brand.kbq-vertical:after{top:0}.kbq-navbar-item.kbq-vertical.kbq-expanded{align-items:center;gap:var(--kbq-size-m)}.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-item_has-nested{align-items:center;padding:0 var(--kbq-size-m)}.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento .kbq-navbar-item__title{margin-left:-8px;opacity:0;transition:opacity .15s ease-out,margin-left .15s ease-out}.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento:hover .kbq-navbar-item__title,.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento.cdk-keyboard-focused .kbq-navbar-item__title,.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento.kbq-active .kbq-navbar-item__title,.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento.kbq-pressed .kbq-navbar-item__title{margin-left:0;opacity:1}.kbq-navbar-item.kbq-vertical.kbq-collapsed{width:var(--kbq-size-6xl);justify-content:center}.kbq-navbar-item.kbq-vertical.kbq-collapsed .kbq-badge{position:absolute;z-index:1;top:calc(-1 * var(--kbq-size-3xs));right:var(--kbq-size-xs)}.kbq-navbar-item.kbq-vertical.kbq-collapsed .kbq-navbar-item__container{display:none}.kbq-navbar-item.kbq-vertical>.kbq-icon{display:flex;justify-content:center;align-items:center}button.kbq-navbar-item.kbq-vertical{width:100%}.kbq-navbar-item.kbq-horizontal{position:relative;flex-direction:row;box-sizing:border-box;outline:none;-webkit-tap-highlight-color:transparent;min-height:var(--kbq-size-3xl);min-width:var(--kbq-size-3xl);margin:var(--kbq-size-s);justify-content:center}.kbq-navbar-item.kbq-horizontal:before{top:calc(-1 * var(--kbq-size-s));left:calc(-1 * var(--kbq-size-s));right:calc(-1 * var(--kbq-size-s));bottom:calc(-1 * var(--kbq-size-s))}.kbq-navbar-item.kbq-horizontal:after{inset:0}.kbq-navbar-item.kbq-horizontal .kbq-navbar-item__title{padding-left:var(--kbq-size-xxs);padding-right:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal .kbq-navbar-item__arrow-icon{padding-left:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_with-title:not(.kbq-navbar-item_collapsed){margin-left:0;margin-right:0;padding-right:var(--kbq-size-m);padding-left:var(--kbq-size-m)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_with-title:not(.kbq-navbar-item_collapsed):before{left:0;right:0}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_with-title:not(.kbq-navbar-item_collapsed)>.kbq-icon{align-self:center;padding-right:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-bento{justify-content:center;margin-right:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-bento:before{right:calc(-1 * var(--kbq-size-xxs))}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_collapsed{justify-content:center;padding:var(--kbq-size-s)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_collapsed .kbq-navbar-item__container{display:none}.kbq-navbar-item.kbq-horizontal .kbq-badge{position:absolute;z-index:1;top:-2px;right:-2px}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_has-nested{margin-left:var(--kbq-size-m);margin-right:var(--kbq-size-m)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_has-nested:before{left:calc(-1 * var(--kbq-size-m));right:calc(-1 * var(--kbq-size-m))}.kbq-navbar-item{box-sizing:border-box;position:relative;display:flex;align-items:center;border-radius:var(--kbq-navbar-item-size-content-border-radius)}.kbq-navbar-item .kbq-icon{min-width:var(--kbq-size-l);min-height:var(--kbq-size-l)}.kbq-navbar-item .kbq-badge-filled.kbq-badge_fade-contrast{background:linear-gradient(var(--kbq-background-contrast-fade),var(--kbq-background-contrast-fade)),var(--kbq-background-bg-tertiary)}.kbq-navbar-item .kbq-button-icon{position:absolute;padding-left:var(--kbq-size-xs);padding-right:var(--kbq-size-xs);top:50%;transform:translateY(-50%)}.kbq-navbar-item:before{position:absolute;content:\"\"}.kbq-navbar-item:after{position:absolute;content:\"\";display:none;border-radius:var(--kbq-navbar-item-size-content-border-radius)}.kbq-navbar-title{display:inline-block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.kbq-navbar-item__title{display:flex;flex-direction:column;align-self:center;min-width:0}.kbq-navbar-item__container{display:flex;flex-direction:row;flex:1 1 auto;justify-content:space-between;min-width:0}.kbq-navbar-item__container .kbq-icon{align-self:center}.kbq-navbar-item.kbq-navbar-item_has-nested .kbq-button{flex:1}.kbq-navbar-item.kbq-navbar-item_has-nested .kbq-button .kbq-button-wrapper{justify-content:center}.kbq-navbar-item.kbq-navbar-item_has-nested .kbq-button .kbq-button-wrapper .kbq-icon.kbq-icon_left{margin-left:unset}.kbq-navbar-item.kbq-navbar-item_has-nested .kbq-button .kbq-button-wrapper .kbq-icon.kbq-icon_right{margin-right:unset}a.kbq-navbar-item,a.kbq-navbar-title{text-decoration:none}.kbq-navbar-item [kbq-button],.kbq-navbar-brand [kbq-button],.kbq-navbar-toggle [kbq-button]{z-index:1}\n", "button.kbq-navbar-item,button.kbq-navbar-brand{background:transparent;border:none}.kbq-navbar-logo{display:flex}.kbq-navbar-brand{position:relative;display:flex;border-radius:var(--kbq-size-s)}.kbq-navbar-brand:after{position:absolute;content:\"\";display:none;border-radius:var(--kbq-navbar-item-size-content-border-radius)}.kbq-navbar-brand:not(.kbq-disabled) .kbq-navbar-title{cursor:pointer}a.kbq-navbar-brand{text-decoration:none}.kbq-navbar-brand.kbq-horizontal{padding:var(--kbq-size-s) var(--kbq-size-xs) var(--kbq-size-s) var(--kbq-size-xxs);align-items:center;gap:var(--kbq-size-s)}.kbq-navbar-brand.kbq-horizontal:after{top:var(--kbq-size-xxs);right:var(--kbq-size-xxs);bottom:var(--kbq-size-xxs);left:0}.kbq-navbar-brand.kbq-horizontal .kbq-navbar-title{box-sizing:content-box;max-width:154px;padding-right:var(--kbq-size-m)}.kbq-navbar-brand.kbq-vertical{flex-direction:row;align-items:center;padding:var(--kbq-size-m)}.kbq-navbar-brand.kbq-vertical:after{top:var(--kbq-size-s);right:var(--kbq-size-s);bottom:var(--kbq-size-s);left:var(--kbq-size-s)}.kbq-navbar-brand.kbq-vertical .kbq-navbar-logo{align-items:center}.kbq-navbar-brand.kbq-vertical .kbq-navbar-title{display:block;align-items:center;padding-left:var(--kbq-size-s)}.kbq-navbar-brand.kbq-vertical.kbq-expanded .kbq-navbar-title{max-width:200px}.kbq-navbar-brand.kbq-vertical.kbq-collapsed .kbq-navbar-title{display:none!important}.kbq-navbar-brand.kbq-navbar-brand_long-title .kbq-navbar-title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;white-space:normal}.kbq-navbar-brand:not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-default-content-background)}.kbq-navbar-brand .kbq-navbar-title{color:var(--kbq-navbar-item-default-content-text)}.kbq-navbar-brand>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-default-content-icon-left)!important}.kbq-navbar-brand.kbq-disabled{cursor:default}.kbq-navbar-brand.kbq-navbar-brand_link:not(.kbq-disabled){cursor:pointer}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-hover-content-background)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled) .kbq-navbar-title{color:var(--kbq-navbar-item-states-hover-content-text)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-hover-content-icon-left)!important}.kbq-navbar-brand.kbq-navbar-brand_link.cdk-focused.cdk-keyboard-focused:not(.kbq-disabled){outline:none}.kbq-navbar-brand.kbq-navbar-brand_link.cdk-focused.cdk-keyboard-focused:not(.kbq-disabled):after{display:block;box-shadow:inset 0 0 0 2px var(--kbq-states-line-focus-theme)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand):not(.kbq-navbar-item_has-nested):after,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-selected-content-background)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-title,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-title{color:var(--kbq-navbar-item-states-selected-content-text)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand)>.kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-selected-content-icon-left)!important}.kbq-navbar-brand.kbq-navbar-brand_link.kbq-vertical:hover:not(.kbq-disabled) .kbq-navbar-logo{transform:scale(1.06)}.kbq-navbar-brand.kbq-navbar-brand_link.kbq-horizontal:hover:not(.kbq-disabled) .kbq-navbar-logo{z-index:1}.kbq-navbar-brand.kbq-navbar-focusable-item{outline:none}.kbq-navbar-brand .kbq-navbar-title{font-size:var(--kbq-typography-navbar-title-font-size);font-style:var(--kbq-typography-navbar-title-font-style);font-weight:var(--kbq-typography-navbar-title-font-weight);line-height:var(--kbq-typography-navbar-title-line-height);font-family:var(--kbq-typography-navbar-title-font-family);text-transform:var(--kbq-typography-navbar-title-text-transform);font-feature-settings:var(--kbq-typography-navbar-title-font-feature-settings);letter-spacing:var(--kbq-typography-navbar-title-letter-spacing)}.kbq-navbar-brand.kbq-navbar-brand_long-title .kbq-navbar-title{font-size:var(--kbq-typography-text-normal-strong-font-size);font-style:var(--kbq-typography-text-normal-strong-font-style);font-weight:var(--kbq-typography-text-normal-strong-font-weight);line-height:var(--kbq-typography-text-normal-strong-line-height);font-family:var(--kbq-typography-text-normal-strong-font-family);text-transform:var(--kbq-typography-text-normal-strong-text-transform);font-feature-settings:var(--kbq-typography-text-normal-strong-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-strong-letter-spacing);line-height:16px}\n", ".kbq-navbar-divider{display:block}.kbq-navbar-divider.kbq-vertical{height:1px;margin:var(--kbq-size-xs) var(--kbq-size-l)}.kbq-navbar-divider.kbq-horizontal{width:1px;height:12px;margin-left:var(--kbq-size-m);margin-right:var(--kbq-size-m)}\n", ".kbq-navbar,.kbq-vertical-navbar{--kbq-navbar-item-size-content-border-radius: var(--kbq-size-border-radius);--kbq-navbar-background: var(--kbq-background-bg);--kbq-navbar-vertical-background: var(--kbq-background-bg-tertiary);--kbq-navbar-border: var(--kbq-line-contrast-less);--kbq-navbar-item-default-content-text: var(--kbq-foreground-contrast);--kbq-navbar-item-default-content-background: transparent;--kbq-navbar-item-default-content-icon-left: var(--kbq-icon-contrast);--kbq-navbar-item-default-content-icon-right: var(--kbq-icon-contrast);--kbq-navbar-item-states-hover-content-text: var(--kbq-foreground-contrast);--kbq-navbar-item-states-hover-content-background: var(--kbq-states-background-transparent-hover);--kbq-navbar-item-states-hover-content-icon-left: var(--kbq-states-icon-contrast-hover);--kbq-navbar-item-states-hover-content-icon-right: var(--kbq-states-icon-contrast-hover);--kbq-navbar-item-states-selected-content-text: var(--kbq-foreground-contrast);--kbq-navbar-item-states-selected-content-background: var(--kbq-states-background-transparent-active);--kbq-navbar-item-states-selected-content-icon-left: var(--kbq-states-icon-contrast-active);--kbq-navbar-item-states-selected-content-icon-right: var(--kbq-states-icon-contrast-active);--kbq-navbar-item-states-selected-hover-content-text: var(--kbq-foreground-contrast);--kbq-navbar-item-states-selected-hover-content-background: var(--kbq-states-background-transparent-hover);--kbq-navbar-item-states-selected-hover-content-icon-left: var(--kbq-states-icon-contrast-hover);--kbq-navbar-item-states-selected-hover-content-icon-right: var(--kbq-states-icon-contrast-hover);--kbq-navbar-item-states-disabled-content-text: var(--kbq-states-foreground-disabled);--kbq-navbar-item-states-disabled-content-background: transparent;--kbq-navbar-item-states-disabled-content-icon-left: var(--kbq-states-icon-disabled);--kbq-navbar-item-states-disabled-content-icon-right: var(--kbq-states-icon-disabled)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1300
+ `, isInline: true, styles: ["button.kbq-navbar-item,button.kbq-navbar-brand{background:transparent;border:none}.kbq-vertical-navbar{display:flex;flex-shrink:0;position:relative;min-width:var(--kbq-size-6xl);height:100%}.kbq-vertical-navbar:not(:hover,.kbq-hovered,.cdk-keyboard-focused) .kbq-navbar-toggle{display:none}.kbq-vertical-navbar .kbq-navbar-container{flex-direction:column;align-items:unset}.kbq-vertical-navbar .kbq-navbar-container+.kbq-navbar-container{padding-top:var(--kbq-size-xxl);padding-bottom:var(--kbq-size-s)}.kbq-vertical-navbar .kbq-vertical-navbar__container{box-sizing:border-box;position:relative;display:flex;flex-direction:column;justify-content:space-between;height:100%}.kbq-vertical-navbar .kbq-vertical-navbar__container.kbq-collapsed{width:var(--kbq-size-6xl)}.kbq-vertical-navbar .kbq-vertical-navbar__container.kbq-expanded{width:var(--kbq-navbar-vertical-size-expanded-width)}.kbq-vertical-navbar.kbq-vertical-navbar_open-over .kbq-vertical-navbar__container{position:absolute;z-index:var(--kbq-navbar-vertical-open-over-z-index)}.kbq-navbar{background-color:var(--kbq-navbar-background)}.kbq-vertical-navbar .kbq-vertical-navbar__container{background-color:var(--kbq-navbar-vertical-background);border-right:1px solid var(--kbq-navbar-border)}.kbq-navbar-item{cursor:pointer}.kbq-navbar-item:not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-default-content-background)}.kbq-navbar-item .kbq-navbar-title{color:var(--kbq-navbar-item-default-content-text)}.kbq-navbar-item>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-default-content-icon-left)}.kbq-navbar-item .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-item .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-default-content-icon-right)}.kbq-navbar-item.kbq-hovered:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after,.kbq-navbar-item:hover:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-hover-content-background)}.kbq-navbar-item.kbq-hovered:not(.kbq-disabled) .kbq-navbar-title,.kbq-navbar-item:hover:not(.kbq-disabled) .kbq-navbar-title{color:var(--kbq-navbar-item-states-hover-content-text)}.kbq-navbar-item.kbq-hovered:not(.kbq-disabled)>.kbq-icon.kbq-empty,.kbq-navbar-item:hover:not(.kbq-disabled)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-hover-content-icon-left)}.kbq-navbar-item.kbq-hovered:not(.kbq-disabled) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-item.kbq-hovered:not(.kbq-disabled) .kbq-navbar-item-suffix .kbq-icon.kbq-empty,.kbq-navbar-item:hover:not(.kbq-disabled) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-item:hover:not(.kbq-disabled) .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-hover-content-icon-right)}.kbq-navbar-item.cdk-focused.cdk-keyboard-focused{outline:none}.kbq-navbar-item.cdk-focused.cdk-keyboard-focused:after{display:block;box-shadow:inset 0 0 0 2px var(--kbq-states-line-focus-theme)}.kbq-navbar-item:active:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after,.kbq-navbar-item.kbq-active:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-selected-content-background)}.kbq-navbar-item:active:not(.kbq-disabled) .kbq-navbar-title,.kbq-navbar-item.kbq-active:not(.kbq-disabled) .kbq-navbar-title{color:var(--kbq-navbar-item-states-selected-content-text)}.kbq-navbar-item:active:not(.kbq-disabled)>.kbq-icon.kbq-empty,.kbq-navbar-item.kbq-active:not(.kbq-disabled)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-selected-content-icon-left)}.kbq-navbar-item:active:not(.kbq-disabled) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-item:active:not(.kbq-disabled) .kbq-navbar-item-suffix .kbq-icon.kbq-empty,.kbq-navbar-item.kbq-active:not(.kbq-disabled) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-item.kbq-active:not(.kbq-disabled) .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-selected-content-icon-right)}.kbq-navbar-item.kbq-navbar-focusable-item{outline:none}.kbq-navbar-item.kbq-disabled:not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-disabled-content-background)}.kbq-navbar-item.kbq-disabled .kbq-navbar-title{color:var(--kbq-navbar-item-states-disabled-content-text)}.kbq-navbar-item.kbq-disabled>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-disabled-content-icon-left)}.kbq-navbar-item.kbq-disabled .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-item.kbq-disabled .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-disabled-content-icon-right)}.kbq-navbar-item.kbq-disabled{pointer-events:none;cursor:default}.kbq-navbar-divider{background:var(--kbq-line-contrast-less)}.kbq-navbar-title{font-size:var(--kbq-typography-text-normal-medium-font-size);font-style:var(--kbq-typography-text-normal-medium-font-style);font-weight:var(--kbq-typography-text-normal-medium-font-weight);line-height:var(--kbq-typography-text-normal-medium-line-height);font-family:var(--kbq-typography-text-normal-medium-font-family);text-transform:var(--kbq-typography-text-normal-medium-text-transform);font-feature-settings:var(--kbq-typography-text-normal-medium-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-medium-letter-spacing)}\n", "@charset \"UTF-8\";.kbq-truncate-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.kbq-navbar-item.kbq-vertical{height:var(--kbq-navbar-item-vertical-size-height)}.kbq-navbar-item.kbq-vertical .kbq-navbar-item__container{gap:var(--kbq-size-m)}.kbq-navbar-item.kbq-vertical .kbq-navbar-item-suffix{margin-left:auto}.kbq-navbar-item.kbq-vertical{padding-right:var(--kbq-size-xl);padding-left:var(--kbq-size-xl)}.kbq-navbar-item.kbq-vertical:after{top:0;right:var(--kbq-size-s);bottom:1px;left:var(--kbq-size-s)}.kbq-navbar-item.kbq-vertical.kbq-navbar-bento{display:flex;justify-content:start;align-items:center;height:var(--kbq-size-5xl);padding-top:var(--kbq-size-s)}.kbq-navbar-item.kbq-vertical.kbq-navbar-bento:after{top:var(--kbq-size-s);bottom:0}.kbq-navbar-item.kbq-vertical.kbq-navbar-bento+.kbq-navbar-brand.kbq-vertical{padding:var(--kbq-size-xxs) var(--kbq-size-m) var(--kbq-size-m)}.kbq-navbar-item.kbq-vertical.kbq-navbar-bento+.kbq-navbar-brand.kbq-vertical:after{top:0}.kbq-navbar-item.kbq-vertical.kbq-expanded{align-items:center;gap:var(--kbq-size-m)}.kbq-navbar-item.kbq-vertical.kbq-expanded .kbq-badge{position:static}.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-item_has-nested{align-items:center;padding:0 var(--kbq-size-m)}.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento .kbq-navbar-item__title{margin-left:calc(-1 * var(--kbq-size-s));opacity:0;transition:opacity .15s ease-out,margin-left .15s ease-out}.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento .kbq-navbar-item__title.kbq-animations-disabled{animation:none;transition:none}@media(prefers-reduced-motion:reduce){.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento .kbq-navbar-item__title{animation:none;transition:none}}.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento:hover .kbq-navbar-item__title,.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento.cdk-keyboard-focused .kbq-navbar-item__title,.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento.kbq-active .kbq-navbar-item__title,.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento.kbq-pressed .kbq-navbar-item__title{margin-left:0;opacity:1}.kbq-navbar-item.kbq-vertical.kbq-collapsed{width:var(--kbq-size-6xl);justify-content:center}.kbq-navbar-item.kbq-vertical.kbq-collapsed .kbq-badge{top:calc(-1 * var(--kbq-size-3xs));right:var(--kbq-size-xs)}.kbq-navbar-item.kbq-vertical.kbq-collapsed .kbq-navbar-item__container{display:none}.kbq-navbar-item.kbq-vertical>.kbq-icon{display:flex;justify-content:center;align-items:center}button.kbq-navbar-item.kbq-vertical{width:100%}.kbq-navbar-item.kbq-horizontal{position:relative;flex-direction:row;box-sizing:border-box;outline:none;-webkit-tap-highlight-color:transparent;min-height:var(--kbq-size-3xl);min-width:var(--kbq-size-3xl);margin:var(--kbq-size-s);justify-content:center}.kbq-navbar-item.kbq-horizontal:before{top:calc(-1 * var(--kbq-size-s));left:calc(-1 * var(--kbq-size-s));right:calc(-1 * var(--kbq-size-s));bottom:calc(-1 * var(--kbq-size-s))}.kbq-navbar-item.kbq-horizontal:after{inset:0}.kbq-navbar-item.kbq-horizontal .kbq-navbar-item__title{padding-left:var(--kbq-size-xxs);padding-right:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal .kbq-navbar-item__arrow-icon{padding-left:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal .kbq-navbar-item-suffix{margin-left:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_with-title:not(.kbq-navbar-item_collapsed){margin-left:0;margin-right:0;padding-right:var(--kbq-size-m);padding-left:var(--kbq-size-m)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_with-title:not(.kbq-navbar-item_collapsed):before{left:0;right:0}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_with-title:not(.kbq-navbar-item_collapsed)>.kbq-icon{align-self:center;padding-right:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-bento{justify-content:center;margin-right:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-bento:before{right:calc(-1 * var(--kbq-size-xxs))}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_collapsed{justify-content:center;padding:var(--kbq-size-s)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_collapsed .kbq-navbar-item__container{display:none}.kbq-navbar-item.kbq-horizontal .kbq-badge{top:calc(-1 * var(--kbq-size-3xs));right:calc(-1 * var(--kbq-size-3xs))}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_has-nested{margin-left:var(--kbq-size-m);margin-right:var(--kbq-size-m)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_has-nested:before{left:calc(-1 * var(--kbq-size-m));right:calc(-1 * var(--kbq-size-m))}.kbq-navbar-item{box-sizing:border-box;position:relative;display:flex;align-items:center;border-radius:var(--kbq-navbar-item-size-content-border-radius)}@supports (corner-shape: squircle){.kbq-navbar-item{corner-shape:squircle;border-radius:clamp(var(--kbq-navbar-item-size-content-border-radius) * 1.85,var(--kbq-navbar-item-size-content-border-radius) * 2.3 - 3.6px,var(--kbq-navbar-item-size-content-border-radius) * 2)}}.kbq-navbar-item .kbq-icon{min-width:var(--kbq-size-l);min-height:var(--kbq-size-l)}.kbq-navbar-item .kbq-badge-filled.kbq-badge_fade-contrast{background:linear-gradient(var(--kbq-background-contrast-fade),var(--kbq-background-contrast-fade)),var(--kbq-background-bg-tertiary)}.kbq-navbar-item .kbq-button-icon{position:absolute;padding-left:var(--kbq-size-xs);padding-right:var(--kbq-size-xs);top:50%;transform:translateY(-50%)}.kbq-navbar-item:before{position:absolute;content:\"\"}.kbq-navbar-item:after{position:absolute;content:\"\";display:none;border-radius:var(--kbq-navbar-item-size-content-border-radius)}@supports (corner-shape: squircle){.kbq-navbar-item:after{corner-shape:squircle;border-radius:clamp(var(--kbq-navbar-item-size-content-border-radius) * 1.85,var(--kbq-navbar-item-size-content-border-radius) * 2.3 - 3.6px,var(--kbq-navbar-item-size-content-border-radius) * 2)}}.kbq-navbar-item .kbq-badge{position:absolute;z-index:1}.kbq-navbar-title{display:inline-block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.kbq-navbar-item__title{display:flex;flex-direction:column;align-self:center;min-width:0}.kbq-navbar-item__container{display:flex;flex-direction:row;flex:1 1 auto;justify-content:space-between;min-width:0}.kbq-navbar-item__container .kbq-icon{align-self:center}.kbq-navbar-item.kbq-navbar-item_has-nested .kbq-button{flex:1}.kbq-navbar-item.kbq-navbar-item_has-nested .kbq-button .kbq-button-wrapper{justify-content:center}.kbq-navbar-item.kbq-navbar-item_has-nested .kbq-button .kbq-button-wrapper .kbq-icon.kbq-icon_left{margin-left:unset}.kbq-navbar-item.kbq-navbar-item_has-nested .kbq-button .kbq-button-wrapper .kbq-icon.kbq-icon_right{margin-right:unset}a.kbq-navbar-item,a.kbq-navbar-title{text-decoration:none}.kbq-navbar-item [kbq-button],.kbq-navbar-brand [kbq-button],.kbq-navbar-toggle [kbq-button]{z-index:1}\n", "button.kbq-navbar-item,button.kbq-navbar-brand{background:transparent;border:none}.kbq-navbar-logo{display:flex}.kbq-navbar-brand{position:relative;display:flex;border-radius:var(--kbq-size-s)}@supports (corner-shape: squircle){.kbq-navbar-brand{corner-shape:squircle;border-radius:clamp(var(--kbq-size-s) * 1.85,var(--kbq-size-s) * 2.3 - 3.6px,var(--kbq-size-s) * 2)}}.kbq-navbar-brand:after{position:absolute;content:\"\";display:none;border-radius:var(--kbq-navbar-item-size-content-border-radius)}@supports (corner-shape: squircle){.kbq-navbar-brand:after{corner-shape:squircle;border-radius:clamp(var(--kbq-navbar-item-size-content-border-radius) * 1.85,var(--kbq-navbar-item-size-content-border-radius) * 2.3 - 3.6px,var(--kbq-navbar-item-size-content-border-radius) * 2)}}.kbq-navbar-brand:not(.kbq-disabled) .kbq-navbar-title{cursor:pointer}a.kbq-navbar-brand{text-decoration:none}.kbq-navbar-brand.kbq-horizontal{padding:var(--kbq-size-s) var(--kbq-size-xs) var(--kbq-size-s) var(--kbq-size-xxs);align-items:center;gap:var(--kbq-size-s)}.kbq-navbar-brand.kbq-horizontal:after{top:var(--kbq-size-xxs);right:var(--kbq-size-xxs);bottom:var(--kbq-size-xxs);left:0}.kbq-navbar-brand.kbq-horizontal .kbq-navbar-title{box-sizing:content-box;max-width:154px;padding-right:var(--kbq-size-m)}.kbq-navbar-brand.kbq-vertical{flex-direction:row;align-items:center;padding:var(--kbq-size-m)}.kbq-navbar-brand.kbq-vertical:after{top:var(--kbq-size-s);right:var(--kbq-size-s);bottom:var(--kbq-size-s);left:var(--kbq-size-s)}.kbq-navbar-brand.kbq-vertical .kbq-navbar-logo{align-items:center}.kbq-navbar-brand.kbq-vertical .kbq-navbar-title{display:block;align-items:center;padding-left:var(--kbq-size-s)}.kbq-navbar-brand.kbq-vertical.kbq-expanded .kbq-navbar-title{max-width:var(--kbq-navbar-brand-vertical-size-title-max-width)}.kbq-navbar-brand.kbq-vertical.kbq-collapsed .kbq-navbar-title{display:none}.kbq-navbar-brand.kbq-navbar-brand_long-title .kbq-navbar-title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;white-space:normal}.kbq-navbar-brand:not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-default-content-background)}.kbq-navbar-brand .kbq-navbar-title{color:var(--kbq-navbar-item-default-content-text)}.kbq-navbar-brand>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-default-content-icon-left)}.kbq-navbar-brand .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-brand .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-default-content-icon-right)}.kbq-navbar-brand.kbq-disabled{cursor:default}.kbq-navbar-brand.kbq-navbar-brand_link:not(.kbq-disabled){cursor:pointer}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-hover-content-background)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled) .kbq-navbar-title{color:var(--kbq-navbar-item-states-hover-content-text)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-hover-content-icon-left)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled) .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-hover-content-icon-right)}.kbq-navbar-brand.kbq-navbar-brand_link.cdk-focused.cdk-keyboard-focused:not(.kbq-disabled){outline:none}.kbq-navbar-brand.kbq-navbar-brand_link.cdk-focused.cdk-keyboard-focused:not(.kbq-disabled):after{display:block;box-shadow:inset 0 0 0 2px var(--kbq-states-line-focus-theme)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand):not(.kbq-navbar-item_has-nested):after,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-selected-content-background)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-title,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-title{color:var(--kbq-navbar-item-states-selected-content-text)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand)>.kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-selected-content-icon-left)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-item-suffix .kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-selected-content-icon-right)}.kbq-navbar-brand.kbq-navbar-brand_link.kbq-vertical:hover:not(.kbq-disabled) .kbq-navbar-logo{transform:scale(1.06)}.kbq-navbar-brand.kbq-navbar-brand_link.kbq-horizontal:hover:not(.kbq-disabled) .kbq-navbar-logo{z-index:1}.kbq-navbar-brand.kbq-navbar-focusable-item{outline:none}.kbq-navbar-brand .kbq-navbar-title{font-size:var(--kbq-typography-navbar-title-font-size);font-style:var(--kbq-typography-navbar-title-font-style);font-weight:var(--kbq-typography-navbar-title-font-weight);line-height:var(--kbq-typography-navbar-title-line-height);font-family:var(--kbq-typography-navbar-title-font-family);text-transform:var(--kbq-typography-navbar-title-text-transform);font-feature-settings:var(--kbq-typography-navbar-title-font-feature-settings);letter-spacing:var(--kbq-typography-navbar-title-letter-spacing)}.kbq-navbar-brand.kbq-navbar-brand_long-title .kbq-navbar-title{font-size:var(--kbq-typography-text-normal-strong-font-size);font-style:var(--kbq-typography-text-normal-strong-font-style);font-weight:var(--kbq-typography-text-normal-strong-font-weight);line-height:var(--kbq-typography-text-normal-strong-line-height);font-family:var(--kbq-typography-text-normal-strong-font-family);text-transform:var(--kbq-typography-text-normal-strong-text-transform);font-feature-settings:var(--kbq-typography-text-normal-strong-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-strong-letter-spacing);line-height:16px}\n", ".kbq-navbar-divider{display:block}.kbq-navbar-divider.kbq-vertical{height:1px;margin:var(--kbq-size-xs) var(--kbq-size-l)}.kbq-navbar-divider.kbq-horizontal{width:1px;height:var(--kbq-size-m);margin-left:var(--kbq-size-m);margin-right:var(--kbq-size-m)}\n", ".kbq-navbar,.kbq-vertical-navbar{--kbq-navbar-item-size-content-border-radius: var(--kbq-size-border-radius);--kbq-navbar-item-vertical-size-height: 41px;--kbq-navbar-vertical-size-expanded-width: 240px;--kbq-navbar-brand-vertical-size-title-max-width: 200px;--kbq-navbar-toggle-size-circle: 28px;--kbq-navbar-z-index: 990;--kbq-navbar-vertical-open-over-z-index: 989;--kbq-navbar-toggle-z-index: 991;--kbq-navbar-background: var(--kbq-background-bg);--kbq-navbar-vertical-background: var(--kbq-background-bg-tertiary);--kbq-navbar-border: var(--kbq-line-contrast-less);--kbq-navbar-item-default-content-text: var(--kbq-foreground-contrast);--kbq-navbar-item-default-content-background: transparent;--kbq-navbar-item-default-content-icon-left: var(--kbq-icon-contrast);--kbq-navbar-item-default-content-icon-right: var(--kbq-icon-contrast);--kbq-navbar-item-states-hover-content-text: var(--kbq-foreground-contrast);--kbq-navbar-item-states-hover-content-background: var(--kbq-states-background-transparent-hover);--kbq-navbar-item-states-hover-content-icon-left: var(--kbq-states-icon-contrast-hover);--kbq-navbar-item-states-hover-content-icon-right: var(--kbq-states-icon-contrast-hover);--kbq-navbar-item-states-selected-content-text: var(--kbq-foreground-contrast);--kbq-navbar-item-states-selected-content-background: var(--kbq-states-background-transparent-active);--kbq-navbar-item-states-selected-content-icon-left: var(--kbq-states-icon-contrast-active);--kbq-navbar-item-states-selected-content-icon-right: var(--kbq-states-icon-contrast-active);--kbq-navbar-item-states-selected-hover-content-text: var(--kbq-foreground-contrast);--kbq-navbar-item-states-selected-hover-content-background: var(--kbq-states-background-transparent-hover);--kbq-navbar-item-states-selected-hover-content-icon-left: var(--kbq-states-icon-contrast-hover);--kbq-navbar-item-states-selected-hover-content-icon-right: var(--kbq-states-icon-contrast-hover);--kbq-navbar-item-states-disabled-content-text: var(--kbq-states-foreground-disabled);--kbq-navbar-item-states-disabled-content-background: transparent;--kbq-navbar-item-states-disabled-content-icon-left: var(--kbq-states-icon-disabled);--kbq-navbar-item-states-disabled-content-icon-right: var(--kbq-states-icon-disabled)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1047
1301
  }
1048
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqVerticalNavbar, decorators: [{
1302
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqVerticalNavbar, decorators: [{
1049
1303
  type: Component,
1050
1304
  args: [{ selector: 'kbq-vertical-navbar', template: `
1051
- <div class="kbq-vertical-navbar__container" [class.kbq-collapsed]="!expanded" [class.kbq-expanded]="expanded">
1305
+ <div
1306
+ class="kbq-vertical-navbar__container"
1307
+ [class.kbq-collapsed]="!expanded()"
1308
+ [class.kbq-expanded]="expanded()"
1309
+ >
1052
1310
  <ng-content select="[kbq-navbar-container], kbq-navbar-container" />
1053
1311
  <ng-content select="[kbq-navbar-toggle], kbq-navbar-toggle" />
1054
1312
  </div>
1055
1313
  `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
1056
1314
  class: 'kbq-vertical-navbar',
1315
+ role: 'navigation',
1316
+ '[attr.aria-label]': 'ariaLabel()',
1057
1317
  '[class.kbq-vertical-navbar_open-over]': 'openOver()',
1058
- '[attr.tabindex]': 'tabIndex',
1318
+ '[attr.tabindex]': 'renderedTabIndex()',
1059
1319
  '[attr.cdkMonitorSubtreeFocus]': 'true',
1060
1320
  '(focus)': 'focus()',
1061
1321
  '(blur)': 'blur()',
1062
1322
  '(keydown)': 'onKeyDown($event)'
1063
- }, hostDirectives: [CdkMonitorFocus], exportAs: 'KbqVerticalNavbar', styles: ["button.kbq-navbar-item,button.kbq-navbar-brand{background:transparent;border:none}.kbq-vertical-navbar{display:flex;flex-shrink:0;position:relative;min-width:var(--kbq-size-6xl);height:100%}.kbq-vertical-navbar:not(:hover,.kbq-hovered,.cdk-keyboard-focused) .kbq-navbar-toggle{display:none}.kbq-vertical-navbar .kbq-navbar-container{flex-direction:column;align-items:unset}.kbq-vertical-navbar .kbq-navbar-container+.kbq-navbar-container{padding-top:var(--kbq-size-xxl);padding-bottom:var(--kbq-size-s)}.kbq-vertical-navbar .kbq-vertical-navbar__container{box-sizing:border-box;position:relative;display:flex;flex-direction:column;justify-content:space-between;height:100%}.kbq-vertical-navbar .kbq-vertical-navbar__container.kbq-collapsed{width:var(--kbq-size-6xl)}.kbq-vertical-navbar .kbq-vertical-navbar__container.kbq-expanded{width:240px}.kbq-vertical-navbar.kbq-vertical-navbar_open-over .kbq-vertical-navbar__container{position:absolute;z-index:998}.kbq-navbar{background-color:var(--kbq-navbar-background)}.kbq-vertical-navbar .kbq-vertical-navbar__container{background-color:var(--kbq-navbar-vertical-background);border-right:1px solid var(--kbq-navbar-border)}.kbq-navbar-item{cursor:pointer}.kbq-navbar-item:not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-default-content-background)}.kbq-navbar-item .kbq-navbar-title{color:var(--kbq-navbar-item-default-content-text)}.kbq-navbar-item>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-default-content-icon-left)!important}.kbq-navbar-item.kbq-hovered:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after,.kbq-navbar-item:hover:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-hover-content-background)}.kbq-navbar-item.kbq-hovered:not(.kbq-disabled) .kbq-navbar-title,.kbq-navbar-item:hover:not(.kbq-disabled) .kbq-navbar-title{color:var(--kbq-navbar-item-states-hover-content-text)}.kbq-navbar-item.kbq-hovered:not(.kbq-disabled)>.kbq-icon.kbq-empty,.kbq-navbar-item:hover:not(.kbq-disabled)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-hover-content-icon-left)!important}.kbq-navbar-item.cdk-focused.cdk-keyboard-focused{outline:none}.kbq-navbar-item.cdk-focused.cdk-keyboard-focused:after{display:block;box-shadow:inset 0 0 0 2px var(--kbq-states-line-focus-theme)}.kbq-navbar-item:active:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after,.kbq-navbar-item.kbq-active:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-selected-content-background)}.kbq-navbar-item:active:not(.kbq-disabled) .kbq-navbar-title,.kbq-navbar-item.kbq-active:not(.kbq-disabled) .kbq-navbar-title{color:var(--kbq-navbar-item-states-selected-content-text)}.kbq-navbar-item:active:not(.kbq-disabled)>.kbq-icon.kbq-empty,.kbq-navbar-item.kbq-active:not(.kbq-disabled)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-selected-content-icon-left)!important}.kbq-navbar-item.kbq-navbar-focusable-item{outline:none}.kbq-navbar-item.kbq-disabled:not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-disabled-content-background)}.kbq-navbar-item.kbq-disabled .kbq-navbar-title{color:var(--kbq-navbar-item-states-disabled-content-text)}.kbq-navbar-item.kbq-disabled>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-disabled-content-icon-left)!important}.kbq-navbar-item.kbq-disabled{pointer-events:none;cursor:default}.kbq-navbar-divider{background:var(--kbq-line-contrast-less)}.kbq-navbar-title{font-size:var(--kbq-typography-text-normal-medium-font-size);font-style:var(--kbq-typography-text-normal-medium-font-style);font-weight:var(--kbq-typography-text-normal-medium-font-weight);line-height:var(--kbq-typography-text-normal-medium-line-height);font-family:var(--kbq-typography-text-normal-medium-font-family);text-transform:var(--kbq-typography-text-normal-medium-text-transform);font-feature-settings:var(--kbq-typography-text-normal-medium-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-medium-letter-spacing)}\n", ".kbq-truncate-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.kbq-no-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.kbq-navbar-item.kbq-vertical{height:41px}.kbq-navbar-item.kbq-vertical .kbq-navbar-item__container{gap:var(--kbq-size-m)}.kbq-navbar-item.kbq-vertical{padding-right:var(--kbq-size-xl);padding-left:var(--kbq-size-xl)}.kbq-navbar-item.kbq-vertical:after{top:0;right:var(--kbq-size-s);bottom:1px;left:var(--kbq-size-s)}.kbq-navbar-item.kbq-vertical.kbq-navbar-bento{display:flex;justify-content:start;align-items:center;height:var(--kbq-size-5xl);padding-top:var(--kbq-size-s)}.kbq-navbar-item.kbq-vertical.kbq-navbar-bento:after{top:var(--kbq-size-s);bottom:0}.kbq-navbar-item.kbq-vertical.kbq-navbar-bento+.kbq-navbar-brand.kbq-vertical{padding:var(--kbq-size-xxs) var(--kbq-size-m) var(--kbq-size-m)}.kbq-navbar-item.kbq-vertical.kbq-navbar-bento+.kbq-navbar-brand.kbq-vertical:after{top:0}.kbq-navbar-item.kbq-vertical.kbq-expanded{align-items:center;gap:var(--kbq-size-m)}.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-item_has-nested{align-items:center;padding:0 var(--kbq-size-m)}.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento .kbq-navbar-item__title{margin-left:-8px;opacity:0;transition:opacity .15s ease-out,margin-left .15s ease-out}.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento:hover .kbq-navbar-item__title,.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento.cdk-keyboard-focused .kbq-navbar-item__title,.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento.kbq-active .kbq-navbar-item__title,.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento.kbq-pressed .kbq-navbar-item__title{margin-left:0;opacity:1}.kbq-navbar-item.kbq-vertical.kbq-collapsed{width:var(--kbq-size-6xl);justify-content:center}.kbq-navbar-item.kbq-vertical.kbq-collapsed .kbq-badge{position:absolute;z-index:1;top:calc(-1 * var(--kbq-size-3xs));right:var(--kbq-size-xs)}.kbq-navbar-item.kbq-vertical.kbq-collapsed .kbq-navbar-item__container{display:none}.kbq-navbar-item.kbq-vertical>.kbq-icon{display:flex;justify-content:center;align-items:center}button.kbq-navbar-item.kbq-vertical{width:100%}.kbq-navbar-item.kbq-horizontal{position:relative;flex-direction:row;box-sizing:border-box;outline:none;-webkit-tap-highlight-color:transparent;min-height:var(--kbq-size-3xl);min-width:var(--kbq-size-3xl);margin:var(--kbq-size-s);justify-content:center}.kbq-navbar-item.kbq-horizontal:before{top:calc(-1 * var(--kbq-size-s));left:calc(-1 * var(--kbq-size-s));right:calc(-1 * var(--kbq-size-s));bottom:calc(-1 * var(--kbq-size-s))}.kbq-navbar-item.kbq-horizontal:after{inset:0}.kbq-navbar-item.kbq-horizontal .kbq-navbar-item__title{padding-left:var(--kbq-size-xxs);padding-right:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal .kbq-navbar-item__arrow-icon{padding-left:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_with-title:not(.kbq-navbar-item_collapsed){margin-left:0;margin-right:0;padding-right:var(--kbq-size-m);padding-left:var(--kbq-size-m)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_with-title:not(.kbq-navbar-item_collapsed):before{left:0;right:0}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_with-title:not(.kbq-navbar-item_collapsed)>.kbq-icon{align-self:center;padding-right:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-bento{justify-content:center;margin-right:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-bento:before{right:calc(-1 * var(--kbq-size-xxs))}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_collapsed{justify-content:center;padding:var(--kbq-size-s)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_collapsed .kbq-navbar-item__container{display:none}.kbq-navbar-item.kbq-horizontal .kbq-badge{position:absolute;z-index:1;top:-2px;right:-2px}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_has-nested{margin-left:var(--kbq-size-m);margin-right:var(--kbq-size-m)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_has-nested:before{left:calc(-1 * var(--kbq-size-m));right:calc(-1 * var(--kbq-size-m))}.kbq-navbar-item{box-sizing:border-box;position:relative;display:flex;align-items:center;border-radius:var(--kbq-navbar-item-size-content-border-radius)}.kbq-navbar-item .kbq-icon{min-width:var(--kbq-size-l);min-height:var(--kbq-size-l)}.kbq-navbar-item .kbq-badge-filled.kbq-badge_fade-contrast{background:linear-gradient(var(--kbq-background-contrast-fade),var(--kbq-background-contrast-fade)),var(--kbq-background-bg-tertiary)}.kbq-navbar-item .kbq-button-icon{position:absolute;padding-left:var(--kbq-size-xs);padding-right:var(--kbq-size-xs);top:50%;transform:translateY(-50%)}.kbq-navbar-item:before{position:absolute;content:\"\"}.kbq-navbar-item:after{position:absolute;content:\"\";display:none;border-radius:var(--kbq-navbar-item-size-content-border-radius)}.kbq-navbar-title{display:inline-block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.kbq-navbar-item__title{display:flex;flex-direction:column;align-self:center;min-width:0}.kbq-navbar-item__container{display:flex;flex-direction:row;flex:1 1 auto;justify-content:space-between;min-width:0}.kbq-navbar-item__container .kbq-icon{align-self:center}.kbq-navbar-item.kbq-navbar-item_has-nested .kbq-button{flex:1}.kbq-navbar-item.kbq-navbar-item_has-nested .kbq-button .kbq-button-wrapper{justify-content:center}.kbq-navbar-item.kbq-navbar-item_has-nested .kbq-button .kbq-button-wrapper .kbq-icon.kbq-icon_left{margin-left:unset}.kbq-navbar-item.kbq-navbar-item_has-nested .kbq-button .kbq-button-wrapper .kbq-icon.kbq-icon_right{margin-right:unset}a.kbq-navbar-item,a.kbq-navbar-title{text-decoration:none}.kbq-navbar-item [kbq-button],.kbq-navbar-brand [kbq-button],.kbq-navbar-toggle [kbq-button]{z-index:1}\n", "button.kbq-navbar-item,button.kbq-navbar-brand{background:transparent;border:none}.kbq-navbar-logo{display:flex}.kbq-navbar-brand{position:relative;display:flex;border-radius:var(--kbq-size-s)}.kbq-navbar-brand:after{position:absolute;content:\"\";display:none;border-radius:var(--kbq-navbar-item-size-content-border-radius)}.kbq-navbar-brand:not(.kbq-disabled) .kbq-navbar-title{cursor:pointer}a.kbq-navbar-brand{text-decoration:none}.kbq-navbar-brand.kbq-horizontal{padding:var(--kbq-size-s) var(--kbq-size-xs) var(--kbq-size-s) var(--kbq-size-xxs);align-items:center;gap:var(--kbq-size-s)}.kbq-navbar-brand.kbq-horizontal:after{top:var(--kbq-size-xxs);right:var(--kbq-size-xxs);bottom:var(--kbq-size-xxs);left:0}.kbq-navbar-brand.kbq-horizontal .kbq-navbar-title{box-sizing:content-box;max-width:154px;padding-right:var(--kbq-size-m)}.kbq-navbar-brand.kbq-vertical{flex-direction:row;align-items:center;padding:var(--kbq-size-m)}.kbq-navbar-brand.kbq-vertical:after{top:var(--kbq-size-s);right:var(--kbq-size-s);bottom:var(--kbq-size-s);left:var(--kbq-size-s)}.kbq-navbar-brand.kbq-vertical .kbq-navbar-logo{align-items:center}.kbq-navbar-brand.kbq-vertical .kbq-navbar-title{display:block;align-items:center;padding-left:var(--kbq-size-s)}.kbq-navbar-brand.kbq-vertical.kbq-expanded .kbq-navbar-title{max-width:200px}.kbq-navbar-brand.kbq-vertical.kbq-collapsed .kbq-navbar-title{display:none!important}.kbq-navbar-brand.kbq-navbar-brand_long-title .kbq-navbar-title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;white-space:normal}.kbq-navbar-brand:not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-default-content-background)}.kbq-navbar-brand .kbq-navbar-title{color:var(--kbq-navbar-item-default-content-text)}.kbq-navbar-brand>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-default-content-icon-left)!important}.kbq-navbar-brand.kbq-disabled{cursor:default}.kbq-navbar-brand.kbq-navbar-brand_link:not(.kbq-disabled){cursor:pointer}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-hover-content-background)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled) .kbq-navbar-title{color:var(--kbq-navbar-item-states-hover-content-text)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-hover-content-icon-left)!important}.kbq-navbar-brand.kbq-navbar-brand_link.cdk-focused.cdk-keyboard-focused:not(.kbq-disabled){outline:none}.kbq-navbar-brand.kbq-navbar-brand_link.cdk-focused.cdk-keyboard-focused:not(.kbq-disabled):after{display:block;box-shadow:inset 0 0 0 2px var(--kbq-states-line-focus-theme)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand):not(.kbq-navbar-item_has-nested):after,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-selected-content-background)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-title,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-title{color:var(--kbq-navbar-item-states-selected-content-text)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand)>.kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-selected-content-icon-left)!important}.kbq-navbar-brand.kbq-navbar-brand_link.kbq-vertical:hover:not(.kbq-disabled) .kbq-navbar-logo{transform:scale(1.06)}.kbq-navbar-brand.kbq-navbar-brand_link.kbq-horizontal:hover:not(.kbq-disabled) .kbq-navbar-logo{z-index:1}.kbq-navbar-brand.kbq-navbar-focusable-item{outline:none}.kbq-navbar-brand .kbq-navbar-title{font-size:var(--kbq-typography-navbar-title-font-size);font-style:var(--kbq-typography-navbar-title-font-style);font-weight:var(--kbq-typography-navbar-title-font-weight);line-height:var(--kbq-typography-navbar-title-line-height);font-family:var(--kbq-typography-navbar-title-font-family);text-transform:var(--kbq-typography-navbar-title-text-transform);font-feature-settings:var(--kbq-typography-navbar-title-font-feature-settings);letter-spacing:var(--kbq-typography-navbar-title-letter-spacing)}.kbq-navbar-brand.kbq-navbar-brand_long-title .kbq-navbar-title{font-size:var(--kbq-typography-text-normal-strong-font-size);font-style:var(--kbq-typography-text-normal-strong-font-style);font-weight:var(--kbq-typography-text-normal-strong-font-weight);line-height:var(--kbq-typography-text-normal-strong-line-height);font-family:var(--kbq-typography-text-normal-strong-font-family);text-transform:var(--kbq-typography-text-normal-strong-text-transform);font-feature-settings:var(--kbq-typography-text-normal-strong-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-strong-letter-spacing);line-height:16px}\n", ".kbq-navbar-divider{display:block}.kbq-navbar-divider.kbq-vertical{height:1px;margin:var(--kbq-size-xs) var(--kbq-size-l)}.kbq-navbar-divider.kbq-horizontal{width:1px;height:12px;margin-left:var(--kbq-size-m);margin-right:var(--kbq-size-m)}\n", ".kbq-navbar,.kbq-vertical-navbar{--kbq-navbar-item-size-content-border-radius: var(--kbq-size-border-radius);--kbq-navbar-background: var(--kbq-background-bg);--kbq-navbar-vertical-background: var(--kbq-background-bg-tertiary);--kbq-navbar-border: var(--kbq-line-contrast-less);--kbq-navbar-item-default-content-text: var(--kbq-foreground-contrast);--kbq-navbar-item-default-content-background: transparent;--kbq-navbar-item-default-content-icon-left: var(--kbq-icon-contrast);--kbq-navbar-item-default-content-icon-right: var(--kbq-icon-contrast);--kbq-navbar-item-states-hover-content-text: var(--kbq-foreground-contrast);--kbq-navbar-item-states-hover-content-background: var(--kbq-states-background-transparent-hover);--kbq-navbar-item-states-hover-content-icon-left: var(--kbq-states-icon-contrast-hover);--kbq-navbar-item-states-hover-content-icon-right: var(--kbq-states-icon-contrast-hover);--kbq-navbar-item-states-selected-content-text: var(--kbq-foreground-contrast);--kbq-navbar-item-states-selected-content-background: var(--kbq-states-background-transparent-active);--kbq-navbar-item-states-selected-content-icon-left: var(--kbq-states-icon-contrast-active);--kbq-navbar-item-states-selected-content-icon-right: var(--kbq-states-icon-contrast-active);--kbq-navbar-item-states-selected-hover-content-text: var(--kbq-foreground-contrast);--kbq-navbar-item-states-selected-hover-content-background: var(--kbq-states-background-transparent-hover);--kbq-navbar-item-states-selected-hover-content-icon-left: var(--kbq-states-icon-contrast-hover);--kbq-navbar-item-states-selected-hover-content-icon-right: var(--kbq-states-icon-contrast-hover);--kbq-navbar-item-states-disabled-content-text: var(--kbq-states-foreground-disabled);--kbq-navbar-item-states-disabled-content-background: transparent;--kbq-navbar-item-states-disabled-content-icon-left: var(--kbq-states-icon-disabled);--kbq-navbar-item-states-disabled-content-icon-right: var(--kbq-states-icon-disabled)}\n"] }]
1064
- }], ctorParameters: () => [], propDecorators: { rectangleElements: [{ type: i0.ContentChildren, args: [forwardRef(() => KbqNavbarRectangleElement), { ...{ descendants: true }, isSignal: true }] }], items: [{ type: i0.ContentChildren, args: [forwardRef(() => KbqNavbarItem), { ...{ descendants: true }, isSignal: true }] }], bento: [{ type: i0.ContentChild, args: [forwardRef(() => KbqNavbarBento), { isSignal: true }] }], openOver: [{ type: i0.Input, args: [{ isSignal: true, alias: "openOver", required: false }] }], expanded: [{
1065
- type: Input
1066
- }] } });
1323
+ }, hostDirectives: [
1324
+ CdkMonitorFocus,
1325
+ { directive: KbqLocaleOverridesDirective, inputs: ['kbqLocaleOverrides: localeOverrides'] },
1326
+ KbqOverlayLayerExclude
1327
+ ], exportAs: 'KbqVerticalNavbar', styles: ["button.kbq-navbar-item,button.kbq-navbar-brand{background:transparent;border:none}.kbq-vertical-navbar{display:flex;flex-shrink:0;position:relative;min-width:var(--kbq-size-6xl);height:100%}.kbq-vertical-navbar:not(:hover,.kbq-hovered,.cdk-keyboard-focused) .kbq-navbar-toggle{display:none}.kbq-vertical-navbar .kbq-navbar-container{flex-direction:column;align-items:unset}.kbq-vertical-navbar .kbq-navbar-container+.kbq-navbar-container{padding-top:var(--kbq-size-xxl);padding-bottom:var(--kbq-size-s)}.kbq-vertical-navbar .kbq-vertical-navbar__container{box-sizing:border-box;position:relative;display:flex;flex-direction:column;justify-content:space-between;height:100%}.kbq-vertical-navbar .kbq-vertical-navbar__container.kbq-collapsed{width:var(--kbq-size-6xl)}.kbq-vertical-navbar .kbq-vertical-navbar__container.kbq-expanded{width:var(--kbq-navbar-vertical-size-expanded-width)}.kbq-vertical-navbar.kbq-vertical-navbar_open-over .kbq-vertical-navbar__container{position:absolute;z-index:var(--kbq-navbar-vertical-open-over-z-index)}.kbq-navbar{background-color:var(--kbq-navbar-background)}.kbq-vertical-navbar .kbq-vertical-navbar__container{background-color:var(--kbq-navbar-vertical-background);border-right:1px solid var(--kbq-navbar-border)}.kbq-navbar-item{cursor:pointer}.kbq-navbar-item:not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-default-content-background)}.kbq-navbar-item .kbq-navbar-title{color:var(--kbq-navbar-item-default-content-text)}.kbq-navbar-item>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-default-content-icon-left)}.kbq-navbar-item .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-item .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-default-content-icon-right)}.kbq-navbar-item.kbq-hovered:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after,.kbq-navbar-item:hover:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-hover-content-background)}.kbq-navbar-item.kbq-hovered:not(.kbq-disabled) .kbq-navbar-title,.kbq-navbar-item:hover:not(.kbq-disabled) .kbq-navbar-title{color:var(--kbq-navbar-item-states-hover-content-text)}.kbq-navbar-item.kbq-hovered:not(.kbq-disabled)>.kbq-icon.kbq-empty,.kbq-navbar-item:hover:not(.kbq-disabled)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-hover-content-icon-left)}.kbq-navbar-item.kbq-hovered:not(.kbq-disabled) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-item.kbq-hovered:not(.kbq-disabled) .kbq-navbar-item-suffix .kbq-icon.kbq-empty,.kbq-navbar-item:hover:not(.kbq-disabled) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-item:hover:not(.kbq-disabled) .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-hover-content-icon-right)}.kbq-navbar-item.cdk-focused.cdk-keyboard-focused{outline:none}.kbq-navbar-item.cdk-focused.cdk-keyboard-focused:after{display:block;box-shadow:inset 0 0 0 2px var(--kbq-states-line-focus-theme)}.kbq-navbar-item:active:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after,.kbq-navbar-item.kbq-active:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-selected-content-background)}.kbq-navbar-item:active:not(.kbq-disabled) .kbq-navbar-title,.kbq-navbar-item.kbq-active:not(.kbq-disabled) .kbq-navbar-title{color:var(--kbq-navbar-item-states-selected-content-text)}.kbq-navbar-item:active:not(.kbq-disabled)>.kbq-icon.kbq-empty,.kbq-navbar-item.kbq-active:not(.kbq-disabled)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-selected-content-icon-left)}.kbq-navbar-item:active:not(.kbq-disabled) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-item:active:not(.kbq-disabled) .kbq-navbar-item-suffix .kbq-icon.kbq-empty,.kbq-navbar-item.kbq-active:not(.kbq-disabled) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-item.kbq-active:not(.kbq-disabled) .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-selected-content-icon-right)}.kbq-navbar-item.kbq-navbar-focusable-item{outline:none}.kbq-navbar-item.kbq-disabled:not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-disabled-content-background)}.kbq-navbar-item.kbq-disabled .kbq-navbar-title{color:var(--kbq-navbar-item-states-disabled-content-text)}.kbq-navbar-item.kbq-disabled>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-disabled-content-icon-left)}.kbq-navbar-item.kbq-disabled .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-item.kbq-disabled .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-disabled-content-icon-right)}.kbq-navbar-item.kbq-disabled{pointer-events:none;cursor:default}.kbq-navbar-divider{background:var(--kbq-line-contrast-less)}.kbq-navbar-title{font-size:var(--kbq-typography-text-normal-medium-font-size);font-style:var(--kbq-typography-text-normal-medium-font-style);font-weight:var(--kbq-typography-text-normal-medium-font-weight);line-height:var(--kbq-typography-text-normal-medium-line-height);font-family:var(--kbq-typography-text-normal-medium-font-family);text-transform:var(--kbq-typography-text-normal-medium-text-transform);font-feature-settings:var(--kbq-typography-text-normal-medium-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-medium-letter-spacing)}\n", "@charset \"UTF-8\";.kbq-truncate-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.kbq-navbar-item.kbq-vertical{height:var(--kbq-navbar-item-vertical-size-height)}.kbq-navbar-item.kbq-vertical .kbq-navbar-item__container{gap:var(--kbq-size-m)}.kbq-navbar-item.kbq-vertical .kbq-navbar-item-suffix{margin-left:auto}.kbq-navbar-item.kbq-vertical{padding-right:var(--kbq-size-xl);padding-left:var(--kbq-size-xl)}.kbq-navbar-item.kbq-vertical:after{top:0;right:var(--kbq-size-s);bottom:1px;left:var(--kbq-size-s)}.kbq-navbar-item.kbq-vertical.kbq-navbar-bento{display:flex;justify-content:start;align-items:center;height:var(--kbq-size-5xl);padding-top:var(--kbq-size-s)}.kbq-navbar-item.kbq-vertical.kbq-navbar-bento:after{top:var(--kbq-size-s);bottom:0}.kbq-navbar-item.kbq-vertical.kbq-navbar-bento+.kbq-navbar-brand.kbq-vertical{padding:var(--kbq-size-xxs) var(--kbq-size-m) var(--kbq-size-m)}.kbq-navbar-item.kbq-vertical.kbq-navbar-bento+.kbq-navbar-brand.kbq-vertical:after{top:0}.kbq-navbar-item.kbq-vertical.kbq-expanded{align-items:center;gap:var(--kbq-size-m)}.kbq-navbar-item.kbq-vertical.kbq-expanded .kbq-badge{position:static}.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-item_has-nested{align-items:center;padding:0 var(--kbq-size-m)}.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento .kbq-navbar-item__title{margin-left:calc(-1 * var(--kbq-size-s));opacity:0;transition:opacity .15s ease-out,margin-left .15s ease-out}.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento .kbq-navbar-item__title.kbq-animations-disabled{animation:none;transition:none}@media(prefers-reduced-motion:reduce){.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento .kbq-navbar-item__title{animation:none;transition:none}}.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento:hover .kbq-navbar-item__title,.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento.cdk-keyboard-focused .kbq-navbar-item__title,.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento.kbq-active .kbq-navbar-item__title,.kbq-navbar-item.kbq-vertical.kbq-expanded.kbq-navbar-bento.kbq-pressed .kbq-navbar-item__title{margin-left:0;opacity:1}.kbq-navbar-item.kbq-vertical.kbq-collapsed{width:var(--kbq-size-6xl);justify-content:center}.kbq-navbar-item.kbq-vertical.kbq-collapsed .kbq-badge{top:calc(-1 * var(--kbq-size-3xs));right:var(--kbq-size-xs)}.kbq-navbar-item.kbq-vertical.kbq-collapsed .kbq-navbar-item__container{display:none}.kbq-navbar-item.kbq-vertical>.kbq-icon{display:flex;justify-content:center;align-items:center}button.kbq-navbar-item.kbq-vertical{width:100%}.kbq-navbar-item.kbq-horizontal{position:relative;flex-direction:row;box-sizing:border-box;outline:none;-webkit-tap-highlight-color:transparent;min-height:var(--kbq-size-3xl);min-width:var(--kbq-size-3xl);margin:var(--kbq-size-s);justify-content:center}.kbq-navbar-item.kbq-horizontal:before{top:calc(-1 * var(--kbq-size-s));left:calc(-1 * var(--kbq-size-s));right:calc(-1 * var(--kbq-size-s));bottom:calc(-1 * var(--kbq-size-s))}.kbq-navbar-item.kbq-horizontal:after{inset:0}.kbq-navbar-item.kbq-horizontal .kbq-navbar-item__title{padding-left:var(--kbq-size-xxs);padding-right:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal .kbq-navbar-item__arrow-icon{padding-left:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal .kbq-navbar-item-suffix{margin-left:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_with-title:not(.kbq-navbar-item_collapsed){margin-left:0;margin-right:0;padding-right:var(--kbq-size-m);padding-left:var(--kbq-size-m)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_with-title:not(.kbq-navbar-item_collapsed):before{left:0;right:0}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_with-title:not(.kbq-navbar-item_collapsed)>.kbq-icon{align-self:center;padding-right:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-bento{justify-content:center;margin-right:var(--kbq-size-xxs)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-bento:before{right:calc(-1 * var(--kbq-size-xxs))}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_collapsed{justify-content:center;padding:var(--kbq-size-s)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_collapsed .kbq-navbar-item__container{display:none}.kbq-navbar-item.kbq-horizontal .kbq-badge{top:calc(-1 * var(--kbq-size-3xs));right:calc(-1 * var(--kbq-size-3xs))}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_has-nested{margin-left:var(--kbq-size-m);margin-right:var(--kbq-size-m)}.kbq-navbar-item.kbq-horizontal.kbq-navbar-item_has-nested:before{left:calc(-1 * var(--kbq-size-m));right:calc(-1 * var(--kbq-size-m))}.kbq-navbar-item{box-sizing:border-box;position:relative;display:flex;align-items:center;border-radius:var(--kbq-navbar-item-size-content-border-radius)}@supports (corner-shape: squircle){.kbq-navbar-item{corner-shape:squircle;border-radius:clamp(var(--kbq-navbar-item-size-content-border-radius) * 1.85,var(--kbq-navbar-item-size-content-border-radius) * 2.3 - 3.6px,var(--kbq-navbar-item-size-content-border-radius) * 2)}}.kbq-navbar-item .kbq-icon{min-width:var(--kbq-size-l);min-height:var(--kbq-size-l)}.kbq-navbar-item .kbq-badge-filled.kbq-badge_fade-contrast{background:linear-gradient(var(--kbq-background-contrast-fade),var(--kbq-background-contrast-fade)),var(--kbq-background-bg-tertiary)}.kbq-navbar-item .kbq-button-icon{position:absolute;padding-left:var(--kbq-size-xs);padding-right:var(--kbq-size-xs);top:50%;transform:translateY(-50%)}.kbq-navbar-item:before{position:absolute;content:\"\"}.kbq-navbar-item:after{position:absolute;content:\"\";display:none;border-radius:var(--kbq-navbar-item-size-content-border-radius)}@supports (corner-shape: squircle){.kbq-navbar-item:after{corner-shape:squircle;border-radius:clamp(var(--kbq-navbar-item-size-content-border-radius) * 1.85,var(--kbq-navbar-item-size-content-border-radius) * 2.3 - 3.6px,var(--kbq-navbar-item-size-content-border-radius) * 2)}}.kbq-navbar-item .kbq-badge{position:absolute;z-index:1}.kbq-navbar-title{display:inline-block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.kbq-navbar-item__title{display:flex;flex-direction:column;align-self:center;min-width:0}.kbq-navbar-item__container{display:flex;flex-direction:row;flex:1 1 auto;justify-content:space-between;min-width:0}.kbq-navbar-item__container .kbq-icon{align-self:center}.kbq-navbar-item.kbq-navbar-item_has-nested .kbq-button{flex:1}.kbq-navbar-item.kbq-navbar-item_has-nested .kbq-button .kbq-button-wrapper{justify-content:center}.kbq-navbar-item.kbq-navbar-item_has-nested .kbq-button .kbq-button-wrapper .kbq-icon.kbq-icon_left{margin-left:unset}.kbq-navbar-item.kbq-navbar-item_has-nested .kbq-button .kbq-button-wrapper .kbq-icon.kbq-icon_right{margin-right:unset}a.kbq-navbar-item,a.kbq-navbar-title{text-decoration:none}.kbq-navbar-item [kbq-button],.kbq-navbar-brand [kbq-button],.kbq-navbar-toggle [kbq-button]{z-index:1}\n", "button.kbq-navbar-item,button.kbq-navbar-brand{background:transparent;border:none}.kbq-navbar-logo{display:flex}.kbq-navbar-brand{position:relative;display:flex;border-radius:var(--kbq-size-s)}@supports (corner-shape: squircle){.kbq-navbar-brand{corner-shape:squircle;border-radius:clamp(var(--kbq-size-s) * 1.85,var(--kbq-size-s) * 2.3 - 3.6px,var(--kbq-size-s) * 2)}}.kbq-navbar-brand:after{position:absolute;content:\"\";display:none;border-radius:var(--kbq-navbar-item-size-content-border-radius)}@supports (corner-shape: squircle){.kbq-navbar-brand:after{corner-shape:squircle;border-radius:clamp(var(--kbq-navbar-item-size-content-border-radius) * 1.85,var(--kbq-navbar-item-size-content-border-radius) * 2.3 - 3.6px,var(--kbq-navbar-item-size-content-border-radius) * 2)}}.kbq-navbar-brand:not(.kbq-disabled) .kbq-navbar-title{cursor:pointer}a.kbq-navbar-brand{text-decoration:none}.kbq-navbar-brand.kbq-horizontal{padding:var(--kbq-size-s) var(--kbq-size-xs) var(--kbq-size-s) var(--kbq-size-xxs);align-items:center;gap:var(--kbq-size-s)}.kbq-navbar-brand.kbq-horizontal:after{top:var(--kbq-size-xxs);right:var(--kbq-size-xxs);bottom:var(--kbq-size-xxs);left:0}.kbq-navbar-brand.kbq-horizontal .kbq-navbar-title{box-sizing:content-box;max-width:154px;padding-right:var(--kbq-size-m)}.kbq-navbar-brand.kbq-vertical{flex-direction:row;align-items:center;padding:var(--kbq-size-m)}.kbq-navbar-brand.kbq-vertical:after{top:var(--kbq-size-s);right:var(--kbq-size-s);bottom:var(--kbq-size-s);left:var(--kbq-size-s)}.kbq-navbar-brand.kbq-vertical .kbq-navbar-logo{align-items:center}.kbq-navbar-brand.kbq-vertical .kbq-navbar-title{display:block;align-items:center;padding-left:var(--kbq-size-s)}.kbq-navbar-brand.kbq-vertical.kbq-expanded .kbq-navbar-title{max-width:var(--kbq-navbar-brand-vertical-size-title-max-width)}.kbq-navbar-brand.kbq-vertical.kbq-collapsed .kbq-navbar-title{display:none}.kbq-navbar-brand.kbq-navbar-brand_long-title .kbq-navbar-title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;white-space:normal}.kbq-navbar-brand:not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-default-content-background)}.kbq-navbar-brand .kbq-navbar-title{color:var(--kbq-navbar-item-default-content-text)}.kbq-navbar-brand>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-default-content-icon-left)}.kbq-navbar-brand .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-brand .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-default-content-icon-right)}.kbq-navbar-brand.kbq-disabled{cursor:default}.kbq-navbar-brand.kbq-navbar-brand_link:not(.kbq-disabled){cursor:pointer}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-hover-content-background)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled) .kbq-navbar-title{color:var(--kbq-navbar-item-states-hover-content-text)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-hover-content-icon-left)}.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link:hover:not(.kbq-disabled) .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-hover-content-icon-right)}.kbq-navbar-brand.kbq-navbar-brand_link.cdk-focused.cdk-keyboard-focused:not(.kbq-disabled){outline:none}.kbq-navbar-brand.kbq-navbar-brand_link.cdk-focused.cdk-keyboard-focused:not(.kbq-disabled):after{display:block;box-shadow:inset 0 0 0 2px var(--kbq-states-line-focus-theme)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand):not(.kbq-navbar-item_has-nested):after,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand):not(.kbq-navbar-item_has-nested):after{display:block;background:var(--kbq-navbar-item-states-selected-content-background)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-title,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-title{color:var(--kbq-navbar-item-states-selected-content-text)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand)>.kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand)>.kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-selected-content-icon-left)}.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link:active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-item-suffix .kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-item-suffix.kbq-icon.kbq-empty,.kbq-navbar-brand.kbq-navbar-brand_link.kbq-active:not(.kbq-disabled,.kbq-vertical.kbq-navbar-brand) .kbq-navbar-item-suffix .kbq-icon.kbq-empty{color:var(--kbq-navbar-item-states-selected-content-icon-right)}.kbq-navbar-brand.kbq-navbar-brand_link.kbq-vertical:hover:not(.kbq-disabled) .kbq-navbar-logo{transform:scale(1.06)}.kbq-navbar-brand.kbq-navbar-brand_link.kbq-horizontal:hover:not(.kbq-disabled) .kbq-navbar-logo{z-index:1}.kbq-navbar-brand.kbq-navbar-focusable-item{outline:none}.kbq-navbar-brand .kbq-navbar-title{font-size:var(--kbq-typography-navbar-title-font-size);font-style:var(--kbq-typography-navbar-title-font-style);font-weight:var(--kbq-typography-navbar-title-font-weight);line-height:var(--kbq-typography-navbar-title-line-height);font-family:var(--kbq-typography-navbar-title-font-family);text-transform:var(--kbq-typography-navbar-title-text-transform);font-feature-settings:var(--kbq-typography-navbar-title-font-feature-settings);letter-spacing:var(--kbq-typography-navbar-title-letter-spacing)}.kbq-navbar-brand.kbq-navbar-brand_long-title .kbq-navbar-title{font-size:var(--kbq-typography-text-normal-strong-font-size);font-style:var(--kbq-typography-text-normal-strong-font-style);font-weight:var(--kbq-typography-text-normal-strong-font-weight);line-height:var(--kbq-typography-text-normal-strong-line-height);font-family:var(--kbq-typography-text-normal-strong-font-family);text-transform:var(--kbq-typography-text-normal-strong-text-transform);font-feature-settings:var(--kbq-typography-text-normal-strong-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-strong-letter-spacing);line-height:16px}\n", ".kbq-navbar-divider{display:block}.kbq-navbar-divider.kbq-vertical{height:1px;margin:var(--kbq-size-xs) var(--kbq-size-l)}.kbq-navbar-divider.kbq-horizontal{width:1px;height:var(--kbq-size-m);margin-left:var(--kbq-size-m);margin-right:var(--kbq-size-m)}\n", ".kbq-navbar,.kbq-vertical-navbar{--kbq-navbar-item-size-content-border-radius: var(--kbq-size-border-radius);--kbq-navbar-item-vertical-size-height: 41px;--kbq-navbar-vertical-size-expanded-width: 240px;--kbq-navbar-brand-vertical-size-title-max-width: 200px;--kbq-navbar-toggle-size-circle: 28px;--kbq-navbar-z-index: 990;--kbq-navbar-vertical-open-over-z-index: 989;--kbq-navbar-toggle-z-index: 991;--kbq-navbar-background: var(--kbq-background-bg);--kbq-navbar-vertical-background: var(--kbq-background-bg-tertiary);--kbq-navbar-border: var(--kbq-line-contrast-less);--kbq-navbar-item-default-content-text: var(--kbq-foreground-contrast);--kbq-navbar-item-default-content-background: transparent;--kbq-navbar-item-default-content-icon-left: var(--kbq-icon-contrast);--kbq-navbar-item-default-content-icon-right: var(--kbq-icon-contrast);--kbq-navbar-item-states-hover-content-text: var(--kbq-foreground-contrast);--kbq-navbar-item-states-hover-content-background: var(--kbq-states-background-transparent-hover);--kbq-navbar-item-states-hover-content-icon-left: var(--kbq-states-icon-contrast-hover);--kbq-navbar-item-states-hover-content-icon-right: var(--kbq-states-icon-contrast-hover);--kbq-navbar-item-states-selected-content-text: var(--kbq-foreground-contrast);--kbq-navbar-item-states-selected-content-background: var(--kbq-states-background-transparent-active);--kbq-navbar-item-states-selected-content-icon-left: var(--kbq-states-icon-contrast-active);--kbq-navbar-item-states-selected-content-icon-right: var(--kbq-states-icon-contrast-active);--kbq-navbar-item-states-selected-hover-content-text: var(--kbq-foreground-contrast);--kbq-navbar-item-states-selected-hover-content-background: var(--kbq-states-background-transparent-hover);--kbq-navbar-item-states-selected-hover-content-icon-left: var(--kbq-states-icon-contrast-hover);--kbq-navbar-item-states-selected-hover-content-icon-right: var(--kbq-states-icon-contrast-hover);--kbq-navbar-item-states-disabled-content-text: var(--kbq-states-foreground-disabled);--kbq-navbar-item-states-disabled-content-background: transparent;--kbq-navbar-item-states-disabled-content-icon-left: var(--kbq-states-icon-disabled);--kbq-navbar-item-states-disabled-content-icon-right: var(--kbq-states-icon-disabled)}\n"] }]
1328
+ }], ctorParameters: () => [], propDecorators: { rectangleElements: [{ type: i0.ContentChildren, args: [forwardRef(() => KbqNavbarRectangleElement), { ...{ descendants: true }, isSignal: true }] }], items: [{ type: i0.ContentChildren, args: [forwardRef(() => KbqNavbarItem), { ...{ descendants: true }, isSignal: true }] }], bento: [{ type: i0.ContentChild, args: [forwardRef(() => KbqNavbarBento), { isSignal: true }] }], openOver: [{ type: i0.Input, args: [{ isSignal: true, alias: "openOver", required: false }] }], expanded: [{ type: i0.Input, args: [{ isSignal: true, alias: "expanded", required: false }] }, { type: i0.Output, args: ["expandedChange"] }] } });
1067
1329
 
1068
- class KbqNavbarToggle {
1330
+ /**
1331
+ * Dispatches the global `Ctrl+/` shortcut to exactly one navbar toggle.
1332
+ *
1333
+ * Every toggle used to bind its own window listener and call `toggle()` unconditionally, so a single keypress
1334
+ * collapsed *every* vertical navbar on the page. One shared listener instead picks the toggle whose navbar
1335
+ * currently holds focus, and falls back to the first registered one so the shortcut still works from anywhere.
1336
+ *
1337
+ * @docs-private
1338
+ */
1339
+ class KbqNavbarToggleRegistry {
1069
1340
  constructor() {
1070
1341
  this.window = inject(KBQ_WINDOW);
1342
+ this.document = inject(DOCUMENT);
1071
1343
  this.ngZone = inject(NgZone);
1072
- this.changeDetectorRef = inject(ChangeDetectorRef);
1344
+ this.toggles = new Set();
1345
+ this.handleKeydown = (event) => {
1346
+ if (!event.ctrlKey || ![NUMPAD_DIVIDE, SLASH].includes(event.keyCode))
1347
+ return;
1348
+ const target = this.resolveTarget();
1349
+ if (!target)
1350
+ return;
1351
+ this.ngZone.run(() => target.toggle());
1352
+ };
1353
+ }
1354
+ /** Starts listening for the shortcut on behalf of the given toggle. */
1355
+ add(toggle) {
1356
+ if (this.toggles.size === 0) {
1357
+ this.ngZone.runOutsideAngular(() => this.window.addEventListener('keydown', this.handleKeydown));
1358
+ }
1359
+ this.toggles.add(toggle);
1360
+ }
1361
+ /** Stops dispatching the shortcut to the given toggle. */
1362
+ remove(toggle) {
1363
+ this.toggles.delete(toggle);
1364
+ if (this.toggles.size === 0) {
1365
+ this.window.removeEventListener('keydown', this.handleKeydown);
1366
+ }
1367
+ }
1368
+ ngOnDestroy() {
1369
+ this.window.removeEventListener('keydown', this.handleKeydown);
1370
+ this.toggles.clear();
1371
+ }
1372
+ resolveTarget() {
1373
+ const toggles = [...this.toggles];
1374
+ const activeElement = this.document.activeElement;
1375
+ const focused = activeElement && toggles.find((toggle) => toggle.contains(activeElement));
1376
+ return focused || toggles[0];
1377
+ }
1378
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqNavbarToggleRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1379
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqNavbarToggleRegistry, providedIn: 'root' }); }
1380
+ }
1381
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqNavbarToggleRegistry, decorators: [{
1382
+ type: Injectable,
1383
+ args: [{ providedIn: 'root' }]
1384
+ }] });
1385
+ class KbqNavbarToggle {
1386
+ /** Accessible name of the toggle; it names the action the toggle performs. @docs-private */
1387
+ get label() {
1388
+ return this.navbar.expanded()
1389
+ ? this.navbar.localeConfiguration().toggle.collapse
1390
+ : this.navbar.localeConfiguration().toggle.expand;
1391
+ }
1392
+ constructor() {
1393
+ this.nativeElement = kbqInjectNativeElement();
1394
+ this.registry = inject(KbqNavbarToggleRegistry);
1395
+ this.isBrowser = inject(Platform).isBrowser;
1073
1396
  this.tooltip = inject(KbqTooltipTrigger, { self: true });
1074
1397
  /** @docs-private */
1075
1398
  this.navbar = inject(KbqVerticalNavbar);
1076
1399
  this.updateTooltipContent = () => {
1077
- this.tooltip.content = this.navbar.expanded
1078
- ? this.navbar.configuration.toggle.collapse
1079
- : this.navbar.configuration.toggle.expand;
1400
+ this.tooltip.content = this.label;
1080
1401
  };
1081
- this.windowToggleHandler = (event) => {
1082
- if (event.ctrlKey && [NUMPAD_DIVIDE, SLASH].includes(event.keyCode)) {
1083
- this.ngZone.run(this.navbar.toggle);
1084
- }
1085
- };
1086
- afterNextRender(() => {
1087
- this.ngZone.runOutsideAngular(() => this.window.addEventListener('keydown', this.windowToggleHandler));
1088
- });
1402
+ if (this.isBrowser) {
1403
+ this.registry.add(this);
1404
+ }
1089
1405
  this.tooltip.arrow = false;
1090
1406
  this.updateTooltipContent();
1091
1407
  this.tooltip.tooltipPlacement = PopUpPlacements.Right;
1092
1408
  this.tooltip.visibleChange.pipe(takeUntilDestroyed()).subscribe(this.updateTooltipContent);
1409
+ // `content` is a plain property, so a tooltip that is already open keeps the string it was given.
1410
+ // Reading the navbar's signal-backed configuration here re-applies it on a locale change instead
1411
+ // of leaving the previous locale on screen until the next show.
1412
+ effect(() => this.updateTooltipContent());
1093
1413
  }
1414
+ /** @docs-private */
1094
1415
  ngOnDestroy() {
1095
- this.window.removeEventListener('keydown', this.windowToggleHandler);
1416
+ this.registry.remove(this);
1417
+ }
1418
+ /** Whether the given element sits inside the navbar this toggle belongs to. @docs-private */
1419
+ contains(element) {
1420
+ return this.navbar.getNativeElement().contains(element) || this.nativeElement.contains(element);
1421
+ }
1422
+ /** toggles the state of the navbar */
1423
+ toggle() {
1424
+ // Untracked: called from a consumer's `effect()`, the state read on the way — `expanded`, the tooltip's — would
1425
+ // make the effect run again on every expand and collapse.
1426
+ untracked(() => {
1427
+ this.navbar.toggle();
1428
+ this.tooltip.hide();
1429
+ });
1096
1430
  }
1097
1431
  /** @docs-private */
1098
1432
  keydownHandler($event) {
@@ -1102,26 +1436,20 @@ class KbqNavbarToggle {
1102
1436
  $event.preventDefault();
1103
1437
  }
1104
1438
  }
1105
- /** toggles the state of the navbar */
1106
- toggle() {
1107
- this.navbar.toggle();
1108
- this.tooltip.hide();
1109
- this.changeDetectorRef.detectChanges();
1110
- }
1111
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqNavbarToggle, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1112
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.30", type: KbqNavbarToggle, isStandalone: true, selector: "kbq-navbar-toggle, [kbq-navbar-toggle]", host: { listeners: { "keydown": "keydownHandler($event)", "click": "toggle()" }, properties: { "class.kbq-collapsed": "!navbar.expanded", "class.kbq-expanded": "navbar.expanded" }, classAttribute: "kbq-navbar-toggle kbq-vertical" }, hostDirectives: [{ directive: i1.CdkMonitorFocus }, { directive: i2.KbqTooltipTrigger }], ngImport: i0, template: `
1439
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqNavbarToggle, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1440
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.25", type: KbqNavbarToggle, isStandalone: true, selector: "kbq-navbar-toggle, [kbq-navbar-toggle]", host: { attributes: { "role": "button", "aria-keyshortcuts": "Control+/" }, listeners: { "keydown": "keydownHandler($event)", "click": "toggle()" }, properties: { "class.kbq-collapsed": "!navbar.expanded()", "class.kbq-expanded": "navbar.expanded()", "attr.aria-expanded": "navbar.expanded()", "attr.aria-label": "label" }, classAttribute: "kbq-navbar-toggle kbq-vertical" }, hostDirectives: [{ directive: i1$1.CdkMonitorFocus }, { directive: i1.KbqTooltipTrigger }], ngImport: i0, template: `
1113
1441
  <span class="kbq-navbar-toggle__circle">
1114
1442
  <ng-content select="[kbq-icon]">
1115
1443
  <i
1116
1444
  kbq-icon
1117
- [class.kbq-chevron-double-left-s_16]="navbar.expanded"
1118
- [class.kbq-chevron-double-right-s_16]="!navbar.expanded"
1445
+ [class.kbq-chevron-double-left-s_16]="navbar.expanded()"
1446
+ [class.kbq-chevron-double-right-s_16]="!navbar.expanded()"
1119
1447
  ></i>
1120
1448
  </ng-content>
1121
1449
  </span>
1122
- `, isInline: true, styles: [".kbq-navbar-toggle{position:absolute;top:var(--kbq-size-3xl);right:calc(-1 * var(--kbq-size-l));z-index:1001;display:flex;justify-content:center;align-items:center;padding:var(--kbq-size-3xs);border-width:0;cursor:pointer}.kbq-navbar-toggle .kbq-navbar-toggle__circle{display:flex;justify-content:center;align-items:center;width:28px;height:28px;border-radius:50%}.kbq-navbar-toggle{outline:none;border-color:transparent;background:transparent}.kbq-navbar-toggle .kbq-navbar-toggle__circle{background:var(--kbq-background-card);box-shadow:0 3px 8px 0 var(--kbq-shadow-ambient),0 2px 8px 0 var(--kbq-shadow-key),0 0 0 1px var(--kbq-shadow-outline)}.kbq-navbar-toggle .kbq-icon{color:var(--kbq-icon-contrast-fade)}.kbq-navbar-toggle:hover .kbq-icon,.kbq-navbar-toggle:active .kbq-icon,.kbq-navbar-toggle.kbq-hover .kbq-icon,.kbq-navbar-toggle.kbq-active .kbq-icon{color:var(--kbq-states-icon-contrast-hover)}.kbq-navbar-toggle.cdk-keyboard-focused .kbq-navbar-toggle__circle{box-shadow:0 0 0 2px var(--kbq-states-line-focus-theme)}\n"], dependencies: [{ kind: "ngmodule", type: KbqIconModule }, { kind: "component", type: i3.KbqIcon, selector: "[kbq-icon]", inputs: ["small", "autoColor", "kbq-icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1450
+ `, isInline: true, styles: [".kbq-navbar-toggle{position:absolute;top:var(--kbq-size-3xl);right:calc(-1 * var(--kbq-size-l));z-index:var(--kbq-navbar-toggle-z-index);display:flex;justify-content:center;align-items:center;padding:var(--kbq-size-3xs);border-width:0;cursor:pointer}.kbq-navbar-toggle .kbq-navbar-toggle__circle{display:flex;justify-content:center;align-items:center;width:var(--kbq-navbar-toggle-size-circle);height:var(--kbq-navbar-toggle-size-circle);border-radius:50%}.kbq-navbar-toggle{outline:none;border-color:transparent;background:transparent}.kbq-navbar-toggle .kbq-navbar-toggle__circle{background:var(--kbq-background-card);box-shadow:0 3px 8px 0 var(--kbq-shadow-ambient),0 2px 8px 0 var(--kbq-shadow-key),0 0 0 1px var(--kbq-shadow-outline)}.kbq-navbar-toggle .kbq-icon{color:var(--kbq-icon-contrast-fade)}.kbq-navbar-toggle:hover .kbq-icon,.kbq-navbar-toggle:active .kbq-icon,.kbq-navbar-toggle.kbq-hover .kbq-icon,.kbq-navbar-toggle.kbq-active .kbq-icon{color:var(--kbq-states-icon-contrast-hover)}.kbq-navbar-toggle.cdk-keyboard-focused .kbq-navbar-toggle__circle{box-shadow:0 0 0 2px var(--kbq-states-line-focus-theme)}\n"], dependencies: [{ kind: "ngmodule", type: KbqIconModule }, { kind: "component", type: i3.KbqIcon, selector: "[kbq-icon]", inputs: ["aria-hidden", "iconSize", "autoColor", "kbq-icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1123
1451
  }
1124
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqNavbarToggle, decorators: [{
1452
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqNavbarToggle, decorators: [{
1125
1453
  type: Component,
1126
1454
  args: [{ selector: 'kbq-navbar-toggle, [kbq-navbar-toggle]', imports: [
1127
1455
  KbqIconModule
@@ -1130,23 +1458,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImpo
1130
1458
  <ng-content select="[kbq-icon]">
1131
1459
  <i
1132
1460
  kbq-icon
1133
- [class.kbq-chevron-double-left-s_16]="navbar.expanded"
1134
- [class.kbq-chevron-double-right-s_16]="!navbar.expanded"
1461
+ [class.kbq-chevron-double-left-s_16]="navbar.expanded()"
1462
+ [class.kbq-chevron-double-right-s_16]="!navbar.expanded()"
1135
1463
  ></i>
1136
1464
  </ng-content>
1137
1465
  </span>
1138
1466
  `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
1139
1467
  class: 'kbq-navbar-toggle kbq-vertical',
1140
- '[class.kbq-collapsed]': '!navbar.expanded',
1141
- '[class.kbq-expanded]': 'navbar.expanded',
1468
+ '[class.kbq-collapsed]': '!navbar.expanded()',
1469
+ '[class.kbq-expanded]': 'navbar.expanded()',
1470
+ // The toggle is icon-only and its tooltip is a transient overlay, never an accessible name. Role, name
1471
+ // and state are published on the host so assistive technology announces an expand/collapse control
1472
+ // instead of an unlabelled element.
1473
+ role: 'button',
1474
+ '[attr.aria-expanded]': 'navbar.expanded()',
1475
+ '[attr.aria-label]': 'label',
1476
+ 'aria-keyshortcuts': 'Control+/',
1142
1477
  '(keydown)': 'keydownHandler($event)',
1143
1478
  '(click)': 'toggle()'
1144
- }, hostDirectives: [CdkMonitorFocus, KbqTooltipTrigger], styles: [".kbq-navbar-toggle{position:absolute;top:var(--kbq-size-3xl);right:calc(-1 * var(--kbq-size-l));z-index:1001;display:flex;justify-content:center;align-items:center;padding:var(--kbq-size-3xs);border-width:0;cursor:pointer}.kbq-navbar-toggle .kbq-navbar-toggle__circle{display:flex;justify-content:center;align-items:center;width:28px;height:28px;border-radius:50%}.kbq-navbar-toggle{outline:none;border-color:transparent;background:transparent}.kbq-navbar-toggle .kbq-navbar-toggle__circle{background:var(--kbq-background-card);box-shadow:0 3px 8px 0 var(--kbq-shadow-ambient),0 2px 8px 0 var(--kbq-shadow-key),0 0 0 1px var(--kbq-shadow-outline)}.kbq-navbar-toggle .kbq-icon{color:var(--kbq-icon-contrast-fade)}.kbq-navbar-toggle:hover .kbq-icon,.kbq-navbar-toggle:active .kbq-icon,.kbq-navbar-toggle.kbq-hover .kbq-icon,.kbq-navbar-toggle.kbq-active .kbq-icon{color:var(--kbq-states-icon-contrast-hover)}.kbq-navbar-toggle.cdk-keyboard-focused .kbq-navbar-toggle__circle{box-shadow:0 0 0 2px var(--kbq-states-line-focus-theme)}\n"] }]
1479
+ }, hostDirectives: [CdkMonitorFocus, KbqTooltipTrigger], styles: [".kbq-navbar-toggle{position:absolute;top:var(--kbq-size-3xl);right:calc(-1 * var(--kbq-size-l));z-index:var(--kbq-navbar-toggle-z-index);display:flex;justify-content:center;align-items:center;padding:var(--kbq-size-3xs);border-width:0;cursor:pointer}.kbq-navbar-toggle .kbq-navbar-toggle__circle{display:flex;justify-content:center;align-items:center;width:var(--kbq-navbar-toggle-size-circle);height:var(--kbq-navbar-toggle-size-circle);border-radius:50%}.kbq-navbar-toggle{outline:none;border-color:transparent;background:transparent}.kbq-navbar-toggle .kbq-navbar-toggle__circle{background:var(--kbq-background-card);box-shadow:0 3px 8px 0 var(--kbq-shadow-ambient),0 2px 8px 0 var(--kbq-shadow-key),0 0 0 1px var(--kbq-shadow-outline)}.kbq-navbar-toggle .kbq-icon{color:var(--kbq-icon-contrast-fade)}.kbq-navbar-toggle:hover .kbq-icon,.kbq-navbar-toggle:active .kbq-icon,.kbq-navbar-toggle.kbq-hover .kbq-icon,.kbq-navbar-toggle.kbq-active .kbq-icon{color:var(--kbq-states-icon-contrast-hover)}.kbq-navbar-toggle.cdk-keyboard-focused .kbq-navbar-toggle__circle{box-shadow:0 0 0 2px var(--kbq-states-line-focus-theme)}\n"] }]
1145
1480
  }], ctorParameters: () => [] });
1146
1481
 
1147
1482
  class KbqNavbarModule {
1148
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqNavbarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1149
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.30", ngImport: i0, type: KbqNavbarModule, imports: [A11yModule,
1483
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqNavbarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1484
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.25", ngImport: i0, type: KbqNavbarModule, imports: [A11yModule,
1150
1485
  PlatformModule,
1151
1486
  KbqIconModule,
1152
1487
  KbqToolTipModule,
@@ -1161,7 +1496,8 @@ class KbqNavbarModule {
1161
1496
  KbqNavbarDivider,
1162
1497
  KbqNavbarFocusableItem,
1163
1498
  KbqNavbarRectangleElement,
1164
- KbqNavbarBento], exports: [KbqNavbar,
1499
+ KbqNavbarBento,
1500
+ KbqNavbarItemSuffix], exports: [KbqNavbar,
1165
1501
  KbqNavbarContainer,
1166
1502
  KbqNavbarTitle,
1167
1503
  KbqNavbarItem,
@@ -1172,15 +1508,16 @@ class KbqNavbarModule {
1172
1508
  KbqNavbarDivider,
1173
1509
  KbqNavbarFocusableItem,
1174
1510
  KbqNavbarRectangleElement,
1175
- KbqNavbarBento] }); }
1176
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqNavbarModule, imports: [A11yModule,
1511
+ KbqNavbarBento,
1512
+ KbqNavbarItemSuffix] }); }
1513
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqNavbarModule, imports: [A11yModule,
1177
1514
  PlatformModule,
1178
1515
  KbqIconModule,
1179
1516
  KbqToolTipModule,
1180
1517
  KbqNavbarItem,
1181
1518
  KbqNavbarToggle] }); }
1182
1519
  }
1183
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqNavbarModule, decorators: [{
1520
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqNavbarModule, decorators: [{
1184
1521
  type: NgModule,
1185
1522
  args: [{
1186
1523
  imports: [
@@ -1199,7 +1536,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImpo
1199
1536
  KbqNavbarDivider,
1200
1537
  KbqNavbarFocusableItem,
1201
1538
  KbqNavbarRectangleElement,
1202
- KbqNavbarBento
1539
+ KbqNavbarBento,
1540
+ KbqNavbarItemSuffix
1203
1541
  ],
1204
1542
  exports: [
1205
1543
  KbqNavbar,
@@ -1213,7 +1551,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImpo
1213
1551
  KbqNavbarDivider,
1214
1552
  KbqNavbarFocusableItem,
1215
1553
  KbqNavbarRectangleElement,
1216
- KbqNavbarBento
1554
+ KbqNavbarBento,
1555
+ KbqNavbarItemSuffix
1217
1556
  ]
1218
1557
  }]
1219
1558
  }] });
@@ -1222,5 +1561,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImpo
1222
1561
  * Generated bundle index. Do not edit.
1223
1562
  */
1224
1563
 
1225
- export { KBQ_VERTICAL_NAVBAR_CONFIGURATION, KBQ_VERTICAL_NAVBAR_DEFAULT_CONFIGURATION, KbqFocusableComponent, KbqNavbar, KbqNavbarBento, KbqNavbarBrand, KbqNavbarContainer, KbqNavbarDivider, KbqNavbarFocusableItem, KbqNavbarItem, KbqNavbarLogo, KbqNavbarModule, KbqNavbarRectangleElement, KbqNavbarTitle, KbqNavbarToggle, KbqVerticalNavbar };
1564
+ export { KBQ_NAVBAR_DEFAULT_LOCALE_CONFIGURATION, KBQ_NAVBAR_LOCALE_CONFIGURATION, KBQ_VERTICAL_NAVBAR_CONFIGURATION, KBQ_VERTICAL_NAVBAR_DEFAULT_CONFIGURATION, KbqFocusableComponent, KbqNavbar, KbqNavbarBento, KbqNavbarBrand, KbqNavbarContainer, KbqNavbarDivider, KbqNavbarFocusableItem, KbqNavbarItem, KbqNavbarItemSuffix, KbqNavbarLogo, KbqNavbarModule, KbqNavbarRectangleElement, KbqNavbarTitle, KbqNavbarToggle, KbqNavbarToggleRegistry, KbqVerticalNavbar, kbqNavbarLocaleConfigurationProvider };
1226
1565
  //# sourceMappingURL=koobiq-components-navbar.mjs.map