@koobiq/components 20.4.2 → 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 +463 -143
  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 -178
  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,18 +1,20 @@
1
1
  import { FocusMonitor } from '@angular/cdk/a11y';
2
- import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
+ import { Directionality } from '@angular/cdk/bidi';
3
3
  import { SelectionModel } from '@angular/cdk/collections';
4
+ import { CdkObserveContent } from '@angular/cdk/observers';
4
5
  import * as i0 from '@angular/core';
5
- import { forwardRef, inject, ChangeDetectorRef, input, booleanAttribute, contentChildren, output, Input, Directive, ElementRef, viewChild, ViewEncapsulation, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
6
+ import { forwardRef, input, booleanAttribute, contentChildren, output, signal, computed, untracked, Directive, inject, ChangeDetectorRef, ElementRef, viewChild, effect, isDevMode, ViewEncapsulation, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
6
7
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
7
8
  import * as i1 from '@koobiq/components/button';
8
- import { KbqButton, KbqButtonModule } from '@koobiq/components/button';
9
- import { getNodesWithoutComments } from '@koobiq/components/core';
9
+ import { KbqButton, KbqButtonModule, KbqButtonPrefix, KbqButtonSuffix } from '@koobiq/components/button';
10
+ import { getContentNodes, DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, UP_ARROW, HOME, END } from '@koobiq/components/core';
10
11
  import { KbqIcon } from '@koobiq/components/icon';
11
12
  import { KbqTitleDirective, KbqTitleModule } from '@koobiq/components/title';
12
13
 
13
14
  /**
14
15
  * Provider Expression that allows kbq-button-toggle-group to register as a ControlValueAccessor.
15
16
  * This allows it to support [(ngModel)].
17
+ *
16
18
  * @docs-private
17
19
  */
18
20
  const KBQ_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR = {
@@ -20,282 +22,568 @@ const KBQ_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR = {
20
22
  useExisting: forwardRef(() => KbqButtonToggleGroup),
21
23
  multi: true
22
24
  };
23
- /** Change event object emitted by MсButtonToggle. */
25
+ /**
26
+ * Whether two group values describe the same selection. An unset value and an empty selection are
27
+ * the same thing, which is what keeps a multiple-selection group from announcing `[]` over a
28
+ * `[(value)]` binding that still holds `undefined`.
29
+ */
30
+ const sameValue = (a, b) => {
31
+ if (a === b) {
32
+ return true;
33
+ }
34
+ const toArray = (value) => (Array.isArray(value) ? value : value == null ? [] : null);
35
+ const arrayA = toArray(a);
36
+ const arrayB = toArray(b);
37
+ return !!arrayA && !!arrayB && arrayA.length === arrayB.length && arrayA.every((item, i) => item === arrayB[i]);
38
+ };
39
+ /** Change event object emitted by KbqButtonToggle. */
24
40
  class KbqButtonToggleChange {
25
41
  constructor(
26
- /** The MсButtonToggle that emits the event. */
42
+ /** The KbqButtonToggle that emits the event. */
27
43
  source,
28
- /** The value assigned to the MсButtonToggle. */
44
+ /** The value assigned to the KbqButtonToggle. */
29
45
  value) {
30
46
  this.source = source;
31
47
  this.value = value;
32
48
  }
33
49
  }
34
- /** Exclusive selection button toggle group that behaves like a radio-button group. */
50
+ /**
51
+ * Selection group for `KbqButtonToggle`.
52
+ *
53
+ * By default it behaves like a radio-button group — one toggle at a time, announced as a
54
+ * `radiogroup` and walked with the arrow keys. With `multiple` the toggles become independent
55
+ * toggle buttons and the group is announced as a plain `group`.
56
+ *
57
+ * Name it with a plain `aria-label`/`aria-labelledby` attribute. The host is the very element the
58
+ * consumer writes, so an input aliased to the same name would only write back what is already
59
+ * there — and would wipe an `[attr.aria-label]` binding, which never reaches the input.
60
+ */
35
61
  class KbqButtonToggleGroup {
36
62
  constructor() {
37
- this._changeDetector = inject(ChangeDetectorRef);
63
+ /** Whether the toggle group is vertical. */
64
+ this.vertical = input(false, { ...(ngDevMode ? { debugName: "vertical" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
38
65
  /** Whether the toggle group stretches to fill its container width, with toggles sharing equal space. */
39
- this.stretched = input(false, ...(ngDevMode ? [{ debugName: "stretched", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
66
+ this.stretched = input(false, { ...(ngDevMode ? { debugName: "stretched" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
67
+ /** Whether multiple button toggles can be selected. */
68
+ this.multiple = input(false, { ...(ngDevMode ? { debugName: "multiple" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
40
69
  /** Child button toggle buttons. */
41
- this.buttonToggles = contentChildren(forwardRef(() => KbqButtonToggle), ...(ngDevMode ? [{ debugName: "buttonToggles" }] : []));
70
+ this.buttonToggles = contentChildren(forwardRef(() => KbqButtonToggle), ...(ngDevMode ? [{ debugName: "buttonToggles" }] : /* istanbul ignore next */ []));
42
71
  /**
43
72
  * Event that emits whenever the value of the group changes.
44
73
  * Used to facilitate two-way data binding.
74
+ *
45
75
  * @docs-private
46
76
  */
47
77
  this.valueChange = output();
48
78
  /** Event emitted when the group's value changes. */
49
79
  this.change = output();
50
- this._vertical = false;
51
- this._multiple = false;
52
- this._disabled = false;
80
+ this._disabled = signal(false, ...(ngDevMode ? [{ debugName: "_disabled" }] : /* istanbul ignore next */ []));
81
+ /**
82
+ * Selection of `selectionModel`, mirrored into a signal. It is what makes a toggle's `checked`
83
+ * state reactive: a toggle derives its own state from here instead of being told, one by one,
84
+ * to check itself again.
85
+ */
86
+ this.selectedToggles = signal([], ...(ngDevMode ? [{ debugName: "selectedToggles" }] : /* istanbul ignore next */ []));
87
+ /** Value the selection alone describes, with nothing said about an assignment waiting for its toggle. */
88
+ this.selectedValue = computed(() => {
89
+ const selected = this.selectedToggles();
90
+ return this.multiple() ? selected.map((toggle) => toggle.value) : selected[0]?.value;
91
+ }, ...(ngDevMode ? [{ debugName: "selectedValue" }] : /* istanbul ignore next */ []));
92
+ /**
93
+ * Computed once per selection change, so a repeated read hands back the same array reference.
94
+ *
95
+ * The selection is authoritative for the toggles it holds; whatever the assignment names beyond
96
+ * them is appended, because those toggles may still be rendered. Reporting the empty selection
97
+ * instead would push `undefined` back through a `[(value)]` binding and leave `NG0100` behind.
98
+ */
99
+ this.currentValue = computed(() => {
100
+ const selected = this.selectedValue();
101
+ const assigned = this.rawValue();
102
+ if (this.multiple()) {
103
+ const values = selected;
104
+ const pending = (Array.isArray(assigned) ? assigned : []).filter((value) => !values.includes(value));
105
+ // A fresh array every time: the assigned one belongs to the consumer, and handing it
106
+ // back would let them mutate what feeds their own `[value]` binding.
107
+ return [...values, ...pending];
108
+ }
109
+ return selected !== undefined ? selected : assigned;
110
+ }, ...(ngDevMode ? [{ debugName: "currentValue" }] : /* istanbul ignore next */ []));
111
+ this.currentSelection = computed(() => {
112
+ const selected = this.selectedToggles();
113
+ return this.multiple() ? [...selected] : selected[0] || null;
114
+ }, ...(ngDevMode ? [{ debugName: "currentSelection" }] : /* istanbul ignore next */ []));
115
+ /** ARIA role of the group: a radio group in single-selection mode, a plain grouping otherwise. */
116
+ this.role = computed(() => (this.multiple() ? 'group' : 'radiogroup'), ...(ngDevMode ? [{ debugName: "role" }] : /* istanbul ignore next */ []));
117
+ /**
118
+ * Layout of the group, announced alongside its role so that the arrow-key affordance a screen
119
+ * reader describes matches the direction the toggles actually run in.
120
+ *
121
+ * A radio group is the only mode that has one: `role="group"` does not support `aria-orientation`
122
+ * (AXE `aria-allowed-attr`), and with `multiple` there are no arrow keys to describe anyway.
123
+ */
124
+ this.ariaOrientation = computed(() => {
125
+ if (this.multiple())
126
+ return null;
127
+ return this.vertical() ? 'vertical' : 'horizontal';
128
+ }, ...(ngDevMode ? [{ debugName: "ariaOrientation" }] : /* istanbul ignore next */ []));
129
+ /**
130
+ * Whether the group has been destroyed. A selected toggle schedules its own removal from the
131
+ * selection on a microtask, which outlives a teardown of the whole group.
132
+ */
133
+ this.destroyed = false;
53
134
  /**
54
- * The method to be called in order to update ngModel.
55
- * Now `ngModel` binding is not supported in multiple selection mode.
135
+ * Value the consumer assigned, kept for as long as it is not represented by the selection: the
136
+ * toggle it names may be created later — behind an `@if`, or simply after the assignment, which
137
+ * always lands before `ngOnInit` and so before there is a selection model to apply it to.
138
+ *
139
+ * An interaction replaces it, so a value the user has moved off cannot resurface on a toggle
140
+ * rendered afterwards.
141
+ */
142
+ this.rawValue = signal(undefined, ...(ngDevMode ? [{ debugName: "rawValue" }] : /* istanbul ignore next */ []));
143
+ /**
144
+ * Called when the value changes. Needed to properly implement `ControlValueAccessor`.
145
+ * `ngModel` binding is not supported in multiple selection mode.
146
+ *
147
+ * @docs-private
56
148
  */
57
149
  this.controlValueAccessorChangeFn = () => { };
58
- /** onTouch function registered via registerOnTouch (ControlValueAccessor). */
150
+ /**
151
+ * Called when the control is blurred. Needed to properly implement `ControlValueAccessor`.
152
+ *
153
+ * @docs-private
154
+ */
59
155
  this.onTouched = () => { };
156
+ /** @docs-private */
157
+ this.valueInput = input(undefined, { ...(ngDevMode ? { debugName: "valueInput" } : /* istanbul ignore next */ {}), alias: 'value' });
158
+ /** @docs-private */
159
+ this.disabledInput = input(undefined, { ...(ngDevMode ? { debugName: "disabledInput" } : /* istanbul ignore next */ {}), alias: 'disabled',
160
+ transform: booleanAttribute });
60
161
  }
61
- /** Whether the toggle group is vertical. */
62
- // TODO: Skipped for migration because:
63
- // Accessor inputs cannot be migrated as they are too complex.
64
- get vertical() {
65
- return this._vertical;
66
- }
67
- set vertical(value) {
68
- this._vertical = coerceBooleanProperty(value);
69
- }
70
- /** Value of the toggle group. */
71
- // TODO: Skipped for migration because:
72
- // Accessor inputs cannot be migrated as they are too complex.
162
+ /**
163
+ * Value of the toggle group: an array in multiple-selection mode, a single value otherwise.
164
+ *
165
+ * An accessor rather than a `model()`: writing it walks the toggles to find the ones that match,
166
+ * and reading it reports the selection. `[(value)]` works all the same.
167
+ *
168
+ * An assigned value that corresponds to no toggle is kept and reported as is, so that it applies
169
+ * to a toggle rendered later — the same contract as `KbqRadioGroup`. It follows that `value` can
170
+ * name a toggle `selected` does not hold: `selected` only ever reports toggles that exist.
171
+ */
73
172
  get value() {
74
- const selected = this.selectionModel ? this.selectionModel.selected : [];
75
- if (this.multiple) {
76
- return selected.map((toggle) => toggle.value);
77
- }
78
- return selected[0] ? selected[0].value : undefined;
173
+ return this.currentValue();
79
174
  }
80
175
  set value(newValue) {
176
+ // Untracked, as `emitChangeEvent()`, `syncButtonToggle()` and the toggles' `checked` setter and
177
+ // `onToggleClick()`: called from a consumer's `effect()`, the selection read on the way would make the effect
178
+ // run again whenever the user picks another toggle.
179
+ untracked(() => this.assignValue(newValue));
180
+ }
181
+ /** Body of the `value` setter. */
182
+ assignValue(newValue) {
81
183
  this.setSelectionByValue(newValue);
82
- this.valueChange.emit(this.value);
184
+ // A write the group answers with the value it was given has nothing to announce: the binding
185
+ // slot already holds it, and echoing the group's own normalisation of it back over that slot
186
+ // — `[]` for an unset multiple-selection group — is the `NG0100` this guards.
187
+ if (sameValue(newValue, this.value)) {
188
+ this.reportedValue = this.value;
189
+ return;
190
+ }
191
+ this.emitValueChange();
83
192
  }
84
- /** Selected button toggles in the group. */
193
+ /**
194
+ * Selected button toggles in the group: an array in multiple-selection mode, one toggle otherwise.
195
+ * Only toggles that exist, so a `value` waiting for its toggle is not represented here.
196
+ */
85
197
  get selected() {
86
- const selected = this.selectionModel.selected;
87
- return this.multiple ? selected : selected[0] || null;
88
- }
89
- /** Whether multiple button toggles can be selected. */
90
- // TODO: Skipped for migration because:
91
- // Accessor inputs cannot be migrated as they are too complex.
92
- get multiple() {
93
- return this._multiple;
198
+ return this.currentSelection();
94
199
  }
95
- set multiple(value) {
96
- this._multiple = coerceBooleanProperty(value);
97
- }
98
- /** Whether multiple button toggle group is disabled. */
99
- // TODO: Skipped for migration because:
100
- // Accessor inputs cannot be migrated as they are too complex.
200
+ /** Whether the whole button toggle group is disabled. */
101
201
  get disabled() {
102
- return this._disabled;
202
+ return this._disabled();
103
203
  }
104
204
  set disabled(value) {
105
- this._disabled = coerceBooleanProperty(value);
106
- const buttonToggles = this.buttonToggles();
107
- if (!buttonToggles) {
108
- return;
205
+ this._disabled.set(value);
206
+ }
207
+ ngOnChanges(changes) {
208
+ // A bound input is handed to its member, a bound `undefined` included;
209
+ // unbound, it leaves what code wrote.
210
+ if (changes['valueInput']) {
211
+ this.value = this.valueInput();
212
+ }
213
+ if (changes['disabledInput']) {
214
+ const disabled = this.disabledInput();
215
+ if (disabled !== undefined)
216
+ this.disabled = disabled;
109
217
  }
110
- buttonToggles.forEach((toggle) => toggle.markForCheck());
111
218
  }
112
219
  ngOnInit() {
113
- this.selectionModel = new SelectionModel(this.multiple, undefined, false);
220
+ this.selectionModel = new SelectionModel(this.multiple(), undefined, false);
114
221
  }
115
- ngAfterContentInit() {
116
- this.selectionModel.select(...this.buttonToggles().filter((toggle) => toggle.checked));
117
- this.disabled = this._disabled;
222
+ ngOnDestroy() {
223
+ this.destroyed = true;
118
224
  }
119
225
  /**
120
226
  * Sets the model value. Implemented as part of ControlValueAccessor.
227
+ *
121
228
  * @param value Value to be set to the model.
122
229
  */
123
230
  writeValue(value) {
124
231
  this.value = value;
125
- this._changeDetector.markForCheck();
126
232
  }
127
- // Implemented as part of ControlValueAccessor.
233
+ /**
234
+ * Registers the callback that reports a value change to the form model.
235
+ * Implemented as part of ControlValueAccessor.
236
+ */
128
237
  registerOnChange(fn) {
129
238
  this.controlValueAccessorChangeFn = fn;
130
239
  }
131
- // Implemented as part of ControlValueAccessor.
240
+ /**
241
+ * Registers the callback that marks the form control as touched.
242
+ * Implemented as part of ControlValueAccessor.
243
+ */
132
244
  registerOnTouched(fn) {
133
245
  this.onTouched = fn;
134
246
  }
135
- // Implemented as part of ControlValueAccessor.
247
+ /**
248
+ * Disables the group from the form model.
249
+ * Implemented as part of ControlValueAccessor.
250
+ */
136
251
  setDisabledState(isDisabled) {
137
252
  this.disabled = isDisabled;
138
253
  }
139
- /** Dispatch change event with current selection and group value. */
140
- emitChangeEvent() {
141
- const selected = this.selected;
142
- const source = Array.isArray(selected) ? selected[selected.length - 1] : selected;
143
- const event = new KbqButtonToggleChange(source, this.value);
144
- this.controlValueAccessorChangeFn(event.value);
145
- this.change.emit(event);
254
+ /**
255
+ * Dispatches a change event for the group value.
256
+ *
257
+ * @param source Toggle the change originated from. Taken from the interaction rather than from the
258
+ * selection, which is empty whenever the last selected toggle of a multiple-selection group is
259
+ * unchecked — there is no "last selected" toggle left to report then.
260
+ */
261
+ emitChangeEvent(source) {
262
+ untracked(() => {
263
+ const event = new KbqButtonToggleChange(source, this.value);
264
+ this.controlValueAccessorChangeFn(event.value);
265
+ this.change.emit(event);
266
+ });
146
267
  }
147
268
  /**
148
269
  * Syncs a button toggle's selected state with the model value.
270
+ *
149
271
  * @param toggle Toggle to be synced.
150
272
  * @param select Whether the toggle should be selected.
151
273
  * @param isUserInput Whether the change was a result of a user interaction.
152
274
  */
153
275
  syncButtonToggle(toggle, select, isUserInput = false) {
154
- // Deselect the currently-selected toggle, if we're in single-selection
155
- // mode and the button being toggled isn't selected at the moment.
156
- if (!this.multiple && this.selected && !toggle.checked) {
157
- this.selected.checked = false;
276
+ untracked(() => this.applyToggleSelection(toggle, select, isUserInput));
277
+ }
278
+ /** Body of `syncButtonToggle()`. */
279
+ applyToggleSelection(toggle, select, isUserInput) {
280
+ // A destroyed toggle drops itself from the selection on a microtask, which still runs when
281
+ // the whole group is torn down: there is nothing left to sync and nobody left to notify.
282
+ if (this.destroyed) {
283
+ return;
158
284
  }
285
+ // The previously selected toggle of a single-selection group is dropped by the selection
286
+ // model itself, and re-renders from the selection: unchecking it by hand would re-enter here
287
+ // and announce the empty selection it leaves behind for the length of one call.
159
288
  if (select) {
160
289
  this.selectionModel.select(toggle);
161
290
  }
162
291
  else {
163
292
  this.selectionModel.deselect(toggle);
164
293
  }
294
+ this.publishSelection();
295
+ if (isUserInput) {
296
+ // The interaction is the new assignment: anything the consumer assigned before it has
297
+ // been answered, and keeping it would let it come back on a toggle rendered later.
298
+ this.rawValue.set(this.selectedValue());
299
+ }
300
+ else if (!select) {
301
+ this.dropPendingValue(toggle.value);
302
+ }
165
303
  // Only emit the change event for user input.
166
304
  if (isUserInput) {
167
- this.emitChangeEvent();
305
+ this.emitChangeEvent(toggle);
168
306
  }
169
- // Note: we emit this one no matter whether it was a user interaction, because
170
- // it is used by Angular to sync up the two-way data binding.
171
- this.valueChange.emit(this.value);
307
+ // Note: this one is not limited to user interactions, because it is what Angular syncs the
308
+ // two-way data binding up with — an interaction is only one of the things that move a value.
309
+ this.emitValueChange();
310
+ }
311
+ /**
312
+ * Reports the new value of a selected toggle, which changes the value of the group, as an interaction would.
313
+ *
314
+ * @internal
315
+ */
316
+ followToggleValue(toggle, previous) {
317
+ if (this.destroyed || !this.selectionModel?.isSelected(toggle))
318
+ return;
319
+ this.renamePendingValue(previous, toggle.value);
320
+ // On a microtask, as the removal of a destroyed toggle: a `[value]` binding changes during change detection,
321
+ // which has already checked the binding `[(value)]` writes the report to.
322
+ Promise.resolve().then(() => {
323
+ const value = this.value;
324
+ if (this.destroyed || sameValue(this.reportedValue, value))
325
+ return;
326
+ // Not to the form: the user picked nothing, and a report would mark the control dirty.
327
+ this.emitValueChange();
328
+ });
172
329
  }
173
330
  /** Checks whether a button toggle is selected. */
174
331
  isSelected(toggle) {
175
- return this.selectionModel.isSelected(toggle);
332
+ return this.selectedToggles().includes(toggle);
176
333
  }
177
- /** Determines whether a button toggle should be checked on init. */
334
+ /** Determines whether a button toggle should be checked on init, from the value waiting for it. */
178
335
  isPrechecked(toggle) {
179
- if (this.rawValue === undefined) {
336
+ const rawValue = this.rawValue();
337
+ if (rawValue === undefined || toggle.value == null) {
180
338
  return false;
181
339
  }
182
- if (this.multiple && Array.isArray(this.rawValue)) {
183
- return this.rawValue.some((value) => toggle.value != null && value === toggle.value);
184
- }
185
- return toggle.value === this.rawValue;
340
+ return this.multiple() && Array.isArray(rawValue) ? rawValue.includes(toggle.value) : toggle.value === rawValue;
186
341
  }
187
- /** Updates the selection state of the toggles in the group based on a value. */
188
- setSelectionByValue(value) {
189
- this.rawValue = value;
190
- if (!this.selectionModel) {
191
- return;
342
+ /** Mirrors the selection model into the signal the toggles derive their state from. */
343
+ publishSelection() {
344
+ this.selectedToggles.set([...this.selectionModel.selected]);
345
+ }
346
+ /**
347
+ * Forgets a value that a toggle has just stopped representing. A value only waits for a toggle
348
+ * until one takes it: a toggle leaving the selection — destroyed, or unchecked from code —
349
+ * answers it, and keeping it would make it resurface on the next toggle rendered with it.
350
+ */
351
+ dropPendingValue(value) {
352
+ const assigned = this.rawValue();
353
+ if (!this.multiple()) {
354
+ if (assigned === value) {
355
+ this.rawValue.set(undefined);
356
+ }
192
357
  }
193
- if (this.multiple && value) {
194
- if (!Array.isArray(value)) {
195
- throw Error('Value must be an array in multiple-selection mode.');
358
+ else if (Array.isArray(assigned) && assigned.includes(value)) {
359
+ this.rawValue.set(assigned.filter((item) => item !== value));
360
+ }
361
+ }
362
+ /** Follows a selected toggle whose value changed in the assignment, which would hold the old value otherwise. */
363
+ renamePendingValue(previous, value) {
364
+ const assigned = this.rawValue();
365
+ if (!this.multiple()) {
366
+ if (assigned === previous) {
367
+ this.rawValue.set(value);
196
368
  }
197
- this.clearSelection();
198
- value.forEach((currentValue) => this.selectValue(currentValue));
199
369
  }
200
- else {
201
- this.clearSelection();
202
- this.selectValue(value);
370
+ else if (Array.isArray(assigned) && assigned.includes(previous)) {
371
+ this.rawValue.set(assigned.map((item) => (item === previous ? value : item)));
203
372
  }
204
373
  }
205
- /** Clears the selected toggles. */
206
- clearSelection() {
207
- this.selectionModel.clear();
208
- this.buttonToggles().forEach((toggle) => (toggle.checked = false));
374
+ /** Announces the current value, unless it is the one already reported. */
375
+ emitValueChange() {
376
+ const value = this.value;
377
+ if (sameValue(this.reportedValue, value)) {
378
+ return;
379
+ }
380
+ this.reportedValue = value;
381
+ this.valueChange.emit(value);
209
382
  }
210
- /** Selects a value if there's a toggle that corresponds to it. */
211
- selectValue(value) {
212
- const correspondingOption = this.buttonToggles().find((toggle) => {
213
- return toggle.value != null && toggle.value === value;
214
- });
215
- if (correspondingOption) {
216
- correspondingOption.checked = true;
217
- this.selectionModel.select(correspondingOption);
383
+ /**
384
+ * Updates the selection state of the toggles in the group based on a value. Resolved in one pass:
385
+ * walking the toggles one by one would publish an intermediate empty selection and announce it.
386
+ */
387
+ setSelectionByValue(value) {
388
+ if (this.multiple() && value && !Array.isArray(value)) {
389
+ throw Error('Value must be an array in multiple-selection mode.');
218
390
  }
391
+ this.rawValue.set(value);
392
+ if (!this.selectionModel) {
393
+ return;
394
+ }
395
+ const values = this.multiple() ? (value ?? []) : [value];
396
+ const matched = this.buttonToggles().filter((toggle) => toggle.value != null && values.includes(toggle.value));
397
+ this.selectionModel.clear();
398
+ this.selectionModel.select(...(this.multiple() ? matched : matched.slice(0, 1)));
399
+ this.publishSelection();
219
400
  }
220
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqButtonToggleGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
221
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "20.3.30", type: KbqButtonToggleGroup, isStandalone: true, selector: "kbq-button-toggle-group", inputs: { vertical: { classPropertyName: "vertical", publicName: "vertical", isSignal: false, isRequired: false, transformFunction: null }, stretched: { classPropertyName: "stretched", publicName: "stretched", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", change: "change" }, host: { properties: { "class.kbq-button-toggle_vertical": "vertical", "class.kbq-button-toggle-group_stretched": "stretched()" }, classAttribute: "kbq-button-toggle-group" }, providers: [KBQ_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR], queries: [{ propertyName: "buttonToggles", predicate: i0.forwardRef(() => KbqButtonToggle), isSignal: true }], exportAs: ["kbqButtonToggleGroup"], ngImport: i0 }); }
401
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqButtonToggleGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
402
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.25", type: KbqButtonToggleGroup, isStandalone: true, selector: "kbq-button-toggle-group", inputs: { vertical: { classPropertyName: "vertical", publicName: "vertical", isSignal: true, isRequired: false, transformFunction: null }, stretched: { classPropertyName: "stretched", publicName: "stretched", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, valueInput: { classPropertyName: "valueInput", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", change: "change" }, host: { properties: { "class.kbq-button-toggle_vertical": "vertical()", "class.kbq-button-toggle-group_stretched": "stretched()", "attr.role": "role()", "attr.aria-orientation": "ariaOrientation()" }, classAttribute: "kbq-button-toggle-group" }, providers: [KBQ_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR], queries: [{ propertyName: "buttonToggles", predicate: i0.forwardRef(() => KbqButtonToggle), isSignal: true }], exportAs: ["kbqButtonToggleGroup"], usesOnChanges: true, ngImport: i0 }); }
222
403
  }
223
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqButtonToggleGroup, decorators: [{
404
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqButtonToggleGroup, decorators: [{
224
405
  type: Directive,
225
406
  args: [{
226
407
  selector: 'kbq-button-toggle-group',
227
408
  providers: [KBQ_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR],
228
409
  host: {
229
410
  class: 'kbq-button-toggle-group',
230
- '[class.kbq-button-toggle_vertical]': 'vertical',
231
- '[class.kbq-button-toggle-group_stretched]': 'stretched()'
411
+ '[class.kbq-button-toggle_vertical]': 'vertical()',
412
+ '[class.kbq-button-toggle-group_stretched]': 'stretched()',
413
+ '[attr.role]': 'role()',
414
+ '[attr.aria-orientation]': 'ariaOrientation()'
232
415
  },
233
416
  exportAs: 'kbqButtonToggleGroup'
234
417
  }]
235
- }], propDecorators: { vertical: [{
236
- type: Input
237
- }], stretched: [{ type: i0.Input, args: [{ isSignal: true, alias: "stretched", required: false }] }], value: [{
238
- type: Input
239
- }], multiple: [{
240
- type: Input
241
- }], buttonToggles: [{ type: i0.ContentChildren, args: [forwardRef(() => KbqButtonToggle), { isSignal: true }] }], disabled: [{
242
- type: Input
243
- }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], change: [{ type: i0.Output, args: ["change"] }] } });
418
+ }], propDecorators: { vertical: [{ type: i0.Input, args: [{ isSignal: true, alias: "vertical", required: false }] }], stretched: [{ type: i0.Input, args: [{ isSignal: true, alias: "stretched", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], buttonToggles: [{ type: i0.ContentChildren, args: [forwardRef(() => KbqButtonToggle), { isSignal: true }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], change: [{ type: i0.Output, args: ["change"] }], valueInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], disabledInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
244
419
  /** Single button inside of a toggle group. */
245
420
  class KbqButtonToggle {
246
- constructor() {
247
- this.buttonToggleGroup = inject(KbqButtonToggleGroup, { optional: true });
248
- this.changeDetectorRef = inject(ChangeDetectorRef);
249
- this.focusMonitor = inject(FocusMonitor);
250
- this.element = inject(ElementRef);
251
- this.icons = contentChildren(KbqIcon, ...(ngDevMode ? [{ debugName: "icons", descendants: true }] : [{ descendants: true }]));
252
- this.iconType = '';
253
- this.mcButton = viewChild.required(KbqButton);
254
- /** Tabindex for the toggle. */
255
- this.tabIndex = input(undefined, ...(ngDevMode ? [{ debugName: "tabIndex" }] : []));
256
- /** Event emitted when the group value changes. */
257
- this.change = output();
258
- this.isSingleSelector = false;
259
- this._checked = false;
260
- this._disabled = false;
261
- }
262
421
  /** Whether the button is checked. */
263
- // TODO: Skipped for migration because:
264
- // Accessor inputs cannot be migrated as they are too complex.
265
422
  get checked() {
266
- return this.buttonToggleGroup ? this.buttonToggleGroup.isSelected(this) : this._checked;
423
+ return this.checkedState();
267
424
  }
268
425
  set checked(value) {
269
- const newValue = coerceBooleanProperty(value);
270
- if (newValue !== this._checked) {
271
- this._checked = newValue;
426
+ untracked(() => {
427
+ // Against the effective state rather than `_checked`, which a grouped toggle does not own:
428
+ // its group selects it directly, so the two drift apart the moment a value is assigned.
429
+ if (value === this.checked) {
430
+ return;
431
+ }
432
+ this._checked.set(value);
272
433
  if (this.buttonToggleGroup) {
273
- this.buttonToggleGroup.syncButtonToggle(this, this._checked);
434
+ this.buttonToggleGroup.syncButtonToggle(this, value);
274
435
  }
275
- this.changeDetectorRef.markForCheck();
276
- }
436
+ });
277
437
  }
278
- // TODO: Skipped for migration because:
279
- // Accessor inputs cannot be migrated as they are too complex.
438
+ /**
439
+ * Whether the toggle acts as a radio button (a single-selection group) or as a checkbox
440
+ * (a multiple-selection group, or a standalone toggle).
441
+ */
442
+ get type() {
443
+ return this.isSingleSelector() ? 'radio' : 'checkbox';
444
+ }
445
+ /**
446
+ * Whether the toggle holds icons only (`-icon`), icons beside a label (`-icon-text`) or no icon
447
+ * at all (`''`). Rendered as the `.kbq-button-toggle-icon`/`.kbq-button-toggle-icon-text` host
448
+ * class, which is the only signal a stylesheet gets: CSS cannot see text nodes, so a selector can
449
+ * never tell an icon-only toggle from a label that happens to contain an icon.
450
+ */
451
+ get iconType() {
452
+ return this._iconType();
453
+ }
454
+ /** Value of the toggle. The value of a selected toggle is the value of its group. */
455
+ get value() {
456
+ return this._value();
457
+ }
458
+ set value(value) {
459
+ untracked(() => {
460
+ const previous = this._value();
461
+ if (value === previous)
462
+ return;
463
+ this._value.set(value);
464
+ this.buttonToggleGroup?.followToggleValue(this, previous);
465
+ });
466
+ }
467
+ /** Whether the toggle is disabled. A toggle inside a disabled group is disabled as well. */
280
468
  get disabled() {
281
- return this._disabled || (this.buttonToggleGroup && this.buttonToggleGroup.disabled);
469
+ return this.disabledState();
282
470
  }
283
471
  set disabled(value) {
284
- this._disabled = coerceBooleanProperty(value);
472
+ this._disabled.set(value);
473
+ }
474
+ ngOnChanges(changes) {
475
+ // A bound input is handed to its member, a bound `undefined` included;
476
+ // unbound, it leaves what code wrote.
477
+ if (changes['valueInput']) {
478
+ this.value = this.valueInput();
479
+ }
480
+ if (changes['checkedInput']) {
481
+ const checked = this.checkedInput();
482
+ if (checked !== undefined)
483
+ this.checked = checked;
484
+ }
485
+ if (changes['disabledInput']) {
486
+ const disabled = this.disabledInput();
487
+ if (disabled !== undefined)
488
+ this.disabled = disabled;
489
+ }
490
+ }
491
+ constructor() {
492
+ /** Group the toggle belongs to, or `null` for a standalone toggle. */
493
+ this.buttonToggleGroup = inject(KbqButtonToggleGroup, { optional: true });
494
+ this.changeDetectorRef = inject(ChangeDetectorRef);
495
+ this.focusMonitor = inject(FocusMonitor);
496
+ this.element = inject(ElementRef);
497
+ this.directionality = inject(Directionality, { optional: true });
498
+ this.icons = contentChildren(KbqIcon, { ...(ngDevMode ? { debugName: "icons" } : /* istanbul ignore next */ {}), descendants: true });
499
+ this.button = viewChild.required(KbqButton);
500
+ /** Tabindex for the toggle. `null` leaves the toggle at its default position in the tab order. */
501
+ this.tabIndex = input(null, ...(ngDevMode ? [{ debugName: "tabIndex" }] : /* istanbul ignore next */ []));
502
+ /** Accessible name of the toggle. Required when the toggle projects nothing but icons. */
503
+ this.ariaLabel = input(null, { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
504
+ /** Id of the element that labels the toggle. */
505
+ this.ariaLabelledby = input(null, { ...(ngDevMode ? { debugName: "ariaLabelledby" } : /* istanbul ignore next */ {}), alias: 'aria-labelledby' });
506
+ /** Event emitted when the group value changes. */
507
+ this.change = output();
508
+ this._value = signal(undefined, ...(ngDevMode ? [{ debugName: "_value" }] : /* istanbul ignore next */ []));
509
+ this._checked = signal(false, ...(ngDevMode ? [{ debugName: "_checked" }] : /* istanbul ignore next */ []));
510
+ this._disabled = signal(false, ...(ngDevMode ? [{ debugName: "_disabled" }] : /* istanbul ignore next */ []));
511
+ this._iconType = signal('', ...(ngDevMode ? [{ debugName: "_iconType" }] : /* istanbul ignore next */ []));
512
+ /** Whether the missing-accessible-name warning has already been emitted for this toggle. */
513
+ this.accessibleNameWarned = false;
514
+ /** Whether the toggle behaves like a radio button, i.e. sits in a single-selection group. */
515
+ this.isSingleSelector = computed(() => !!this.buttonToggleGroup && !this.buttonToggleGroup.multiple(), ...(ngDevMode ? [{ debugName: "isSingleSelector" }] : /* istanbul ignore next */ []));
516
+ this.checkedState = computed(() => this.buttonToggleGroup ? this.buttonToggleGroup.isSelected(this) : this._checked(), ...(ngDevMode ? [{ debugName: "checkedState" }] : /* istanbul ignore next */ []));
517
+ this.disabledState = computed(() => this._disabled() || !!this.buttonToggleGroup?.disabled, ...(ngDevMode ? [{ debugName: "disabledState" }] : /* istanbul ignore next */ []));
518
+ /**
519
+ * A radio group is a single tab stop: Tab reaches the selected toggle — or the first enabled one
520
+ * while nothing is selected — and the arrow keys move within the group from there. A
521
+ * multiple-selection group is a set of independent toggle buttons, so every one of them stays in
522
+ * the tab order.
523
+ */
524
+ this.tabIndexValue = computed(() => {
525
+ const own = this.tabIndex() ?? 0;
526
+ if (!this.isSingleSelector()) {
527
+ return own;
528
+ }
529
+ const toggles = this.buttonToggleGroup.buttonToggles().filter((toggle) => !toggle.disabled);
530
+ return (toggles.find((toggle) => toggle.checked) ?? toggles[0]) === this ? own : -1;
531
+ }, ...(ngDevMode ? [{ debugName: "tabIndexValue" }] : /* istanbul ignore next */ []));
532
+ /**
533
+ * A toggle in a single-selection group is a radio button; anywhere else it is a toggle button,
534
+ * which is what a native `<button>` already is — it only needs its pressed state.
535
+ */
536
+ this.role = computed(() => (this.isSingleSelector() ? 'radio' : null), ...(ngDevMode ? [{ debugName: "role" }] : /* istanbul ignore next */ []));
537
+ /** Selected state of a radio; `null` outside a single-selection group, where `aria-pressed` says it. */
538
+ this.ariaChecked = computed(() => (this.isSingleSelector() ? this.checkedState() : null), ...(ngDevMode ? [{ debugName: "ariaChecked" }] : /* istanbul ignore next */ []));
539
+ /** Pressed state of a toggle button; `null` in a single-selection group, where `aria-checked` says it. */
540
+ this.ariaPressed = computed(() => (this.isSingleSelector() ? null : this.checkedState()), ...(ngDevMode ? [{ debugName: "ariaPressed" }] : /* istanbul ignore next */ []));
541
+ /** @docs-private */
542
+ this.valueInput = input(undefined, { ...(ngDevMode ? { debugName: "valueInput" } : /* istanbul ignore next */ {}), alias: 'value' });
543
+ /** @docs-private */
544
+ this.checkedInput = input(undefined, { ...(ngDevMode ? { debugName: "checkedInput" } : /* istanbul ignore next */ {}), alias: 'checked',
545
+ transform: booleanAttribute });
546
+ /** @docs-private */
547
+ this.disabledInput = input(undefined, { ...(ngDevMode ? { debugName: "disabledInput" } : /* istanbul ignore next */ {}), alias: 'disabled',
548
+ transform: booleanAttribute });
549
+ // The content query only tracks KbqIcon instances, while `iconType` also depends on the text
550
+ // nodes beside them, which the query cannot see — those are covered by the MutationObserver
551
+ // in the template. This effect covers icons appearing or disappearing (e.g. via @if) without
552
+ // waiting for the observer.
553
+ effect(() => {
554
+ this.icons();
555
+ untracked(() => this.updateIconType());
556
+ });
285
557
  }
286
558
  ngOnInit() {
287
- this.isSingleSelector = this.buttonToggleGroup && !this.buttonToggleGroup.multiple;
288
- this.type = this.isSingleSelector ? 'radio' : 'checkbox';
289
559
  if (this.buttonToggleGroup && this.buttonToggleGroup.isPrechecked(this)) {
290
560
  this.checked = true;
291
561
  }
292
562
  }
293
563
  ngAfterContentInit() {
294
- const icons = this.icons();
295
- if (icons.length) {
296
- const nodesWithoutComments = getNodesWithoutComments(this.element.nativeElement.querySelector('.kbq-button-toggle-wrapper').childNodes).length;
297
- this.iconType = nodesWithoutComments === icons.length ? '-icon' : '-icon-text';
298
- }
564
+ this.updateIconType();
565
+ }
566
+ /**
567
+ * Refreshes `iconType`, which tells whether the toggle holds icons only or icons beside a label.
568
+ *
569
+ * No selector can work this out: CSS cannot see text nodes, so it can never tell an icon-only
570
+ * toggle from a label that happens to contain an icon.
571
+ *
572
+ * @docs-private
573
+ */
574
+ updateIconType() {
575
+ const wrapper = this.element.nativeElement.querySelector('.kbq-button-toggle-wrapper');
576
+ const label = wrapper?.querySelector('.kbq-button-toggle-text');
577
+ if (!wrapper || !label)
578
+ return;
579
+ const iconElements = this.icons().map((icon) => icon.getHostElement());
580
+ // The label box belongs to the template rather than to the projected content, so it is
581
+ // flattened out: an icon marked with `kbqButtonPrefix`/`kbqButtonSuffix` sits beside the box
582
+ // and a legacy one inside it, and both have to be counted the same way. Same shape as
583
+ // `KbqButtonCssStyler`, which flattens `.kbq-button-text` for the same reason.
584
+ const nodes = getContentNodes(wrapper).flatMap((node) => (node === label ? getContentNodes(node) : [node]));
585
+ this._iconType.set(iconElements.length ? (nodes.length === iconElements.length ? '-icon' : '-icon-text') : '');
586
+ this.warnIfIconOnlyHasNoAccessibleName();
299
587
  }
300
588
  ngAfterViewInit() {
301
589
  this.focusMonitor.monitor(this.element.nativeElement, true);
@@ -311,36 +599,100 @@ class KbqButtonToggle {
311
599
  }
312
600
  /** Focuses the button. */
313
601
  focus() {
314
- this.element.nativeElement.focus();
602
+ this.button().focus();
603
+ }
604
+ /** Focuses the button as if the user had reached it with the keyboard, showing the focus ring. */
605
+ focusViaKeyboard() {
606
+ this.button().focusViaKeyboard();
315
607
  }
316
608
  /** Checks the button toggle due to an interaction with the underlying native button. */
317
609
  onToggleClick() {
610
+ untracked(() => this.toggleByUser());
611
+ }
612
+ /** Body of `onToggleClick()`. */
613
+ toggleByUser() {
318
614
  if (this.disabled) {
319
615
  return;
320
616
  }
321
- const newChecked = this.isSingleSelector ? true : !this._checked;
322
- if (newChecked !== this._checked) {
323
- this._checked = newChecked;
617
+ const newChecked = this.isSingleSelector() ? true : !this.checked;
618
+ if (newChecked !== this.checked) {
619
+ this._checked.set(newChecked);
324
620
  if (this.buttonToggleGroup) {
325
- this.buttonToggleGroup.syncButtonToggle(this, this._checked, true);
621
+ this.buttonToggleGroup.syncButtonToggle(this, newChecked, true);
326
622
  this.buttonToggleGroup.onTouched();
327
623
  }
328
624
  }
329
- // Emit a change event when it's the single selector
625
+ // Emitted for every interaction, including a re-click of an already selected radio, which
626
+ // changes nothing: the toggle reports that it was activated, while the group above only
627
+ // reports an actual change of value.
330
628
  this.change.emit(new KbqButtonToggleChange(this, this.value));
331
629
  }
332
630
  /**
333
631
  * Marks the button toggle as needing checking for change detection.
334
- * This method is exposed because the parent button toggle group will directly
335
- * update bound properties of the radio button.
632
+ *
633
+ * Kept for back-compatibility. A toggle now derives `checked` and `disabled` from signals owned
634
+ * by its group, so it re-renders on its own and nothing in the library calls this any more.
336
635
  */
337
636
  markForCheck() {
338
- // When the group value changes, the button will not be notified.
339
- // Use `markForCheck` to explicit update button toggle's status.
637
+ // Kept at the DS-2196 review: the button-toggle review step of the migration guide promises it stays.
340
638
  this.changeDetectorRef.markForCheck();
341
639
  }
342
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqButtonToggle, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
343
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.30", type: KbqButtonToggle, isStandalone: true, selector: "kbq-button-toggle", inputs: { checked: { classPropertyName: "checked", publicName: "checked", isSignal: false, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { change: "change" }, host: { properties: { "class": "\"kbq-button-toggle\" + iconType", "class.kbq-disabled": "disabled", "class.kbq-selected": "checked" }, classAttribute: "kbq-button-toggle" }, queries: [{ propertyName: "icons", predicate: KbqIcon, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "mcButton", first: true, predicate: KbqButton, descendants: true, isSignal: true }], exportAs: ["kbqButtonToggle"], ngImport: i0, template: `
640
+ /**
641
+ * Walks a radio group with the arrow keys, moving focus and selection together, as the WAI-ARIA
642
+ * radiogroup pattern expects. A multiple-selection group is a set of independent toggle buttons
643
+ * that Tab reaches one by one, so it needs no key handling of its own.
644
+ */
645
+ onKeydown(event) {
646
+ if (!this.isSingleSelector())
647
+ return;
648
+ const toggles = this.buttonToggleGroup.buttonToggles().filter((toggle) => !toggle.disabled);
649
+ const current = toggles.indexOf(this);
650
+ if (current === -1)
651
+ return;
652
+ const rtl = this.directionality?.value === 'rtl';
653
+ const { keyCode } = event;
654
+ let next;
655
+ if (keyCode === DOWN_ARROW || keyCode === (rtl ? LEFT_ARROW : RIGHT_ARROW)) {
656
+ next = (current + 1) % toggles.length;
657
+ }
658
+ else if (keyCode === UP_ARROW || keyCode === (rtl ? RIGHT_ARROW : LEFT_ARROW)) {
659
+ next = (current - 1 + toggles.length) % toggles.length;
660
+ }
661
+ else if (keyCode === HOME) {
662
+ next = 0;
663
+ }
664
+ else if (keyCode === END) {
665
+ next = toggles.length - 1;
666
+ }
667
+ else {
668
+ return;
669
+ }
670
+ event.preventDefault();
671
+ const target = toggles[next];
672
+ target.focusViaKeyboard();
673
+ target.onToggleClick();
674
+ }
675
+ /**
676
+ * `KbqIcon` renders a decorative glyph, so an icon-only toggle carries no text. Without an
677
+ * `aria-label`/`aria-labelledby` its button has no accessible name at all (AXE `button-name`).
678
+ * `KbqButtonCssStyler` cannot warn about it here: a toggle projects its icons through its own
679
+ * wrapper, so the button's own content query never sees them.
680
+ *
681
+ * A `title` on the host is deliberately not accepted as a name: the host is not the element the
682
+ * accessible name is computed for — the inner button is — and the attribute never reaches it.
683
+ */
684
+ warnIfIconOnlyHasNoAccessibleName() {
685
+ if (!isDevMode() || this.accessibleNameWarned || this._iconType() !== '-icon')
686
+ return;
687
+ if (this.ariaLabel() || this.ariaLabelledby())
688
+ return;
689
+ const host = this.element.nativeElement;
690
+ this.accessibleNameWarned = true;
691
+ // eslint-disable-next-line no-console
692
+ console.warn('KbqButtonToggle: icon-only toggle has no accessible name. Add [aria-label] or [aria-labelledby] to it.', host);
693
+ }
694
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqButtonToggle, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
695
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.25", type: KbqButtonToggle, isStandalone: true, selector: "kbq-button-toggle", inputs: { tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledby: { classPropertyName: "ariaLabelledby", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null }, valueInput: { classPropertyName: "valueInput", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, checkedInput: { classPropertyName: "checkedInput", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { change: "change" }, host: { listeners: { "keydown": "onKeydown($event)" }, properties: { "class.kbq-button-toggle-icon": "iconType === \"-icon\"", "class.kbq-button-toggle-icon-text": "iconType === \"-icon-text\"", "class.kbq-disabled": "disabled", "class.kbq-selected": "checked" }, classAttribute: "kbq-button-toggle" }, queries: [{ propertyName: "icons", predicate: KbqIcon, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "button", first: true, predicate: KbqButton, descendants: true, isSignal: true }], exportAs: ["kbqButtonToggle"], usesOnChanges: true, ngImport: i0, template: `
344
696
  <button
345
697
  kbq-button
346
698
  kbq-title
@@ -348,18 +700,28 @@ class KbqButtonToggle {
348
700
  [kbqStyle]="'transparent'"
349
701
  [class.kbq-selected]="checked"
350
702
  [disabled]="disabled"
351
- [tabIndex]="tabIndex() || 0"
703
+ [tabIndex]="tabIndexValue()"
704
+ [attr.role]="role()"
705
+ [attr.aria-checked]="ariaChecked()"
706
+ [attr.aria-pressed]="ariaPressed()"
707
+ [attr.aria-label]="ariaLabel()"
708
+ [attr.aria-labelledby]="ariaLabelledby()"
352
709
  (click)="onToggleClick()"
353
710
  >
354
- <div #kbqTitleText class="kbq-button-toggle-wrapper">
355
- <ng-content />
711
+ <div class="kbq-button-toggle-wrapper" (cdkObserveContent)="updateIconType()">
712
+ <ng-content select="[kbqButtonPrefix]" />
713
+ <span #kbqTitleContainer #kbqTitleText class="kbq-button-toggle-text">
714
+ <ng-content />
715
+ </span>
716
+ <ng-content select="[kbqButtonSuffix]" />
356
717
  </div>
357
718
  </button>
358
- `, isInline: true, styles: [".kbq-button-toggle-group{box-sizing:border-box;display:inline-flex;flex-direction:row;align-items:center;gap:var(--kbq-button-toggle-size-container-content-gap-horizontal);border-radius:var(--kbq-button-toggle-size-container-border-radius);padding:var(--kbq-button-toggle-size-container-padding-vertical) var(--kbq-button-toggle-size-container-padding-horizontal)}.kbq-button-toggle-group .kbq-button-toggle{display:flex;justify-content:flex-start;align-items:center;overflow:visible;min-width:0;box-sizing:content-box;height:var(--kbq-button-toggle-size-item-height);min-height:var(--kbq-button-toggle-size-item-height);border-radius:var(--kbq-button-toggle-size-item-border-radius);border:var(--kbq-size-border-width) solid transparent}.kbq-button-toggle-group .kbq-button-toggle.cdk-keyboard-focused{outline:1px solid var(--kbq-states-line-focus-theme);border-color:var(--kbq-states-line-focus-theme)}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon{height:inherit;min-height:inherit;border-radius:var(--kbq-button-toggle-size-item-border-radius);border-width:0;padding:calc(var(--kbq-button-toggle-size-item-padding-vertical) - var(--kbq-button-toggle-size-item-focus-outline-width)) calc(var(--kbq-button-toggle-size-item-padding-horizontal) - var(--kbq-button-toggle-size-item-focus-outline-width))}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button:before,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon:before{content:\"\";position:absolute}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button .kbq-button-wrapper,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon .kbq-button-wrapper{width:100%}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button .kbq-button-toggle-wrapper,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon .kbq-button-toggle-wrapper{display:inline-flex;justify-content:center;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;align-items:center;width:100%;gap:var(--kbq-button-toggle-size-item-content-gap-horizontal)}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button.cdk-keyboard-focused,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon.cdk-keyboard-focused{outline:none}.kbq-button-toggle-group:not(.kbq-button-toggle_vertical) .kbq-button-toggle>.kbq-button,.kbq-button-toggle-group:not(.kbq-button-toggle_vertical) .kbq-button-toggle>.kbq-button-icon{max-width:100%;height:var(--kbq-button-toggle-size-item-height)}.kbq-button-toggle-group:not(.kbq-button-toggle_vertical) .kbq-button-toggle>.kbq-button:before,.kbq-button-toggle-group:not(.kbq-button-toggle_vertical) .kbq-button-toggle>.kbq-button-icon:before{inset-block:calc(-1 * var(--kbq-button-toggle-size-item-hit-area-vertical));inset-inline:calc(-1 * var(--kbq-button-toggle-size-item-hit-area-gap))}.kbq-button-toggle-group:not(.kbq-button-toggle_vertical) .kbq-button-toggle:first-of-type>:is(.kbq-button,.kbq-button-icon):before{inset-inline-start:calc(-1 * var(--kbq-button-toggle-size-item-hit-area-horizontal))}.kbq-button-toggle-group:not(.kbq-button-toggle_vertical) .kbq-button-toggle:last-of-type>:is(.kbq-button,.kbq-button-icon):before{inset-inline-end:calc(-1 * var(--kbq-button-toggle-size-item-hit-area-horizontal))}.kbq-button-toggle-group.kbq-button-toggle_vertical .kbq-button-toggle>.kbq-button:before,.kbq-button-toggle-group.kbq-button-toggle_vertical .kbq-button-toggle>.kbq-button-icon:before{inset-inline:calc(-1 * var(--kbq-button-toggle-size-item-hit-area-horizontal));inset-block:calc(-1 * var(--kbq-button-toggle-size-item-hit-area-gap))}.kbq-button-toggle-group.kbq-button-toggle_vertical .kbq-button-toggle:first-of-type>:is(.kbq-button,.kbq-button-icon):before{inset-block-start:calc(-1 * var(--kbq-button-toggle-size-item-hit-area-vertical))}.kbq-button-toggle-group.kbq-button-toggle_vertical .kbq-button-toggle:last-of-type>:is(.kbq-button,.kbq-button-icon):before{inset-block-end:calc(-1 * var(--kbq-button-toggle-size-item-hit-area-vertical))}.kbq-button-toggle-group.kbq-button-toggle-group_stretched{width:100%}.kbq-button-toggle-group.kbq-button-toggle-group_stretched .kbq-button-toggle{flex:1}.kbq-button-toggle-group.kbq-button-toggle-group_stretched .kbq-button-toggle>.kbq-button,.kbq-button-toggle-group.kbq-button-toggle-group_stretched .kbq-button-toggle>.kbq-button-icon{width:100%;flex:1}.kbq-button-toggle-group.kbq-button-toggle-group_stretched .kbq-button-toggle>.kbq-button .kbq-button-wrapper,.kbq-button-toggle-group.kbq-button-toggle-group_stretched .kbq-button-toggle>.kbq-button-icon .kbq-button-wrapper{justify-content:center}.kbq-button-toggle-group.kbq-button-toggle-group_stretched .kbq-button-toggle>.kbq-button .kbq-button-toggle-wrapper,.kbq-button-toggle-group.kbq-button-toggle-group_stretched .kbq-button-toggle>.kbq-button-icon .kbq-button-toggle-wrapper{display:block}.kbq-button-toggle_vertical{flex-direction:column}.kbq-button-toggle_vertical .kbq-button-toggle{width:100%}.kbq-button-toggle_vertical .kbq-button-toggle>.kbq-button,.kbq-button-toggle_vertical .kbq-button-toggle>.kbq-button-icon{width:100%;border-radius:var(--kbq-button-toggle-size-item-border-radius)}.kbq-button-toggle-group{background:var(--kbq-button-toggle-container-background)}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button,.kbq-button-toggle-group .kbq-button-toggle>.kbq-icon-button{background:var(--kbq-button-toggle-item-default-background);color:var(--kbq-button-toggle-item-default-text)}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle>.kbq-icon-button .kbq-icon.kbq-empty{color:var(--kbq-button-toggle-item-default-icon)}.kbq-button-toggle-group .kbq-button-toggle.kbq-hover:not(.kbq-disabled)>.kbq-button,.kbq-button-toggle-group .kbq-button-toggle.kbq-hover:not(.kbq-disabled)>.kbq-icon-button,.kbq-button-toggle-group .kbq-button-toggle:hover:not(.kbq-disabled)>.kbq-button,.kbq-button-toggle-group .kbq-button-toggle:hover:not(.kbq-disabled)>.kbq-icon-button{background:var(--kbq-button-toggle-item-states-hover-background);color:var(--kbq-button-toggle-item-states-hover-text)}.kbq-button-toggle-group .kbq-button-toggle.kbq-hover:not(.kbq-disabled)>.kbq-button .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle.kbq-hover:not(.kbq-disabled)>.kbq-icon-button .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle:hover:not(.kbq-disabled)>.kbq-button .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle:hover:not(.kbq-disabled)>.kbq-icon-button .kbq-icon.kbq-empty{color:var(--kbq-button-toggle-item-states-hover-icon)}.kbq-button-toggle-group .kbq-button-toggle.kbq-active:not(.kbq-disabled)>.kbq-button,.kbq-button-toggle-group .kbq-button-toggle.kbq-active:not(.kbq-disabled)>.kbq-icon-button,.kbq-button-toggle-group .kbq-button-toggle:active:not(.kbq-disabled)>.kbq-button,.kbq-button-toggle-group .kbq-button-toggle:active:not(.kbq-disabled)>.kbq-icon-button{background:var(--kbq-button-toggle-item-states-active-background);color:var(--kbq-button-toggle-item-states-active-text)}.kbq-button-toggle-group .kbq-button-toggle.kbq-active:not(.kbq-disabled)>.kbq-button .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle.kbq-active:not(.kbq-disabled)>.kbq-icon-button .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle:active:not(.kbq-disabled)>.kbq-button .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle:active:not(.kbq-disabled)>.kbq-icon-button .kbq-icon.kbq-empty{color:var(--kbq-button-toggle-item-states-active-icon)}.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled)>.kbq-button,.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled)>.kbq-icon-button{background:var(--kbq-button-toggle-item-states-selected-background);color:var(--kbq-button-toggle-item-states-selected-text)}.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled)>.kbq-button .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled)>.kbq-icon-button .kbq-icon.kbq-empty{color:var(--kbq-button-toggle-item-states-selected-icon)}.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled).kbq-active>.kbq-button,.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled).kbq-active>.kbq-icon-button,.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled):active>.kbq-button,.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled):active>.kbq-icon-button{background:var(--kbq-button-toggle-item-states-selected-active-background);color:var(--kbq-button-toggle-item-states-selected-active-text)}.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled).kbq-active>.kbq-button .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled).kbq-active>.kbq-icon-button .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled):active>.kbq-button .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled):active>.kbq-icon-button .kbq-icon.kbq-empty{color:var(--kbq-button-toggle-item-states-selected-active-icon)}.kbq-button-toggle-group .kbq-button-toggle.kbq-disabled>.kbq-button,.kbq-button-toggle-group .kbq-button-toggle.kbq-disabled>.kbq-icon-button{background:var(--kbq-button-toggle-item-states-disabled-background);color:var(--kbq-button-toggle-item-states-disabled-text)}.kbq-button-toggle-group .kbq-button-toggle.kbq-disabled>.kbq-button .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle.kbq-disabled>.kbq-icon-button .kbq-icon.kbq-empty{color:var(--kbq-button-toggle-item-states-disabled-icon)}.kbq-button-toggle-group .kbq-button-toggle.kbq-disabled.kbq-selected>.kbq-button,.kbq-button-toggle-group .kbq-button-toggle.kbq-disabled.kbq-selected>.kbq-icon-button{background:var(--kbq-button-toggle-item-states-selected-disabled-background);color:var(--kbq-button-toggle-item-states-selected-disabled-text)}.kbq-button-toggle-group .kbq-button-toggle.kbq-disabled.kbq-selected>.kbq-button .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle.kbq-disabled.kbq-selected>.kbq-icon-button .kbq-icon.kbq-empty{color:var(--kbq-button-toggle-item-states-selected-disabled-icon)}.kbq-button-toggle-group .kbq-button-toggle.cdk-keyboard-focused{border-color:var(--kbq-button-toggle-item-states-focused-outline)}.kbq-button-toggle .kbq-button-toggle-wrapper{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-button-toggle-group{--kbq-button-toggle-size-container-border-radius: var(--kbq-size-border-radius);--kbq-button-toggle-size-container-padding-horizontal: var(--kbq-size-xxs);--kbq-button-toggle-size-container-padding-vertical: var(--kbq-size-xxs);--kbq-button-toggle-size-container-content-gap-horizontal: var(--kbq-size-xxs);--kbq-button-toggle-size-item-height: 22px;--kbq-button-toggle-size-item-border-radius: var(--kbq-size-xxs);--kbq-button-toggle-size-item-padding-horizontal: var(--kbq-size-s);--kbq-button-toggle-size-item-padding-vertical: var(--kbq-size-3xs);--kbq-button-toggle-size-item-content-gap-horizontal: var(--kbq-size-xxs);--kbq-button-toggle-size-item-focus-outline-width: var(--kbq-size-3xs);--kbq-button-toggle-size-item-hit-area-gap: calc( var(--kbq-size-border-width) + var(--kbq-button-toggle-size-container-content-gap-horizontal) / 2 );--kbq-button-toggle-size-item-hit-area-horizontal: calc( var(--kbq-size-border-width) + var(--kbq-button-toggle-size-container-padding-horizontal) );--kbq-button-toggle-size-item-hit-area-vertical: calc( var(--kbq-size-border-width) + var(--kbq-button-toggle-size-container-padding-vertical) );--kbq-button-toggle-container-background: var(--kbq-background-contrast-fade);--kbq-button-toggle-item-default-background: var(--kbq-background-transparent);--kbq-button-toggle-item-default-text: var(--kbq-foreground-contrast);--kbq-button-toggle-item-default-icon: var(--kbq-icon-contrast-fade);--kbq-button-toggle-item-states-hover-background: var(--kbq-states-background-contrast-fade-hover);--kbq-button-toggle-item-states-hover-text: var(--kbq-foreground-contrast);--kbq-button-toggle-item-states-hover-icon: var(--kbq-icon-contrast-fade);--kbq-button-toggle-item-states-active-background: var(--kbq-states-background-contrast-fade-active);--kbq-button-toggle-item-states-active-text: var(--kbq-foreground-contrast);--kbq-button-toggle-item-states-active-icon: var(--kbq-icon-contrast-fade);--kbq-button-toggle-item-states-selected-background: var(--kbq-background-card);--kbq-button-toggle-item-states-selected-text: var(--kbq-foreground-contrast);--kbq-button-toggle-item-states-selected-icon: var(--kbq-icon-contrast-fade);--kbq-button-toggle-item-states-selected-active-background: var(--kbq-states-background-transparent-active);--kbq-button-toggle-item-states-selected-active-text: var(--kbq-foreground-contrast);--kbq-button-toggle-item-states-selected-active-icon: var(--kbq-icon-contrast-fade);--kbq-button-toggle-item-states-selected-disabled-background: var(--kbq-states-background-disabled);--kbq-button-toggle-item-states-selected-disabled-text: var(--kbq-states-foreground-disabled);--kbq-button-toggle-item-states-selected-disabled-icon: var(--kbq-states-icon-disabled);--kbq-button-toggle-item-states-disabled-background: none;--kbq-button-toggle-item-states-disabled-text: var(--kbq-states-foreground-disabled);--kbq-button-toggle-item-states-disabled-icon: var(--kbq-states-icon-disabled);--kbq-button-toggle-item-states-focused-outline: var(--kbq-states-line-focus-theme)}\n"], dependencies: [{ kind: "directive", type: KbqTitleDirective, selector: "[kbq-title]", inputs: ["kbq-title"], exportAs: ["kbqTitle"] }, { kind: "ngmodule", type: KbqButtonModule }, { kind: "component", type: i1.KbqButton, selector: "[kbq-button]", inputs: ["kbqStyle", "disabled", "tabIndex"] }, { kind: "directive", type: i1.KbqButtonCssStyler, selector: "[kbq-button]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
719
+ `, isInline: true, styles: [".kbq-truncate-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.kbq-button-toggle-group{box-sizing:border-box;display:inline-flex;flex-direction:row;align-items:center;gap:var(--kbq-button-toggle-size-container-content-gap-horizontal);border-radius:var(--kbq-button-toggle-size-container-border-radius)}@supports (corner-shape: squircle){.kbq-button-toggle-group{corner-shape:squircle;border-radius:clamp(var(--kbq-button-toggle-size-container-border-radius) * 1.85,var(--kbq-button-toggle-size-container-border-radius) * 2.3 - 3.6px,var(--kbq-button-toggle-size-container-border-radius) * 2)}}.kbq-button-toggle-group{padding:var(--kbq-button-toggle-size-container-padding-vertical) var(--kbq-button-toggle-size-container-padding-horizontal)}.kbq-button-toggle-group .kbq-button-toggle{display:flex;justify-content:flex-start;align-items:center;overflow:visible;min-width:0;box-sizing:content-box;height:var(--kbq-button-toggle-size-item-height);min-height:var(--kbq-button-toggle-size-item-height);border-radius:var(--kbq-button-toggle-size-item-border-radius)}@supports (corner-shape: squircle){.kbq-button-toggle-group .kbq-button-toggle{corner-shape:squircle;border-radius:clamp(var(--kbq-button-toggle-size-item-border-radius) * 1.85,var(--kbq-button-toggle-size-item-border-radius) * 2.3 - 3.6px,var(--kbq-button-toggle-size-item-border-radius) * 2)}}.kbq-button-toggle-group .kbq-button-toggle{border:var(--kbq-size-border-width) solid transparent}.kbq-button-toggle-group .kbq-button-toggle.cdk-keyboard-focused{outline:1px solid var(--kbq-button-toggle-item-states-focused-outline)}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon{height:inherit;min-height:inherit;border-radius:var(--kbq-button-toggle-size-item-border-radius)}@supports (corner-shape: squircle){.kbq-button-toggle-group .kbq-button-toggle>.kbq-button,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon{corner-shape:squircle;border-radius:clamp(var(--kbq-button-toggle-size-item-border-radius) * 1.85,var(--kbq-button-toggle-size-item-border-radius) * 2.3 - 3.6px,var(--kbq-button-toggle-size-item-border-radius) * 2)}}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon{border-width:0;padding:calc(var(--kbq-button-toggle-size-item-padding-vertical) - var(--kbq-button-toggle-size-item-focus-outline-width)) calc(var(--kbq-button-toggle-size-item-padding-horizontal) - var(--kbq-button-toggle-size-item-focus-outline-width))}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button:before,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon:before{content:\"\";position:absolute}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button .kbq-button-wrapper,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon .kbq-button-wrapper{width:100%}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button .kbq-button-toggle-wrapper,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon .kbq-button-toggle-wrapper{display:inline-flex;justify-content:center;align-items:center;width:100%;gap:var(--kbq-button-toggle-size-item-content-gap-horizontal)}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button .kbq-button-toggle-wrapper>.kbq-button-prefix,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon .kbq-button-toggle-wrapper>.kbq-button-prefix{margin-right:0}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button .kbq-button-toggle-wrapper>.kbq-button-suffix,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon .kbq-button-toggle-wrapper>.kbq-button-suffix{margin-left:0}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button .kbq-button-toggle-text,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon .kbq-button-toggle-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;min-width:0}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button .kbq-button-toggle-text:has(>.kbq-icon),.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon .kbq-button-toggle-text:has(>.kbq-icon){display:flex;align-items:center;gap:var(--kbq-button-toggle-size-item-content-gap-horizontal)}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button.cdk-keyboard-focused,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon.cdk-keyboard-focused{outline:none}.kbq-button-toggle-group:not(.kbq-button-toggle_vertical) .kbq-button-toggle>.kbq-button,.kbq-button-toggle-group:not(.kbq-button-toggle_vertical) .kbq-button-toggle>.kbq-button-icon{max-width:100%;height:var(--kbq-button-toggle-size-item-height)}.kbq-button-toggle-group:not(.kbq-button-toggle_vertical) .kbq-button-toggle>.kbq-button:before,.kbq-button-toggle-group:not(.kbq-button-toggle_vertical) .kbq-button-toggle>.kbq-button-icon:before{inset-block:calc(-1 * var(--kbq-button-toggle-size-item-hit-area-vertical));inset-inline:calc(-1 * var(--kbq-button-toggle-size-item-hit-area-gap))}.kbq-button-toggle-group:not(.kbq-button-toggle_vertical) .kbq-button-toggle:first-of-type>:is(.kbq-button,.kbq-button-icon):before{inset-inline-start:calc(-1 * var(--kbq-button-toggle-size-item-hit-area-horizontal))}.kbq-button-toggle-group:not(.kbq-button-toggle_vertical) .kbq-button-toggle:last-of-type>:is(.kbq-button,.kbq-button-icon):before{inset-inline-end:calc(-1 * var(--kbq-button-toggle-size-item-hit-area-horizontal))}.kbq-button-toggle-group.kbq-button-toggle_vertical .kbq-button-toggle>.kbq-button:before,.kbq-button-toggle-group.kbq-button-toggle_vertical .kbq-button-toggle>.kbq-button-icon:before{inset-inline:calc(-1 * var(--kbq-button-toggle-size-item-hit-area-horizontal));inset-block:calc(-1 * var(--kbq-button-toggle-size-item-hit-area-gap))}.kbq-button-toggle-group.kbq-button-toggle_vertical .kbq-button-toggle:first-of-type>:is(.kbq-button,.kbq-button-icon):before{inset-block-start:calc(-1 * var(--kbq-button-toggle-size-item-hit-area-vertical))}.kbq-button-toggle-group.kbq-button-toggle_vertical .kbq-button-toggle:last-of-type>:is(.kbq-button,.kbq-button-icon):before{inset-block-end:calc(-1 * var(--kbq-button-toggle-size-item-hit-area-vertical))}.kbq-button-toggle-group.kbq-button-toggle-group_stretched{width:100%}.kbq-button-toggle-group.kbq-button-toggle-group_stretched .kbq-button-toggle{flex:1}.kbq-button-toggle-group.kbq-button-toggle-group_stretched .kbq-button-toggle>.kbq-button,.kbq-button-toggle-group.kbq-button-toggle-group_stretched .kbq-button-toggle>.kbq-button-icon{width:100%;flex:1}.kbq-button-toggle-group.kbq-button-toggle-group_stretched .kbq-button-toggle>.kbq-button .kbq-button-wrapper,.kbq-button-toggle-group.kbq-button-toggle-group_stretched .kbq-button-toggle>.kbq-button-icon .kbq-button-wrapper{justify-content:center}.kbq-button-toggle-group .kbq-button-toggle>:is(.kbq-button,.kbq-button-icon).kbq-button_no-label .kbq-button-toggle-text{display:flex;align-items:center}.kbq-button-toggle-group .kbq-button-toggle>:is(.kbq-button,.kbq-button-icon) .kbq-button-toggle-text:empty{display:none}.kbq-button-toggle_vertical{flex-direction:column}.kbq-button-toggle_vertical .kbq-button-toggle{width:100%}.kbq-button-toggle_vertical .kbq-button-toggle>.kbq-button,.kbq-button-toggle_vertical .kbq-button-toggle>.kbq-button-icon{width:100%}.kbq-button-toggle-group{background:var(--kbq-button-toggle-container-background)}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button.kbq-button_transparent,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon.kbq-button_transparent{background:var(--kbq-button-toggle-item-default-background);color:var(--kbq-button-toggle-item-default-text)}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button.kbq-button_transparent .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon.kbq-button_transparent .kbq-icon.kbq-empty{color:var(--kbq-button-toggle-item-default-icon)}.kbq-button-toggle-group .kbq-button-toggle.kbq-hover:not(.kbq-disabled)>.kbq-button.kbq-button_transparent,.kbq-button-toggle-group .kbq-button-toggle.kbq-hover:not(.kbq-disabled)>.kbq-button-icon.kbq-button_transparent,.kbq-button-toggle-group .kbq-button-toggle:hover:not(.kbq-disabled)>.kbq-button.kbq-button_transparent,.kbq-button-toggle-group .kbq-button-toggle:hover:not(.kbq-disabled)>.kbq-button-icon.kbq-button_transparent{background:var(--kbq-button-toggle-item-states-hover-background);color:var(--kbq-button-toggle-item-states-hover-text)}.kbq-button-toggle-group .kbq-button-toggle.kbq-hover:not(.kbq-disabled)>.kbq-button.kbq-button_transparent .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle.kbq-hover:not(.kbq-disabled)>.kbq-button-icon.kbq-button_transparent .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle:hover:not(.kbq-disabled)>.kbq-button.kbq-button_transparent .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle:hover:not(.kbq-disabled)>.kbq-button-icon.kbq-button_transparent .kbq-icon.kbq-empty{color:var(--kbq-button-toggle-item-states-hover-icon)}.kbq-button-toggle-group .kbq-button-toggle.kbq-active:not(.kbq-disabled)>.kbq-button.kbq-button_transparent,.kbq-button-toggle-group .kbq-button-toggle.kbq-active:not(.kbq-disabled)>.kbq-button-icon.kbq-button_transparent,.kbq-button-toggle-group .kbq-button-toggle:active:not(.kbq-disabled)>.kbq-button.kbq-button_transparent,.kbq-button-toggle-group .kbq-button-toggle:active:not(.kbq-disabled)>.kbq-button-icon.kbq-button_transparent{background:var(--kbq-button-toggle-item-states-active-background);color:var(--kbq-button-toggle-item-states-active-text)}.kbq-button-toggle-group .kbq-button-toggle.kbq-active:not(.kbq-disabled)>.kbq-button.kbq-button_transparent .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle.kbq-active:not(.kbq-disabled)>.kbq-button-icon.kbq-button_transparent .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle:active:not(.kbq-disabled)>.kbq-button.kbq-button_transparent .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle:active:not(.kbq-disabled)>.kbq-button-icon.kbq-button_transparent .kbq-icon.kbq-empty{color:var(--kbq-button-toggle-item-states-active-icon)}.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled)>.kbq-button.kbq-button_transparent,.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled)>.kbq-button-icon.kbq-button_transparent{background:var(--kbq-button-toggle-item-states-selected-background);color:var(--kbq-button-toggle-item-states-selected-text)}.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled)>.kbq-button.kbq-button_transparent .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled)>.kbq-button-icon.kbq-button_transparent .kbq-icon.kbq-empty{color:var(--kbq-button-toggle-item-states-selected-icon)}.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled).kbq-active>.kbq-button.kbq-button_transparent,.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled).kbq-active>.kbq-button-icon.kbq-button_transparent,.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled):active>.kbq-button.kbq-button_transparent,.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled):active>.kbq-button-icon.kbq-button_transparent{background:var(--kbq-button-toggle-item-states-selected-active-background);color:var(--kbq-button-toggle-item-states-selected-active-text)}.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled).kbq-active>.kbq-button.kbq-button_transparent .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled).kbq-active>.kbq-button-icon.kbq-button_transparent .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled):active>.kbq-button.kbq-button_transparent .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled):active>.kbq-button-icon.kbq-button_transparent .kbq-icon.kbq-empty{color:var(--kbq-button-toggle-item-states-selected-active-icon)}.kbq-button-toggle-group .kbq-button-toggle.kbq-disabled>.kbq-button.kbq-button_transparent,.kbq-button-toggle-group .kbq-button-toggle.kbq-disabled>.kbq-button-icon.kbq-button_transparent{background:var(--kbq-button-toggle-item-states-disabled-background);color:var(--kbq-button-toggle-item-states-disabled-text)}.kbq-button-toggle-group .kbq-button-toggle.kbq-disabled>.kbq-button.kbq-button_transparent .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle.kbq-disabled>.kbq-button-icon.kbq-button_transparent .kbq-icon.kbq-empty{color:var(--kbq-button-toggle-item-states-disabled-icon)}.kbq-button-toggle-group .kbq-button-toggle.kbq-disabled.kbq-selected>.kbq-button.kbq-button_transparent,.kbq-button-toggle-group .kbq-button-toggle.kbq-disabled.kbq-selected>.kbq-button-icon.kbq-button_transparent{background:var(--kbq-button-toggle-item-states-selected-disabled-background);color:var(--kbq-button-toggle-item-states-selected-disabled-text)}.kbq-button-toggle-group .kbq-button-toggle.kbq-disabled.kbq-selected>.kbq-button.kbq-button_transparent .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle.kbq-disabled.kbq-selected>.kbq-button-icon.kbq-button_transparent .kbq-icon.kbq-empty{color:var(--kbq-button-toggle-item-states-selected-disabled-icon)}.kbq-button-toggle-group .kbq-button-toggle.cdk-keyboard-focused{border-color:var(--kbq-button-toggle-item-states-focused-outline)}.kbq-button-toggle .kbq-button-toggle-wrapper{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-button-toggle-group{--kbq-button-toggle-size-container-border-radius: var(--kbq-size-border-radius);--kbq-button-toggle-size-container-padding-horizontal: var(--kbq-size-xxs);--kbq-button-toggle-size-container-padding-vertical: var(--kbq-size-xxs);--kbq-button-toggle-size-container-content-gap-horizontal: var(--kbq-size-xxs);--kbq-button-toggle-size-item-height: 22px;--kbq-button-toggle-size-item-border-radius: var(--kbq-size-xxs);--kbq-button-toggle-size-item-padding-horizontal: var(--kbq-size-s);--kbq-button-toggle-size-item-padding-vertical: var(--kbq-size-3xs);--kbq-button-toggle-size-item-content-gap-horizontal: var(--kbq-size-xxs);--kbq-button-toggle-size-item-focus-outline-width: var(--kbq-size-3xs);--kbq-button-toggle-size-item-hit-area-gap: calc( var(--kbq-size-border-width) + var(--kbq-button-toggle-size-container-content-gap-horizontal) / 2 );--kbq-button-toggle-size-item-hit-area-horizontal: calc( var(--kbq-size-border-width) + var(--kbq-button-toggle-size-container-padding-horizontal) );--kbq-button-toggle-size-item-hit-area-vertical: calc( var(--kbq-size-border-width) + var(--kbq-button-toggle-size-container-padding-vertical) );--kbq-button-toggle-container-background: var(--kbq-background-contrast-fade);--kbq-button-toggle-item-default-background: var(--kbq-background-transparent);--kbq-button-toggle-item-default-text: var(--kbq-foreground-contrast);--kbq-button-toggle-item-default-icon: var(--kbq-icon-contrast-fade);--kbq-button-toggle-item-states-hover-background: var(--kbq-states-background-contrast-fade-hover);--kbq-button-toggle-item-states-hover-text: var(--kbq-foreground-contrast);--kbq-button-toggle-item-states-hover-icon: var(--kbq-icon-contrast-fade);--kbq-button-toggle-item-states-active-background: var(--kbq-states-background-contrast-fade-active);--kbq-button-toggle-item-states-active-text: var(--kbq-foreground-contrast);--kbq-button-toggle-item-states-active-icon: var(--kbq-icon-contrast-fade);--kbq-button-toggle-item-states-selected-background: var(--kbq-background-card);--kbq-button-toggle-item-states-selected-text: var(--kbq-foreground-contrast);--kbq-button-toggle-item-states-selected-icon: var(--kbq-icon-contrast-fade);--kbq-button-toggle-item-states-selected-active-background: var(--kbq-states-background-transparent-active);--kbq-button-toggle-item-states-selected-active-text: var(--kbq-foreground-contrast);--kbq-button-toggle-item-states-selected-active-icon: var(--kbq-icon-contrast-fade);--kbq-button-toggle-item-states-selected-disabled-background: var(--kbq-states-background-disabled);--kbq-button-toggle-item-states-selected-disabled-text: var(--kbq-states-foreground-disabled);--kbq-button-toggle-item-states-selected-disabled-icon: var(--kbq-states-icon-disabled);--kbq-button-toggle-item-states-disabled-background: none;--kbq-button-toggle-item-states-disabled-text: var(--kbq-states-foreground-disabled);--kbq-button-toggle-item-states-disabled-icon: var(--kbq-states-icon-disabled);--kbq-button-toggle-item-states-focused-outline: var(--kbq-states-line-focus-theme)}\n"], dependencies: [{ kind: "directive", type: CdkObserveContent, selector: "[cdkObserveContent]", inputs: ["cdkObserveContentDisabled", "debounce"], outputs: ["cdkObserveContent"], exportAs: ["cdkObserveContent"] }, { kind: "directive", type: KbqTitleDirective, selector: "[kbq-title]", inputs: ["kbq-title", "ignoreTooltipPointerEvents"], exportAs: ["kbqTitle"] }, { kind: "ngmodule", type: KbqButtonModule }, { kind: "component", type: i1.KbqButton, selector: "[kbq-button]", inputs: ["kbqStyle", "disabled", "tabIndex"] }, { kind: "directive", type: i1.KbqButtonCssStyler, selector: "[kbq-button]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
359
720
  }
360
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqButtonToggle, decorators: [{
721
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqButtonToggle, decorators: [{
361
722
  type: Component,
362
723
  args: [{ selector: 'kbq-button-toggle', imports: [
724
+ CdkObserveContent,
363
725
  KbqTitleDirective,
364
726
  KbqButtonModule
365
727
  ], template: `
@@ -370,26 +732,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImpo
370
732
  [kbqStyle]="'transparent'"
371
733
  [class.kbq-selected]="checked"
372
734
  [disabled]="disabled"
373
- [tabIndex]="tabIndex() || 0"
735
+ [tabIndex]="tabIndexValue()"
736
+ [attr.role]="role()"
737
+ [attr.aria-checked]="ariaChecked()"
738
+ [attr.aria-pressed]="ariaPressed()"
739
+ [attr.aria-label]="ariaLabel()"
740
+ [attr.aria-labelledby]="ariaLabelledby()"
374
741
  (click)="onToggleClick()"
375
742
  >
376
- <div #kbqTitleText class="kbq-button-toggle-wrapper">
377
- <ng-content />
743
+ <div class="kbq-button-toggle-wrapper" (cdkObserveContent)="updateIconType()">
744
+ <ng-content select="[kbqButtonPrefix]" />
745
+ <span #kbqTitleContainer #kbqTitleText class="kbq-button-toggle-text">
746
+ <ng-content />
747
+ </span>
748
+ <ng-content select="[kbqButtonSuffix]" />
378
749
  </div>
379
750
  </button>
380
751
  `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
381
752
  class: 'kbq-button-toggle',
382
- '[class]': '"kbq-button-toggle" + iconType',
753
+ '[class.kbq-button-toggle-icon]': 'iconType === "-icon"',
754
+ '[class.kbq-button-toggle-icon-text]': 'iconType === "-icon-text"',
383
755
  '[class.kbq-disabled]': 'disabled',
384
- '[class.kbq-selected]': 'checked'
385
- }, exportAs: 'kbqButtonToggle', styles: [".kbq-button-toggle-group{box-sizing:border-box;display:inline-flex;flex-direction:row;align-items:center;gap:var(--kbq-button-toggle-size-container-content-gap-horizontal);border-radius:var(--kbq-button-toggle-size-container-border-radius);padding:var(--kbq-button-toggle-size-container-padding-vertical) var(--kbq-button-toggle-size-container-padding-horizontal)}.kbq-button-toggle-group .kbq-button-toggle{display:flex;justify-content:flex-start;align-items:center;overflow:visible;min-width:0;box-sizing:content-box;height:var(--kbq-button-toggle-size-item-height);min-height:var(--kbq-button-toggle-size-item-height);border-radius:var(--kbq-button-toggle-size-item-border-radius);border:var(--kbq-size-border-width) solid transparent}.kbq-button-toggle-group .kbq-button-toggle.cdk-keyboard-focused{outline:1px solid var(--kbq-states-line-focus-theme);border-color:var(--kbq-states-line-focus-theme)}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon{height:inherit;min-height:inherit;border-radius:var(--kbq-button-toggle-size-item-border-radius);border-width:0;padding:calc(var(--kbq-button-toggle-size-item-padding-vertical) - var(--kbq-button-toggle-size-item-focus-outline-width)) calc(var(--kbq-button-toggle-size-item-padding-horizontal) - var(--kbq-button-toggle-size-item-focus-outline-width))}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button:before,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon:before{content:\"\";position:absolute}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button .kbq-button-wrapper,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon .kbq-button-wrapper{width:100%}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button .kbq-button-toggle-wrapper,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon .kbq-button-toggle-wrapper{display:inline-flex;justify-content:center;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;align-items:center;width:100%;gap:var(--kbq-button-toggle-size-item-content-gap-horizontal)}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button.cdk-keyboard-focused,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon.cdk-keyboard-focused{outline:none}.kbq-button-toggle-group:not(.kbq-button-toggle_vertical) .kbq-button-toggle>.kbq-button,.kbq-button-toggle-group:not(.kbq-button-toggle_vertical) .kbq-button-toggle>.kbq-button-icon{max-width:100%;height:var(--kbq-button-toggle-size-item-height)}.kbq-button-toggle-group:not(.kbq-button-toggle_vertical) .kbq-button-toggle>.kbq-button:before,.kbq-button-toggle-group:not(.kbq-button-toggle_vertical) .kbq-button-toggle>.kbq-button-icon:before{inset-block:calc(-1 * var(--kbq-button-toggle-size-item-hit-area-vertical));inset-inline:calc(-1 * var(--kbq-button-toggle-size-item-hit-area-gap))}.kbq-button-toggle-group:not(.kbq-button-toggle_vertical) .kbq-button-toggle:first-of-type>:is(.kbq-button,.kbq-button-icon):before{inset-inline-start:calc(-1 * var(--kbq-button-toggle-size-item-hit-area-horizontal))}.kbq-button-toggle-group:not(.kbq-button-toggle_vertical) .kbq-button-toggle:last-of-type>:is(.kbq-button,.kbq-button-icon):before{inset-inline-end:calc(-1 * var(--kbq-button-toggle-size-item-hit-area-horizontal))}.kbq-button-toggle-group.kbq-button-toggle_vertical .kbq-button-toggle>.kbq-button:before,.kbq-button-toggle-group.kbq-button-toggle_vertical .kbq-button-toggle>.kbq-button-icon:before{inset-inline:calc(-1 * var(--kbq-button-toggle-size-item-hit-area-horizontal));inset-block:calc(-1 * var(--kbq-button-toggle-size-item-hit-area-gap))}.kbq-button-toggle-group.kbq-button-toggle_vertical .kbq-button-toggle:first-of-type>:is(.kbq-button,.kbq-button-icon):before{inset-block-start:calc(-1 * var(--kbq-button-toggle-size-item-hit-area-vertical))}.kbq-button-toggle-group.kbq-button-toggle_vertical .kbq-button-toggle:last-of-type>:is(.kbq-button,.kbq-button-icon):before{inset-block-end:calc(-1 * var(--kbq-button-toggle-size-item-hit-area-vertical))}.kbq-button-toggle-group.kbq-button-toggle-group_stretched{width:100%}.kbq-button-toggle-group.kbq-button-toggle-group_stretched .kbq-button-toggle{flex:1}.kbq-button-toggle-group.kbq-button-toggle-group_stretched .kbq-button-toggle>.kbq-button,.kbq-button-toggle-group.kbq-button-toggle-group_stretched .kbq-button-toggle>.kbq-button-icon{width:100%;flex:1}.kbq-button-toggle-group.kbq-button-toggle-group_stretched .kbq-button-toggle>.kbq-button .kbq-button-wrapper,.kbq-button-toggle-group.kbq-button-toggle-group_stretched .kbq-button-toggle>.kbq-button-icon .kbq-button-wrapper{justify-content:center}.kbq-button-toggle-group.kbq-button-toggle-group_stretched .kbq-button-toggle>.kbq-button .kbq-button-toggle-wrapper,.kbq-button-toggle-group.kbq-button-toggle-group_stretched .kbq-button-toggle>.kbq-button-icon .kbq-button-toggle-wrapper{display:block}.kbq-button-toggle_vertical{flex-direction:column}.kbq-button-toggle_vertical .kbq-button-toggle{width:100%}.kbq-button-toggle_vertical .kbq-button-toggle>.kbq-button,.kbq-button-toggle_vertical .kbq-button-toggle>.kbq-button-icon{width:100%;border-radius:var(--kbq-button-toggle-size-item-border-radius)}.kbq-button-toggle-group{background:var(--kbq-button-toggle-container-background)}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button,.kbq-button-toggle-group .kbq-button-toggle>.kbq-icon-button{background:var(--kbq-button-toggle-item-default-background);color:var(--kbq-button-toggle-item-default-text)}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle>.kbq-icon-button .kbq-icon.kbq-empty{color:var(--kbq-button-toggle-item-default-icon)}.kbq-button-toggle-group .kbq-button-toggle.kbq-hover:not(.kbq-disabled)>.kbq-button,.kbq-button-toggle-group .kbq-button-toggle.kbq-hover:not(.kbq-disabled)>.kbq-icon-button,.kbq-button-toggle-group .kbq-button-toggle:hover:not(.kbq-disabled)>.kbq-button,.kbq-button-toggle-group .kbq-button-toggle:hover:not(.kbq-disabled)>.kbq-icon-button{background:var(--kbq-button-toggle-item-states-hover-background);color:var(--kbq-button-toggle-item-states-hover-text)}.kbq-button-toggle-group .kbq-button-toggle.kbq-hover:not(.kbq-disabled)>.kbq-button .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle.kbq-hover:not(.kbq-disabled)>.kbq-icon-button .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle:hover:not(.kbq-disabled)>.kbq-button .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle:hover:not(.kbq-disabled)>.kbq-icon-button .kbq-icon.kbq-empty{color:var(--kbq-button-toggle-item-states-hover-icon)}.kbq-button-toggle-group .kbq-button-toggle.kbq-active:not(.kbq-disabled)>.kbq-button,.kbq-button-toggle-group .kbq-button-toggle.kbq-active:not(.kbq-disabled)>.kbq-icon-button,.kbq-button-toggle-group .kbq-button-toggle:active:not(.kbq-disabled)>.kbq-button,.kbq-button-toggle-group .kbq-button-toggle:active:not(.kbq-disabled)>.kbq-icon-button{background:var(--kbq-button-toggle-item-states-active-background);color:var(--kbq-button-toggle-item-states-active-text)}.kbq-button-toggle-group .kbq-button-toggle.kbq-active:not(.kbq-disabled)>.kbq-button .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle.kbq-active:not(.kbq-disabled)>.kbq-icon-button .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle:active:not(.kbq-disabled)>.kbq-button .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle:active:not(.kbq-disabled)>.kbq-icon-button .kbq-icon.kbq-empty{color:var(--kbq-button-toggle-item-states-active-icon)}.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled)>.kbq-button,.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled)>.kbq-icon-button{background:var(--kbq-button-toggle-item-states-selected-background);color:var(--kbq-button-toggle-item-states-selected-text)}.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled)>.kbq-button .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled)>.kbq-icon-button .kbq-icon.kbq-empty{color:var(--kbq-button-toggle-item-states-selected-icon)}.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled).kbq-active>.kbq-button,.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled).kbq-active>.kbq-icon-button,.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled):active>.kbq-button,.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled):active>.kbq-icon-button{background:var(--kbq-button-toggle-item-states-selected-active-background);color:var(--kbq-button-toggle-item-states-selected-active-text)}.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled).kbq-active>.kbq-button .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled).kbq-active>.kbq-icon-button .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled):active>.kbq-button .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled):active>.kbq-icon-button .kbq-icon.kbq-empty{color:var(--kbq-button-toggle-item-states-selected-active-icon)}.kbq-button-toggle-group .kbq-button-toggle.kbq-disabled>.kbq-button,.kbq-button-toggle-group .kbq-button-toggle.kbq-disabled>.kbq-icon-button{background:var(--kbq-button-toggle-item-states-disabled-background);color:var(--kbq-button-toggle-item-states-disabled-text)}.kbq-button-toggle-group .kbq-button-toggle.kbq-disabled>.kbq-button .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle.kbq-disabled>.kbq-icon-button .kbq-icon.kbq-empty{color:var(--kbq-button-toggle-item-states-disabled-icon)}.kbq-button-toggle-group .kbq-button-toggle.kbq-disabled.kbq-selected>.kbq-button,.kbq-button-toggle-group .kbq-button-toggle.kbq-disabled.kbq-selected>.kbq-icon-button{background:var(--kbq-button-toggle-item-states-selected-disabled-background);color:var(--kbq-button-toggle-item-states-selected-disabled-text)}.kbq-button-toggle-group .kbq-button-toggle.kbq-disabled.kbq-selected>.kbq-button .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle.kbq-disabled.kbq-selected>.kbq-icon-button .kbq-icon.kbq-empty{color:var(--kbq-button-toggle-item-states-selected-disabled-icon)}.kbq-button-toggle-group .kbq-button-toggle.cdk-keyboard-focused{border-color:var(--kbq-button-toggle-item-states-focused-outline)}.kbq-button-toggle .kbq-button-toggle-wrapper{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-button-toggle-group{--kbq-button-toggle-size-container-border-radius: var(--kbq-size-border-radius);--kbq-button-toggle-size-container-padding-horizontal: var(--kbq-size-xxs);--kbq-button-toggle-size-container-padding-vertical: var(--kbq-size-xxs);--kbq-button-toggle-size-container-content-gap-horizontal: var(--kbq-size-xxs);--kbq-button-toggle-size-item-height: 22px;--kbq-button-toggle-size-item-border-radius: var(--kbq-size-xxs);--kbq-button-toggle-size-item-padding-horizontal: var(--kbq-size-s);--kbq-button-toggle-size-item-padding-vertical: var(--kbq-size-3xs);--kbq-button-toggle-size-item-content-gap-horizontal: var(--kbq-size-xxs);--kbq-button-toggle-size-item-focus-outline-width: var(--kbq-size-3xs);--kbq-button-toggle-size-item-hit-area-gap: calc( var(--kbq-size-border-width) + var(--kbq-button-toggle-size-container-content-gap-horizontal) / 2 );--kbq-button-toggle-size-item-hit-area-horizontal: calc( var(--kbq-size-border-width) + var(--kbq-button-toggle-size-container-padding-horizontal) );--kbq-button-toggle-size-item-hit-area-vertical: calc( var(--kbq-size-border-width) + var(--kbq-button-toggle-size-container-padding-vertical) );--kbq-button-toggle-container-background: var(--kbq-background-contrast-fade);--kbq-button-toggle-item-default-background: var(--kbq-background-transparent);--kbq-button-toggle-item-default-text: var(--kbq-foreground-contrast);--kbq-button-toggle-item-default-icon: var(--kbq-icon-contrast-fade);--kbq-button-toggle-item-states-hover-background: var(--kbq-states-background-contrast-fade-hover);--kbq-button-toggle-item-states-hover-text: var(--kbq-foreground-contrast);--kbq-button-toggle-item-states-hover-icon: var(--kbq-icon-contrast-fade);--kbq-button-toggle-item-states-active-background: var(--kbq-states-background-contrast-fade-active);--kbq-button-toggle-item-states-active-text: var(--kbq-foreground-contrast);--kbq-button-toggle-item-states-active-icon: var(--kbq-icon-contrast-fade);--kbq-button-toggle-item-states-selected-background: var(--kbq-background-card);--kbq-button-toggle-item-states-selected-text: var(--kbq-foreground-contrast);--kbq-button-toggle-item-states-selected-icon: var(--kbq-icon-contrast-fade);--kbq-button-toggle-item-states-selected-active-background: var(--kbq-states-background-transparent-active);--kbq-button-toggle-item-states-selected-active-text: var(--kbq-foreground-contrast);--kbq-button-toggle-item-states-selected-active-icon: var(--kbq-icon-contrast-fade);--kbq-button-toggle-item-states-selected-disabled-background: var(--kbq-states-background-disabled);--kbq-button-toggle-item-states-selected-disabled-text: var(--kbq-states-foreground-disabled);--kbq-button-toggle-item-states-selected-disabled-icon: var(--kbq-states-icon-disabled);--kbq-button-toggle-item-states-disabled-background: none;--kbq-button-toggle-item-states-disabled-text: var(--kbq-states-foreground-disabled);--kbq-button-toggle-item-states-disabled-icon: var(--kbq-states-icon-disabled);--kbq-button-toggle-item-states-focused-outline: var(--kbq-states-line-focus-theme)}\n"] }]
386
- }], propDecorators: { icons: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => KbqIcon), { ...{ descendants: true }, isSignal: true }] }], checked: [{
387
- type: Input
388
- }], mcButton: [{ type: i0.ViewChild, args: [i0.forwardRef(() => KbqButton), { isSignal: true }] }], value: [{
389
- type: Input
390
- }], tabIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabIndex", required: false }] }], disabled: [{
391
- type: Input
392
- }], change: [{ type: i0.Output, args: ["change"] }] } });
756
+ '[class.kbq-selected]': 'checked',
757
+ '(keydown)': 'onKeydown($event)'
758
+ }, exportAs: 'kbqButtonToggle', styles: [".kbq-truncate-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.kbq-button-toggle-group{box-sizing:border-box;display:inline-flex;flex-direction:row;align-items:center;gap:var(--kbq-button-toggle-size-container-content-gap-horizontal);border-radius:var(--kbq-button-toggle-size-container-border-radius)}@supports (corner-shape: squircle){.kbq-button-toggle-group{corner-shape:squircle;border-radius:clamp(var(--kbq-button-toggle-size-container-border-radius) * 1.85,var(--kbq-button-toggle-size-container-border-radius) * 2.3 - 3.6px,var(--kbq-button-toggle-size-container-border-radius) * 2)}}.kbq-button-toggle-group{padding:var(--kbq-button-toggle-size-container-padding-vertical) var(--kbq-button-toggle-size-container-padding-horizontal)}.kbq-button-toggle-group .kbq-button-toggle{display:flex;justify-content:flex-start;align-items:center;overflow:visible;min-width:0;box-sizing:content-box;height:var(--kbq-button-toggle-size-item-height);min-height:var(--kbq-button-toggle-size-item-height);border-radius:var(--kbq-button-toggle-size-item-border-radius)}@supports (corner-shape: squircle){.kbq-button-toggle-group .kbq-button-toggle{corner-shape:squircle;border-radius:clamp(var(--kbq-button-toggle-size-item-border-radius) * 1.85,var(--kbq-button-toggle-size-item-border-radius) * 2.3 - 3.6px,var(--kbq-button-toggle-size-item-border-radius) * 2)}}.kbq-button-toggle-group .kbq-button-toggle{border:var(--kbq-size-border-width) solid transparent}.kbq-button-toggle-group .kbq-button-toggle.cdk-keyboard-focused{outline:1px solid var(--kbq-button-toggle-item-states-focused-outline)}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon{height:inherit;min-height:inherit;border-radius:var(--kbq-button-toggle-size-item-border-radius)}@supports (corner-shape: squircle){.kbq-button-toggle-group .kbq-button-toggle>.kbq-button,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon{corner-shape:squircle;border-radius:clamp(var(--kbq-button-toggle-size-item-border-radius) * 1.85,var(--kbq-button-toggle-size-item-border-radius) * 2.3 - 3.6px,var(--kbq-button-toggle-size-item-border-radius) * 2)}}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon{border-width:0;padding:calc(var(--kbq-button-toggle-size-item-padding-vertical) - var(--kbq-button-toggle-size-item-focus-outline-width)) calc(var(--kbq-button-toggle-size-item-padding-horizontal) - var(--kbq-button-toggle-size-item-focus-outline-width))}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button:before,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon:before{content:\"\";position:absolute}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button .kbq-button-wrapper,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon .kbq-button-wrapper{width:100%}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button .kbq-button-toggle-wrapper,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon .kbq-button-toggle-wrapper{display:inline-flex;justify-content:center;align-items:center;width:100%;gap:var(--kbq-button-toggle-size-item-content-gap-horizontal)}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button .kbq-button-toggle-wrapper>.kbq-button-prefix,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon .kbq-button-toggle-wrapper>.kbq-button-prefix{margin-right:0}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button .kbq-button-toggle-wrapper>.kbq-button-suffix,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon .kbq-button-toggle-wrapper>.kbq-button-suffix{margin-left:0}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button .kbq-button-toggle-text,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon .kbq-button-toggle-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;min-width:0}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button .kbq-button-toggle-text:has(>.kbq-icon),.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon .kbq-button-toggle-text:has(>.kbq-icon){display:flex;align-items:center;gap:var(--kbq-button-toggle-size-item-content-gap-horizontal)}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button.cdk-keyboard-focused,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon.cdk-keyboard-focused{outline:none}.kbq-button-toggle-group:not(.kbq-button-toggle_vertical) .kbq-button-toggle>.kbq-button,.kbq-button-toggle-group:not(.kbq-button-toggle_vertical) .kbq-button-toggle>.kbq-button-icon{max-width:100%;height:var(--kbq-button-toggle-size-item-height)}.kbq-button-toggle-group:not(.kbq-button-toggle_vertical) .kbq-button-toggle>.kbq-button:before,.kbq-button-toggle-group:not(.kbq-button-toggle_vertical) .kbq-button-toggle>.kbq-button-icon:before{inset-block:calc(-1 * var(--kbq-button-toggle-size-item-hit-area-vertical));inset-inline:calc(-1 * var(--kbq-button-toggle-size-item-hit-area-gap))}.kbq-button-toggle-group:not(.kbq-button-toggle_vertical) .kbq-button-toggle:first-of-type>:is(.kbq-button,.kbq-button-icon):before{inset-inline-start:calc(-1 * var(--kbq-button-toggle-size-item-hit-area-horizontal))}.kbq-button-toggle-group:not(.kbq-button-toggle_vertical) .kbq-button-toggle:last-of-type>:is(.kbq-button,.kbq-button-icon):before{inset-inline-end:calc(-1 * var(--kbq-button-toggle-size-item-hit-area-horizontal))}.kbq-button-toggle-group.kbq-button-toggle_vertical .kbq-button-toggle>.kbq-button:before,.kbq-button-toggle-group.kbq-button-toggle_vertical .kbq-button-toggle>.kbq-button-icon:before{inset-inline:calc(-1 * var(--kbq-button-toggle-size-item-hit-area-horizontal));inset-block:calc(-1 * var(--kbq-button-toggle-size-item-hit-area-gap))}.kbq-button-toggle-group.kbq-button-toggle_vertical .kbq-button-toggle:first-of-type>:is(.kbq-button,.kbq-button-icon):before{inset-block-start:calc(-1 * var(--kbq-button-toggle-size-item-hit-area-vertical))}.kbq-button-toggle-group.kbq-button-toggle_vertical .kbq-button-toggle:last-of-type>:is(.kbq-button,.kbq-button-icon):before{inset-block-end:calc(-1 * var(--kbq-button-toggle-size-item-hit-area-vertical))}.kbq-button-toggle-group.kbq-button-toggle-group_stretched{width:100%}.kbq-button-toggle-group.kbq-button-toggle-group_stretched .kbq-button-toggle{flex:1}.kbq-button-toggle-group.kbq-button-toggle-group_stretched .kbq-button-toggle>.kbq-button,.kbq-button-toggle-group.kbq-button-toggle-group_stretched .kbq-button-toggle>.kbq-button-icon{width:100%;flex:1}.kbq-button-toggle-group.kbq-button-toggle-group_stretched .kbq-button-toggle>.kbq-button .kbq-button-wrapper,.kbq-button-toggle-group.kbq-button-toggle-group_stretched .kbq-button-toggle>.kbq-button-icon .kbq-button-wrapper{justify-content:center}.kbq-button-toggle-group .kbq-button-toggle>:is(.kbq-button,.kbq-button-icon).kbq-button_no-label .kbq-button-toggle-text{display:flex;align-items:center}.kbq-button-toggle-group .kbq-button-toggle>:is(.kbq-button,.kbq-button-icon) .kbq-button-toggle-text:empty{display:none}.kbq-button-toggle_vertical{flex-direction:column}.kbq-button-toggle_vertical .kbq-button-toggle{width:100%}.kbq-button-toggle_vertical .kbq-button-toggle>.kbq-button,.kbq-button-toggle_vertical .kbq-button-toggle>.kbq-button-icon{width:100%}.kbq-button-toggle-group{background:var(--kbq-button-toggle-container-background)}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button.kbq-button_transparent,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon.kbq-button_transparent{background:var(--kbq-button-toggle-item-default-background);color:var(--kbq-button-toggle-item-default-text)}.kbq-button-toggle-group .kbq-button-toggle>.kbq-button.kbq-button_transparent .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle>.kbq-button-icon.kbq-button_transparent .kbq-icon.kbq-empty{color:var(--kbq-button-toggle-item-default-icon)}.kbq-button-toggle-group .kbq-button-toggle.kbq-hover:not(.kbq-disabled)>.kbq-button.kbq-button_transparent,.kbq-button-toggle-group .kbq-button-toggle.kbq-hover:not(.kbq-disabled)>.kbq-button-icon.kbq-button_transparent,.kbq-button-toggle-group .kbq-button-toggle:hover:not(.kbq-disabled)>.kbq-button.kbq-button_transparent,.kbq-button-toggle-group .kbq-button-toggle:hover:not(.kbq-disabled)>.kbq-button-icon.kbq-button_transparent{background:var(--kbq-button-toggle-item-states-hover-background);color:var(--kbq-button-toggle-item-states-hover-text)}.kbq-button-toggle-group .kbq-button-toggle.kbq-hover:not(.kbq-disabled)>.kbq-button.kbq-button_transparent .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle.kbq-hover:not(.kbq-disabled)>.kbq-button-icon.kbq-button_transparent .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle:hover:not(.kbq-disabled)>.kbq-button.kbq-button_transparent .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle:hover:not(.kbq-disabled)>.kbq-button-icon.kbq-button_transparent .kbq-icon.kbq-empty{color:var(--kbq-button-toggle-item-states-hover-icon)}.kbq-button-toggle-group .kbq-button-toggle.kbq-active:not(.kbq-disabled)>.kbq-button.kbq-button_transparent,.kbq-button-toggle-group .kbq-button-toggle.kbq-active:not(.kbq-disabled)>.kbq-button-icon.kbq-button_transparent,.kbq-button-toggle-group .kbq-button-toggle:active:not(.kbq-disabled)>.kbq-button.kbq-button_transparent,.kbq-button-toggle-group .kbq-button-toggle:active:not(.kbq-disabled)>.kbq-button-icon.kbq-button_transparent{background:var(--kbq-button-toggle-item-states-active-background);color:var(--kbq-button-toggle-item-states-active-text)}.kbq-button-toggle-group .kbq-button-toggle.kbq-active:not(.kbq-disabled)>.kbq-button.kbq-button_transparent .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle.kbq-active:not(.kbq-disabled)>.kbq-button-icon.kbq-button_transparent .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle:active:not(.kbq-disabled)>.kbq-button.kbq-button_transparent .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle:active:not(.kbq-disabled)>.kbq-button-icon.kbq-button_transparent .kbq-icon.kbq-empty{color:var(--kbq-button-toggle-item-states-active-icon)}.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled)>.kbq-button.kbq-button_transparent,.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled)>.kbq-button-icon.kbq-button_transparent{background:var(--kbq-button-toggle-item-states-selected-background);color:var(--kbq-button-toggle-item-states-selected-text)}.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled)>.kbq-button.kbq-button_transparent .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled)>.kbq-button-icon.kbq-button_transparent .kbq-icon.kbq-empty{color:var(--kbq-button-toggle-item-states-selected-icon)}.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled).kbq-active>.kbq-button.kbq-button_transparent,.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled).kbq-active>.kbq-button-icon.kbq-button_transparent,.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled):active>.kbq-button.kbq-button_transparent,.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled):active>.kbq-button-icon.kbq-button_transparent{background:var(--kbq-button-toggle-item-states-selected-active-background);color:var(--kbq-button-toggle-item-states-selected-active-text)}.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled).kbq-active>.kbq-button.kbq-button_transparent .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled).kbq-active>.kbq-button-icon.kbq-button_transparent .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled):active>.kbq-button.kbq-button_transparent .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle.kbq-selected:not(.kbq-disabled):active>.kbq-button-icon.kbq-button_transparent .kbq-icon.kbq-empty{color:var(--kbq-button-toggle-item-states-selected-active-icon)}.kbq-button-toggle-group .kbq-button-toggle.kbq-disabled>.kbq-button.kbq-button_transparent,.kbq-button-toggle-group .kbq-button-toggle.kbq-disabled>.kbq-button-icon.kbq-button_transparent{background:var(--kbq-button-toggle-item-states-disabled-background);color:var(--kbq-button-toggle-item-states-disabled-text)}.kbq-button-toggle-group .kbq-button-toggle.kbq-disabled>.kbq-button.kbq-button_transparent .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle.kbq-disabled>.kbq-button-icon.kbq-button_transparent .kbq-icon.kbq-empty{color:var(--kbq-button-toggle-item-states-disabled-icon)}.kbq-button-toggle-group .kbq-button-toggle.kbq-disabled.kbq-selected>.kbq-button.kbq-button_transparent,.kbq-button-toggle-group .kbq-button-toggle.kbq-disabled.kbq-selected>.kbq-button-icon.kbq-button_transparent{background:var(--kbq-button-toggle-item-states-selected-disabled-background);color:var(--kbq-button-toggle-item-states-selected-disabled-text)}.kbq-button-toggle-group .kbq-button-toggle.kbq-disabled.kbq-selected>.kbq-button.kbq-button_transparent .kbq-icon.kbq-empty,.kbq-button-toggle-group .kbq-button-toggle.kbq-disabled.kbq-selected>.kbq-button-icon.kbq-button_transparent .kbq-icon.kbq-empty{color:var(--kbq-button-toggle-item-states-selected-disabled-icon)}.kbq-button-toggle-group .kbq-button-toggle.cdk-keyboard-focused{border-color:var(--kbq-button-toggle-item-states-focused-outline)}.kbq-button-toggle .kbq-button-toggle-wrapper{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-button-toggle-group{--kbq-button-toggle-size-container-border-radius: var(--kbq-size-border-radius);--kbq-button-toggle-size-container-padding-horizontal: var(--kbq-size-xxs);--kbq-button-toggle-size-container-padding-vertical: var(--kbq-size-xxs);--kbq-button-toggle-size-container-content-gap-horizontal: var(--kbq-size-xxs);--kbq-button-toggle-size-item-height: 22px;--kbq-button-toggle-size-item-border-radius: var(--kbq-size-xxs);--kbq-button-toggle-size-item-padding-horizontal: var(--kbq-size-s);--kbq-button-toggle-size-item-padding-vertical: var(--kbq-size-3xs);--kbq-button-toggle-size-item-content-gap-horizontal: var(--kbq-size-xxs);--kbq-button-toggle-size-item-focus-outline-width: var(--kbq-size-3xs);--kbq-button-toggle-size-item-hit-area-gap: calc( var(--kbq-size-border-width) + var(--kbq-button-toggle-size-container-content-gap-horizontal) / 2 );--kbq-button-toggle-size-item-hit-area-horizontal: calc( var(--kbq-size-border-width) + var(--kbq-button-toggle-size-container-padding-horizontal) );--kbq-button-toggle-size-item-hit-area-vertical: calc( var(--kbq-size-border-width) + var(--kbq-button-toggle-size-container-padding-vertical) );--kbq-button-toggle-container-background: var(--kbq-background-contrast-fade);--kbq-button-toggle-item-default-background: var(--kbq-background-transparent);--kbq-button-toggle-item-default-text: var(--kbq-foreground-contrast);--kbq-button-toggle-item-default-icon: var(--kbq-icon-contrast-fade);--kbq-button-toggle-item-states-hover-background: var(--kbq-states-background-contrast-fade-hover);--kbq-button-toggle-item-states-hover-text: var(--kbq-foreground-contrast);--kbq-button-toggle-item-states-hover-icon: var(--kbq-icon-contrast-fade);--kbq-button-toggle-item-states-active-background: var(--kbq-states-background-contrast-fade-active);--kbq-button-toggle-item-states-active-text: var(--kbq-foreground-contrast);--kbq-button-toggle-item-states-active-icon: var(--kbq-icon-contrast-fade);--kbq-button-toggle-item-states-selected-background: var(--kbq-background-card);--kbq-button-toggle-item-states-selected-text: var(--kbq-foreground-contrast);--kbq-button-toggle-item-states-selected-icon: var(--kbq-icon-contrast-fade);--kbq-button-toggle-item-states-selected-active-background: var(--kbq-states-background-transparent-active);--kbq-button-toggle-item-states-selected-active-text: var(--kbq-foreground-contrast);--kbq-button-toggle-item-states-selected-active-icon: var(--kbq-icon-contrast-fade);--kbq-button-toggle-item-states-selected-disabled-background: var(--kbq-states-background-disabled);--kbq-button-toggle-item-states-selected-disabled-text: var(--kbq-states-foreground-disabled);--kbq-button-toggle-item-states-selected-disabled-icon: var(--kbq-states-icon-disabled);--kbq-button-toggle-item-states-disabled-background: none;--kbq-button-toggle-item-states-disabled-text: var(--kbq-states-foreground-disabled);--kbq-button-toggle-item-states-disabled-icon: var(--kbq-states-icon-disabled);--kbq-button-toggle-item-states-focused-outline: var(--kbq-states-line-focus-theme)}\n"] }]
759
+ }], ctorParameters: () => [], propDecorators: { icons: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => KbqIcon), { ...{ descendants: true }, isSignal: true }] }], button: [{ type: i0.ViewChild, args: [i0.forwardRef(() => KbqButton), { isSignal: true }] }], tabIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabIndex", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], ariaLabelledby: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-labelledby", required: false }] }], change: [{ type: i0.Output, args: ["change"] }], valueInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], checkedInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }], disabledInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
393
760
 
394
761
  /**
395
762
  * Entry point for `KbqButtonToggleGroup`/`KbqButtonToggle`. Both are standalone, so a bare
@@ -397,15 +764,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImpo
397
764
  * `KbqButtonModule`/`KbqTitleModule` and re-exports the slot markers.
398
765
  */
399
766
  class KbqButtonToggleModule {
400
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqButtonToggleModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
401
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.30", ngImport: i0, type: KbqButtonToggleModule, imports: [KbqButtonModule, KbqTitleModule, KbqButtonToggleGroup, KbqButtonToggle], exports: [KbqButtonToggleGroup, KbqButtonToggle] }); }
402
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqButtonToggleModule, imports: [KbqButtonModule, KbqTitleModule, KbqButtonToggle] }); }
767
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqButtonToggleModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
768
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.25", ngImport: i0, type: KbqButtonToggleModule, imports: [KbqButtonModule, KbqTitleModule, KbqButtonToggleGroup, KbqButtonToggle], exports: [KbqButtonToggleGroup, KbqButtonToggle, KbqButtonPrefix, KbqButtonSuffix] }); }
769
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqButtonToggleModule, imports: [KbqButtonModule, KbqTitleModule, KbqButtonToggle] }); }
403
770
  }
404
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqButtonToggleModule, decorators: [{
771
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqButtonToggleModule, decorators: [{
405
772
  type: NgModule,
406
773
  args: [{
407
774
  imports: [KbqButtonModule, KbqTitleModule, KbqButtonToggleGroup, KbqButtonToggle],
408
- exports: [KbqButtonToggleGroup, KbqButtonToggle]
775
+ // The slot markers are re-exported because a toggle projects them itself: they are what keeps an
776
+ // icon outside the truncated label.
777
+ exports: [KbqButtonToggleGroup, KbqButtonToggle, KbqButtonPrefix, KbqButtonSuffix]
409
778
  }]
410
779
  }] });
411
780