@koobiq/components 20.0.0 → 20.2.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 (231) hide show
  1. package/accordion/_accordion-theme.scss +1 -1
  2. package/accordion/accordion-tokens.scss +1 -0
  3. package/accordion/{accordion-trigger.component.scss → accordion-trigger.scss} +4 -18
  4. package/accordion/{accordion.component.scss → accordion.scss} +12 -5
  5. package/accordion/index.d.ts +215 -119
  6. package/actions-panel/index.d.ts +1 -0
  7. package/alert/_alert-theme.scss +14 -4
  8. package/alert/alert-tokens.scss +4 -4
  9. package/alert/alert.component.scss +24 -13
  10. package/alert/index.d.ts +63 -29
  11. package/app-switcher/app-switcher-dropdown-app.scss +2 -0
  12. package/autocomplete/autocomplete.scss +2 -1
  13. package/autocomplete/index.d.ts +35 -29
  14. package/badge/index.d.ts +2 -3
  15. package/breadcrumbs/breadcrumbs.scss +4 -0
  16. package/breadcrumbs/index.d.ts +2 -1
  17. package/button/button-group.scss +42 -2
  18. package/button-toggle/button-toggle.scss +23 -0
  19. package/button-toggle/index.d.ts +3 -1
  20. package/checkbox/checkbox.scss +5 -4
  21. package/clamped-text/index.d.ts +4 -2
  22. package/core/index.d.ts +515 -21
  23. package/core/styles/_core.scss +2 -0
  24. package/core/styles/common/_animation.scss +35 -24
  25. package/core/styles/common/_connected-overlay.scss +36 -0
  26. package/core/styles/common/_select.scss +7 -2
  27. package/core/styles/theming/_components-theming.scss +1 -1
  28. package/core/styles/theming/_scrollbar-theme.scss +4 -0
  29. package/datepicker/_datepicker-theme.scss +1 -1
  30. package/datepicker/datepicker-toggle.scss +3 -3
  31. package/dl/index.d.ts +1 -0
  32. package/dropdown/dropdown-item.scss +16 -0
  33. package/dropdown/dropdown-tokens.scss +2 -1
  34. package/dropdown/dropdown.scss +11 -2
  35. package/dropdown/index.d.ts +73 -6
  36. package/fesm2022/koobiq-components-accordion.mjs +406 -303
  37. package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
  38. package/fesm2022/koobiq-components-actions-panel.mjs +15 -6
  39. package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
  40. package/fesm2022/koobiq-components-alert.mjs +88 -48
  41. package/fesm2022/koobiq-components-alert.mjs.map +1 -1
  42. package/fesm2022/koobiq-components-app-switcher.mjs +7 -7
  43. package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
  44. package/fesm2022/koobiq-components-autocomplete.mjs +37 -23
  45. package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
  46. package/fesm2022/koobiq-components-badge.mjs +5 -4
  47. package/fesm2022/koobiq-components-badge.mjs.map +1 -1
  48. package/fesm2022/koobiq-components-breadcrumbs.mjs +6 -4
  49. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  50. package/fesm2022/koobiq-components-button-toggle.mjs +9 -6
  51. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  52. package/fesm2022/koobiq-components-button.mjs +4 -4
  53. package/fesm2022/koobiq-components-button.mjs.map +1 -1
  54. package/fesm2022/koobiq-components-checkbox.mjs +2 -2
  55. package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
  56. package/fesm2022/koobiq-components-clamped-text.mjs +9 -0
  57. package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -1
  58. package/fesm2022/koobiq-components-code-block.mjs +5 -1
  59. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  60. package/fesm2022/koobiq-components-core.mjs +544 -113
  61. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  62. package/fesm2022/koobiq-components-datepicker.mjs +13 -10
  63. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  64. package/fesm2022/koobiq-components-dl.mjs +3 -2
  65. package/fesm2022/koobiq-components-dl.mjs.map +1 -1
  66. package/fesm2022/koobiq-components-dropdown.mjs +105 -31
  67. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  68. package/fesm2022/koobiq-components-file-upload.mjs +33 -22
  69. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  70. package/fesm2022/koobiq-components-filter-bar.mjs +1169 -782
  71. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  72. package/fesm2022/koobiq-components-flag.mjs +66 -0
  73. package/fesm2022/koobiq-components-flag.mjs.map +1 -0
  74. package/fesm2022/koobiq-components-form-field.mjs +6 -6
  75. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  76. package/fesm2022/koobiq-components-icon.mjs +16 -7
  77. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  78. package/fesm2022/koobiq-components-inline-edit.mjs +30 -7
  79. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
  80. package/fesm2022/koobiq-components-list.mjs +39 -20
  81. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  82. package/fesm2022/koobiq-components-loader-overlay.mjs +2 -2
  83. package/fesm2022/koobiq-components-loader-overlay.mjs.map +1 -1
  84. package/fesm2022/koobiq-components-modal.mjs +9 -5
  85. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  86. package/fesm2022/koobiq-components-navbar.mjs +123 -27
  87. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  88. package/fesm2022/koobiq-components-notification-center.mjs +193 -19
  89. package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
  90. package/fesm2022/koobiq-components-overflow-items.mjs +12 -4
  91. package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
  92. package/fesm2022/koobiq-components-popover.mjs +9 -4
  93. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  94. package/fesm2022/koobiq-components-progress-bar.mjs +2 -2
  95. package/fesm2022/koobiq-components-progress-bar.mjs.map +1 -1
  96. package/fesm2022/koobiq-components-progress-spinner.mjs +2 -2
  97. package/fesm2022/koobiq-components-progress-spinner.mjs.map +1 -1
  98. package/fesm2022/koobiq-components-radio.mjs +3 -7
  99. package/fesm2022/koobiq-components-radio.mjs.map +1 -1
  100. package/fesm2022/koobiq-components-search-expandable.mjs +43 -8
  101. package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
  102. package/fesm2022/koobiq-components-select.mjs +72 -59
  103. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  104. package/fesm2022/koobiq-components-sidebar.mjs +4 -0
  105. package/fesm2022/koobiq-components-sidebar.mjs.map +1 -1
  106. package/fesm2022/koobiq-components-sidepanel.mjs +3 -3
  107. package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
  108. package/fesm2022/koobiq-components-skeleton.mjs +2 -2
  109. package/fesm2022/koobiq-components-skeleton.mjs.map +1 -1
  110. package/fesm2022/koobiq-components-split-button.mjs +5 -12
  111. package/fesm2022/koobiq-components-split-button.mjs.map +1 -1
  112. package/fesm2022/koobiq-components-splitter.mjs +6 -2
  113. package/fesm2022/koobiq-components-splitter.mjs.map +1 -1
  114. package/fesm2022/koobiq-components-table.mjs +8 -6
  115. package/fesm2022/koobiq-components-table.mjs.map +1 -1
  116. package/fesm2022/koobiq-components-tabs.mjs +42 -18
  117. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  118. package/fesm2022/koobiq-components-tags.mjs +8 -1
  119. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  120. package/fesm2022/koobiq-components-textarea.mjs +7 -14
  121. package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
  122. package/fesm2022/koobiq-components-time-range.mjs +4 -4
  123. package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
  124. package/fesm2022/koobiq-components-timepicker.mjs +3 -4
  125. package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
  126. package/fesm2022/koobiq-components-timezone.mjs +9 -5
  127. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  128. package/fesm2022/koobiq-components-title.mjs +132 -14
  129. package/fesm2022/koobiq-components-title.mjs.map +1 -1
  130. package/fesm2022/koobiq-components-toast.mjs +1 -1
  131. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  132. package/fesm2022/koobiq-components-toggle.mjs +2 -2
  133. package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
  134. package/fesm2022/koobiq-components-tooltip.mjs +168 -8
  135. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  136. package/fesm2022/koobiq-components-tree-select.mjs +79 -38
  137. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  138. package/fesm2022/koobiq-components-tree.mjs +67 -41
  139. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  140. package/fesm2022/koobiq-components-username.mjs +16 -3
  141. package/fesm2022/koobiq-components-username.mjs.map +1 -1
  142. package/file-upload/file-upload-tokens.scss +1 -0
  143. package/file-upload/index.d.ts +10 -7
  144. package/filter-bar/_filter-bar-theme.scss +82 -0
  145. package/filter-bar/filter-bar-tokens.scss +9 -0
  146. package/filter-bar/filter-bar.scss +10 -4
  147. package/filter-bar/filter-refresher.scss +1 -1
  148. package/filter-bar/filters.scss +25 -20
  149. package/filter-bar/index.d.ts +764 -336
  150. package/filter-bar/pipes/base-pipe.scss +12 -44
  151. package/filter-bar/pipes/pipe-date.scss +20 -14
  152. package/filter-bar/pipes/pipe-input.scss +10 -0
  153. package/filter-bar/pipes/pipe-multi-tree-select.scss +5 -3
  154. package/filter-bar/pipes/pipe-multiselect.scss +5 -3
  155. package/filter-bar/pipes/pipe-readonly.scss +4 -13
  156. package/filter-bar/pipes/pipe-select.scss +3 -1
  157. package/filter-bar/pipes/pipe-tree-select.scss +3 -1
  158. package/flag/flag.scss +53 -0
  159. package/flag/index.d.ts +44 -0
  160. package/icon/icon-button.scss +3 -1
  161. package/icon/icon-item-tokens.scss +1 -1
  162. package/icon/index.d.ts +15 -2
  163. package/inline-edit/index.d.ts +5 -0
  164. package/inline-edit/inline-edit.scss +7 -7
  165. package/link/link-tokens.scss +2 -2
  166. package/list/index.d.ts +11 -2
  167. package/loader-overlay/loader-overlay-tokens.scss +1 -1
  168. package/modal/_modal-animation.scss +6 -6
  169. package/modal/_modal-theme.scss +5 -0
  170. package/modal/index.d.ts +3 -1
  171. package/modal/modal.scss +15 -0
  172. package/navbar/_navbar-item_vertical.scss +7 -5
  173. package/navbar/index.d.ts +39 -4
  174. package/navbar/navbar-brand.scss +17 -7
  175. package/navbar/navbar-item.scss +9 -0
  176. package/notification-center/_notification-center-theme.scss +2 -1
  177. package/notification-center/index.d.ts +89 -3
  178. package/notification-center/notification-center.scss +42 -4
  179. package/notification-center/notification-item.scss +3 -2
  180. package/overflow-items/index.d.ts +1 -0
  181. package/package.json +7 -3
  182. package/prebuilt-themes/dark-theme.css +1 -1
  183. package/prebuilt-themes/light-theme.css +1 -1
  184. package/prebuilt-themes/theme.css +1 -1
  185. package/progress-bar/progress-bar.scss +4 -0
  186. package/progress-spinner/progress-spinner.scss +5 -1
  187. package/radio/index.d.ts +1 -5
  188. package/radio/radio.scss +18 -4
  189. package/schematics/collection.json +15 -0
  190. package/schematics/migrations/alert-signals/README.md +64 -0
  191. package/schematics/migrations/alert-signals/data.js +70 -0
  192. package/schematics/migrations/alert-signals/index.js +350 -0
  193. package/schematics/migrations/alert-signals/schema.json +20 -0
  194. package/schematics/migrations/autocomplete-panel-width-auto/README.md +68 -0
  195. package/schematics/migrations/autocomplete-panel-width-auto/index.js +70 -0
  196. package/schematics/migrations/autocomplete-panel-width-auto/schema.json +15 -0
  197. package/schematics/migrations/filter-bar-signals/README.md +66 -0
  198. package/schematics/migrations/filter-bar-signals/data.js +72 -0
  199. package/schematics/migrations/filter-bar-signals/index.js +316 -0
  200. package/schematics/migrations/filter-bar-signals/schema.json +20 -0
  201. package/schematics/migrations.json +15 -0
  202. package/schematics/ng-add/index.js +1 -1
  203. package/schematics/utils/angular-parsing.js +11 -2
  204. package/search-expandable/index.d.ts +3 -0
  205. package/select/index.d.ts +59 -24
  206. package/sidebar/index.d.ts +1 -0
  207. package/skeleton/skeleton.scss +4 -0
  208. package/split-button/_split-button-theme.scss +2 -2
  209. package/splitter/_splitter-theme.scss +2 -2
  210. package/splitter/index.d.ts +1 -0
  211. package/table/_table-theme.scss +4 -0
  212. package/table/index.d.ts +3 -2
  213. package/tabs/_tabs-common.scss +60 -31
  214. package/tabs/_tabs-theme.scss +12 -0
  215. package/tabs/index.d.ts +4 -2
  216. package/tabs/tab-header.scss +15 -0
  217. package/tabs/tab-nav-bar.scss +4 -0
  218. package/tabs/tabs-tokens.scss +2 -1
  219. package/textarea/index.d.ts +0 -1
  220. package/time-range/time-range.scss +0 -8
  221. package/timepicker/timepicker.scss +2 -2
  222. package/timezone/index.d.ts +2 -3
  223. package/title/index.d.ts +92 -2
  224. package/tooltip/index.d.ts +124 -7
  225. package/tree/_tree-theme.scss +2 -7
  226. package/tree/index.d.ts +19 -4
  227. package/tree/toggle.scss +5 -0
  228. package/tree/tree-option.scss +0 -4
  229. package/tree-select/_tree-select-theme.scss +1 -1
  230. package/tree-select/index.d.ts +53 -22
  231. package/username/index.d.ts +20 -2
@@ -12,6 +12,11 @@
12
12
  }
13
13
  }
14
14
 
15
+ .kbq-alert__icon {
16
+ display: inline-flex;
17
+ align-items: flex-start;
18
+ }
19
+
15
20
  .kbq-alert__content {
16
21
  display: flex;
17
22
  flex-direction: column;
@@ -30,14 +35,13 @@
30
35
  margin: var(--kbq-alert-size-normal-no-title-icon-margin-top) var(--kbq-alert-size-normal-icon-margin-right)
31
36
  var(--kbq-alert-size-normal-icon-margin-bottom) var(--kbq-alert-size-normal-icon-margin-left);
32
37
 
38
+ padding-top: var(--kbq-alert-size-normal-no-title-icon-padding-top);
39
+
33
40
  &.kbq-alert__icon_title {
34
41
  margin-top: var(--kbq-alert-size-normal-icon-margin-top);
35
42
 
36
- padding-top: var(--kbq-alert-size-normal-no-title-icon-padding-top);
43
+ padding-top: var(--kbq-alert-size-normal-icon-padding-top);
37
44
  }
38
-
39
- display: inline-flex;
40
- align-items: flex-start;
41
45
  }
42
46
 
43
47
  & .kbq-alert__content {
@@ -50,12 +54,17 @@
50
54
  }
51
55
 
52
56
  & .kbq-alert__button-stack {
57
+ display: flex;
58
+ flex-wrap: wrap;
59
+ align-items: center;
60
+ gap: var(--kbq-size-m);
61
+
53
62
  padding-top: var(--kbq-alert-size-normal-button-stack-padding-top);
54
63
  padding-bottom: var(--kbq-alert-size-normal-button-stack-padding-bottom);
55
64
  }
56
65
 
57
66
  & .kbq-alert__button-stack_has-button {
58
- padding-top: 12px;
67
+ padding-top: var(--kbq-size-m);
59
68
  }
60
69
 
61
70
  & .kbq-alert__close-button {
@@ -63,8 +72,8 @@
63
72
  margin-left: var(--kbq-alert-size-normal-close-button-margin-left);
64
73
 
65
74
  .kbq-icon-button {
66
- --kbq-icon-button-size-normal-horizontal-padding: 4px;
67
- --kbq-icon-button-size-normal-vertical-padding: 4px;
75
+ --kbq-icon-button-size-normal-horizontal-padding: var(--kbq-size-xxs);
76
+ --kbq-icon-button-size-normal-vertical-padding: var(--kbq-size-xxs);
68
77
  }
69
78
  }
70
79
  }
@@ -86,9 +95,6 @@
86
95
 
87
96
  padding-top: var(--kbq-alert-size-compact-icon-padding-top);
88
97
  }
89
-
90
- display: inline-flex;
91
- align-items: flex-start;
92
98
  }
93
99
 
94
100
  & .kbq-alert__content {
@@ -101,12 +107,17 @@
101
107
  }
102
108
 
103
109
  & .kbq-alert__button-stack {
110
+ display: flex;
111
+ flex-wrap: wrap;
112
+ align-items: center;
113
+ gap: var(--kbq-size-m);
114
+
104
115
  padding-top: var(--kbq-alert-size-compact-button-stack-padding-top);
105
116
  padding-bottom: var(--kbq-alert-size-compact-button-stack-padding-bottom);
106
117
  }
107
118
 
108
119
  & .kbq-alert__button-stack_has-button {
109
- padding-top: 12px;
120
+ padding-top: var(--kbq-size-m);
110
121
  }
111
122
 
112
123
  & .kbq-alert__close-button {
@@ -114,8 +125,8 @@
114
125
  margin-left: var(--kbq-alert-size-compact-close-button-margin-left);
115
126
 
116
127
  .kbq-icon-button {
117
- --kbq-icon-button-size-normal-horizontal-padding: 4px;
118
- --kbq-icon-button-size-normal-vertical-padding: 4px;
128
+ --kbq-icon-button-size-normal-horizontal-padding: var(--kbq-size-xxs);
129
+ --kbq-icon-button-size-normal-vertical-padding: var(--kbq-size-xxs);
119
130
  }
120
131
  }
121
132
  }
package/alert/index.d.ts CHANGED
@@ -1,54 +1,88 @@
1
- import * as i0 from '@angular/core';
2
- import { AfterContentInit } from '@angular/core';
1
+ import * as _angular_core from '@angular/core';
3
2
  import { KbqButton } from '@koobiq/components/button';
4
3
  import { KbqIconItem, KbqIcon } from '@koobiq/components/icon';
5
- import * as i1 from '@angular/cdk/a11y';
6
- import * as i2 from '@angular/cdk/platform';
7
4
 
5
+ /** Visual style of an alert. */
8
6
  declare enum KbqAlertStyles {
7
+ /** Neutral background; the status is conveyed by the icon color only. */
9
8
  Default = "default",
9
+ /** Colored background matching the status — use to draw attention when a default alert gets lost on screen. */
10
10
  Colored = "colored"
11
11
  }
12
+ /** Status conveyed by an alert. Drives the background (colored style) and the auto-tinted status icon. */
12
13
  declare enum KbqAlertColors {
13
14
  Error = "error",
14
15
  Warning = "warning",
15
16
  Success = "success",
16
17
  Info = "info"
17
18
  }
19
+ /** Marks the projected alert heading. */
18
20
  declare class KbqAlertTitle {
19
- static ɵfac: i0.ɵɵFactoryDeclaration<KbqAlertTitle, never>;
20
- static ɵdir: i0.ɵɵDirectiveDeclaration<KbqAlertTitle, "[kbq-alert-title]", never, {}, {}, never, never, true, never>;
21
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KbqAlertTitle, never>;
22
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KbqAlertTitle, "[kbq-alert-title]", ["kbqAlertTitle"], {}, {}, never, never, true, never>;
21
23
  }
24
+ /** Marks the projected close control (place it on a native `<button>` with an accessible name). */
22
25
  declare class KbqAlertCloseButton {
23
- static ɵfac: i0.ɵɵFactoryDeclaration<KbqAlertCloseButton, never>;
24
- static ɵdir: i0.ɵɵDirectiveDeclaration<KbqAlertCloseButton, "[kbq-alert-close-button]", never, {}, {}, never, never, true, never>;
26
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KbqAlertCloseButton, never>;
27
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KbqAlertCloseButton, "[kbq-alert-close-button]", ["kbqAlertCloseButton"], {}, {}, never, never, true, never>;
25
28
  }
29
+ /** Marks a projected action control (link or button) shown in the alert's button stack. */
26
30
  declare class KbqAlertControl {
27
- static ɵfac: i0.ɵɵFactoryDeclaration<KbqAlertControl, never>;
28
- static ɵdir: i0.ɵɵDirectiveDeclaration<KbqAlertControl, "[kbq-alert-control]", never, {}, {}, never, never, true, never>;
31
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KbqAlertControl, never>;
32
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KbqAlertControl, "[kbq-alert-control]", ["kbqAlertControl"], {}, {}, never, never, true, never>;
29
33
  }
30
- declare class KbqAlert implements AfterContentInit {
31
- readonly iconItem: i0.Signal<KbqIconItem | undefined>;
32
- readonly icon: i0.Signal<KbqIcon | undefined>;
33
- readonly button: i0.Signal<KbqButton | undefined>;
34
- readonly title: i0.Signal<KbqAlertTitle | undefined>;
35
- readonly control: i0.Signal<KbqAlertControl | undefined>;
36
- readonly closeButton: i0.Signal<KbqAlertCloseButton | undefined>;
37
- readonly compact: i0.InputSignal<boolean>;
38
- readonly alertStyle: i0.InputSignal<string>;
39
- get alertColor(): string;
40
- set alertColor(value: string | KbqAlertColors);
41
- private _alertColor;
42
- get isColored(): boolean;
43
- ngAfterContentInit(): void;
44
- static ɵfac: i0.ɵɵFactoryDeclaration<KbqAlert, never>;
45
- static ɵcmp: i0.ɵɵComponentDeclaration<KbqAlert, "kbq-alert", never, { "compact": { "alias": "compact"; "required": false; "isSignal": true; }; "alertStyle": { "alias": "alertStyle"; "required": false; "isSignal": true; }; "alertColor": { "alias": "alertColor"; "required": false; }; }, {}, ["iconItem", "icon", "button", "title", "control", "closeButton"], ["[kbq-icon-item],[kbq-icon]", "[kbq-alert-title]", "*", "[kbq-alert-control]", "[kbq-alert-close-button]"], true, never>;
34
+ /**
35
+ * Shows important information on a page. Can carry a hint, signal a status change, or indicate a problem.
36
+ *
37
+ * ```html
38
+ * <kbq-alert [alertColor]="'error'" [alertStyle]="'colored'">Something went wrong</kbq-alert>
39
+ * ```
40
+ *
41
+ * For a dynamically inserted alert, add `role="alert"` (or `aria-live`) on the host so assistive
42
+ * technology announces it — see the component guide.
43
+ */
44
+ declare class KbqAlert {
45
+ /** @docs-private */
46
+ protected readonly iconItem: _angular_core.Signal<KbqIconItem | undefined>;
47
+ /** @docs-private */
48
+ protected readonly icon: _angular_core.Signal<KbqIcon | undefined>;
49
+ /** @docs-private */
50
+ protected readonly button: _angular_core.Signal<KbqButton | undefined>;
51
+ /** @docs-private */
52
+ protected readonly title: _angular_core.Signal<KbqAlertTitle | undefined>;
53
+ /** @docs-private */
54
+ protected readonly control: _angular_core.Signal<KbqAlertControl | undefined>;
55
+ /** @docs-private */
56
+ protected readonly closeButton: _angular_core.Signal<KbqAlertCloseButton | undefined>;
57
+ /** Whether the alert uses the denser compact size. */
58
+ readonly compact: _angular_core.InputSignalWithTransform<boolean, unknown>;
59
+ /** Visual style — neutral `default` or the attention-drawing `colored` background. */
60
+ readonly alertStyle: _angular_core.InputSignal<"default" | "colored">;
61
+ /**
62
+ * Status of the alert. Drives the background in the `colored` style and auto-tints an uncolored
63
+ * projected status icon to the matching color (`info` icons become `contrast`).
64
+ * @default 'info'
65
+ */
66
+ readonly alertColor: _angular_core.InputSignalWithTransform<"error" | "warning" | "success" | "info", "error" | "warning" | "success" | "info" | null | undefined>;
67
+ /** Emitted when the projected close control is activated. The consumer is responsible for hiding the alert. */
68
+ readonly closed: _angular_core.OutputEmitterRef<void>;
69
+ /** @docs-private */
70
+ protected readonly alertColorClass: _angular_core.Signal<string>;
71
+ /** @docs-private */
72
+ protected readonly isColored: _angular_core.Signal<boolean>;
73
+ /** The projected status icon, whichever slot it came from. @docs-private */
74
+ protected readonly projectedIcon: _angular_core.Signal<KbqIcon | undefined>;
75
+ /** Last color this component auto-assigned to the icon; lets us correct color on change without ignoring consumer's color. */
76
+ private lastAutoColor;
77
+ constructor();
78
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KbqAlert, never>;
79
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KbqAlert, "kbq-alert", ["kbqAlert"], { "compact": { "alias": "compact"; "required": false; "isSignal": true; }; "alertStyle": { "alias": "alertStyle"; "required": false; "isSignal": true; }; "alertColor": { "alias": "alertColor"; "required": false; "isSignal": true; }; }, { "closed": "closed"; }, ["iconItem", "icon", "button", "title", "control", "closeButton"], ["[kbq-icon-item],[kbq-icon]", "[kbq-alert-title]", "*", "[kbq-alert-control]", "[kbq-alert-close-button]"], true, never>;
46
80
  }
47
81
 
48
82
  declare class KbqAlertModule {
49
- static ɵfac: i0.ɵɵFactoryDeclaration<KbqAlertModule, never>;
50
- static ɵmod: i0.ɵɵNgModuleDeclaration<KbqAlertModule, never, [typeof i1.A11yModule, typeof i2.PlatformModule, typeof KbqAlert, typeof KbqAlertTitle, typeof KbqAlertCloseButton, typeof KbqAlertControl], [typeof KbqAlert, typeof KbqAlertTitle, typeof KbqAlertCloseButton, typeof KbqAlertControl]>;
51
- static ɵinj: i0.ɵɵInjectorDeclaration<KbqAlertModule>;
83
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KbqAlertModule, never>;
84
+ static ɵmod: _angular_core.ɵɵNgModuleDeclaration<KbqAlertModule, never, [typeof KbqAlert, typeof KbqAlertTitle, typeof KbqAlertCloseButton, typeof KbqAlertControl], [typeof KbqAlert, typeof KbqAlertTitle, typeof KbqAlertCloseButton, typeof KbqAlertControl]>;
85
+ static ɵinj: _angular_core.ɵɵInjectorDeclaration<KbqAlertModule>;
52
86
  }
53
87
 
54
88
  export { KbqAlert, KbqAlertCloseButton, KbqAlertColors, KbqAlertControl, KbqAlertModule, KbqAlertStyles, KbqAlertTitle };
@@ -9,6 +9,8 @@
9
9
  min-height: 50px;
10
10
 
11
11
  border-radius: var(--kbq-size-xs);
12
+ // base transparent border so the .cdk-keyboard-focused border-color renders a focus ring (matches list-item-base)
13
+ border: var(--kbq-size-3xs) solid transparent;
12
14
 
13
15
  @include common.user-select(none);
14
16
 
@@ -14,7 +14,8 @@
14
14
  box-sizing: border-box;
15
15
  min-width: 100%;
16
16
  width: 100%;
17
- max-width: none;
17
+ // See `%kbq-select-panel` — same soft cap, same token.
18
+ max-width: var(--kbq-panel-size-width-max, 640px);
18
19
 
19
20
  border-radius: var(--kbq-autocomplete-size-panel-border-radius, var(--kbq-size-border-radius));
20
21
  max-height: var(--kbq-autocomplete-size-panel-max-height);
@@ -1,10 +1,10 @@
1
- import * as i0 from '@angular/core';
1
+ import * as _angular_core from '@angular/core';
2
2
  import { ElementRef, AfterContentInit, TemplateRef, QueryList, InjectionToken, Provider, AfterViewInit, OnDestroy } from '@angular/core';
3
3
  import * as i2 from '@angular/cdk/overlay';
4
4
  import { ScrollStrategy, Overlay } from '@angular/cdk/overlay';
5
5
  import { ControlValueAccessor } from '@angular/forms';
6
6
  import * as i1 from '@koobiq/components/core';
7
- import { ActiveDescendantKeyManager, KbqOption, KbqOptgroup, KeyboardNavigationHandler, KbqOptionSelectionChange } from '@koobiq/components/core';
7
+ import { ActiveDescendantKeyManager, KbqOption, KbqOptgroup, KbqPanelWidth, KbqPanelMaxWidth, KeyboardNavigationHandler, KbqOptionSelectionChange } from '@koobiq/components/core';
8
8
  import { Observable } from 'rxjs';
9
9
 
10
10
  /**
@@ -13,14 +13,14 @@ import { Observable } from 'rxjs';
13
13
  */
14
14
  declare class KbqAutocompleteOrigin {
15
15
  elementRef: ElementRef<HTMLElement>;
16
- static ɵfac: i0.ɵɵFactoryDeclaration<KbqAutocompleteOrigin, never>;
17
- static ɵdir: i0.ɵɵDirectiveDeclaration<KbqAutocompleteOrigin, "[kbqAutocompleteOrigin]", ["kbqAutocompleteOrigin"], {}, {}, never, never, true, never>;
16
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KbqAutocompleteOrigin, never>;
17
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KbqAutocompleteOrigin, "[kbqAutocompleteOrigin]", ["kbqAutocompleteOrigin"], {}, {}, never, never, true, never>;
18
18
  }
19
19
 
20
20
  /** Footer that is rendered below the autocomplete options panel. */
21
21
  declare class KbqAutocompleteFooter {
22
- static ɵfac: i0.ɵɵFactoryDeclaration<KbqAutocompleteFooter, never>;
23
- static ɵdir: i0.ɵɵDirectiveDeclaration<KbqAutocompleteFooter, "[kbqAutocompleteFooter], kbq-autocomplete-footer", never, {}, {}, never, never, true, never>;
22
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KbqAutocompleteFooter, never>;
23
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KbqAutocompleteFooter, "[kbqAutocompleteFooter], kbq-autocomplete-footer", never, {}, {}, never, never, true, never>;
24
24
  }
25
25
  declare class KbqAutocompleteSelectedEvent {
26
26
  source: KbqAutocomplete;
@@ -46,28 +46,36 @@ declare class KbqAutocomplete implements AfterContentInit {
46
46
  keyManager: ActiveDescendantKeyManager<KbqOption>;
47
47
  /** Whether the autocomplete panel should be visible, depending on option length. */
48
48
  showPanel: boolean;
49
- readonly template: i0.Signal<TemplateRef<any>>;
50
- readonly panel: i0.Signal<ElementRef<any>>;
49
+ readonly template: _angular_core.Signal<TemplateRef<any>>;
50
+ readonly panel: _angular_core.Signal<ElementRef<any>>;
51
51
  options: QueryList<KbqOption>;
52
- readonly optionGroups: i0.Signal<readonly KbqOptgroup[]>;
52
+ readonly optionGroups: _angular_core.Signal<readonly KbqOptgroup[]>;
53
53
  /** Function that maps an option's control value to its display value in the trigger. */
54
54
  displayWith: ((value: any) => string) | null;
55
55
  /**
56
- * Specify the width of the autocomplete panel. Can be any CSS sizing value, otherwise it will
57
- * match the width of its host.
56
+ * Specify the width of the autocomplete panel. If set to `auto`, the panel will match the width of
57
+ * its host, but will never be narrower than `panelMinWidth`. Any other CSS sizing value is used as an
58
+ * exact width, and `panelMinWidth` is not applied. When not set, the panel sizes to its content and is
59
+ * at least as wide as its host.
58
60
  */
59
- panelWidth: string | number;
61
+ readonly panelWidth: _angular_core.InputSignal<KbqPanelWidth | undefined>;
60
62
  /**
61
63
  * Minimum width of the panel in pixels.
62
64
  * When panelWidth is not set, the panel will be at least as wide as its host and no less than panelMinWidth.
63
65
  */
64
- panelMinWidth: number;
66
+ readonly panelMinWidth: _angular_core.InputSignalWithTransform<number, unknown>;
67
+ /**
68
+ * Maximum width of the panel in pixels. Caps how far the panel grows with its content — it never makes
69
+ * the panel narrower than its host, and never clamps an explicit `panelWidth`.
70
+ * When null, the `--kbq-panel-size-width-max` token applies.
71
+ */
72
+ readonly panelMaxWidth: _angular_core.InputSignalWithTransform<KbqPanelMaxWidth, unknown>;
65
73
  /** Event that is emitted whenever an option from the list is selected. */
66
- readonly optionSelected: i0.OutputEmitterRef<KbqAutocompleteSelectedEvent>;
74
+ readonly optionSelected: _angular_core.OutputEmitterRef<KbqAutocompleteSelectedEvent>;
67
75
  /** Event that is emitted when the autocomplete panel is opened. */
68
- readonly opened: i0.OutputEmitterRef<void>;
76
+ readonly opened: _angular_core.OutputEmitterRef<void>;
69
77
  /** Event that is emitted when the autocomplete panel is closed. */
70
- readonly closed: i0.OutputEmitterRef<void>;
78
+ readonly closed: _angular_core.OutputEmitterRef<void>;
71
79
  /**
72
80
  * Takes classes set on the host kbq-autocomplete element and applies them to the panel
73
81
  * inside the overlay container to allow for easy styling.
@@ -96,9 +104,8 @@ declare class KbqAutocomplete implements AfterContentInit {
96
104
  emitSelectEvent(option: KbqOption): void;
97
105
  onKeydown(event: KeyboardEvent): any;
98
106
  private updateFocusClass;
99
- static ɵfac: i0.ɵɵFactoryDeclaration<KbqAutocomplete, never>;
100
- static ɵcmp: i0.ɵɵComponentDeclaration<KbqAutocomplete, "kbq-autocomplete", ["kbqAutocomplete"], { "displayWith": { "alias": "displayWith"; "required": false; }; "panelWidth": { "alias": "panelWidth"; "required": false; }; "panelMinWidth": { "alias": "panelMinWidth"; "required": false; }; "classList": { "alias": "class"; "required": false; }; "autoActiveFirstOption": { "alias": "autoActiveFirstOption"; "required": false; }; "openOnFocus": { "alias": "openOnFocus"; "required": false; }; }, { "optionSelected": "optionSelected"; "opened": "opened"; "closed": "closed"; }, ["optionGroups", "options"], ["*", "[kbqAutocompleteFooter], kbq-autocomplete-footer"], true, never>;
101
- static ngAcceptInputType_panelMinWidth: unknown;
107
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KbqAutocomplete, never>;
108
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KbqAutocomplete, "kbq-autocomplete", ["kbqAutocomplete"], { "displayWith": { "alias": "displayWith"; "required": false; }; "panelWidth": { "alias": "panelWidth"; "required": false; "isSignal": true; }; "panelMinWidth": { "alias": "panelMinWidth"; "required": false; "isSignal": true; }; "panelMaxWidth": { "alias": "panelMaxWidth"; "required": false; "isSignal": true; }; "classList": { "alias": "class"; "required": false; }; "autoActiveFirstOption": { "alias": "autoActiveFirstOption"; "required": false; }; "openOnFocus": { "alias": "openOnFocus"; "required": false; }; }, { "optionSelected": "optionSelected"; "opened": "opened"; "closed": "closed"; }, ["optionGroups", "options"], ["*", "[kbqAutocompleteFooter], kbq-autocomplete-footer"], true, never>;
102
109
  }
103
110
 
104
111
  /**
@@ -141,17 +148,17 @@ declare class KbqAutocompleteTrigger implements AfterViewInit, ControlValueAcces
141
148
  get activeOption(): KbqOption | null;
142
149
  get panelOpen(): boolean;
143
150
  /** The autocomplete panel to be attached to this trigger. */
144
- readonly autocomplete: i0.InputSignal<KbqAutocomplete>;
151
+ readonly autocomplete: _angular_core.InputSignal<KbqAutocomplete>;
145
152
  /**
146
153
  * Reference relative to which to position the autocomplete panel.
147
154
  * Defaults to the autocomplete trigger element.
148
155
  */
149
- readonly connectedTo: i0.InputSignal<KbqAutocompleteOrigin>;
156
+ readonly connectedTo: _angular_core.InputSignal<KbqAutocompleteOrigin>;
150
157
  /**
151
158
  * `autocomplete` attribute to be set on the input element.
152
159
  * @docs-private
153
160
  */
154
- readonly autocompleteAttribute: i0.InputSignal<string>;
161
+ readonly autocompleteAttribute: _angular_core.InputSignal<string>;
155
162
  /**
156
163
  * Whether the autocomplete is disabled. When disabled, the element will
157
164
  * act as a regular input and the user won't be able to open the panel.
@@ -163,7 +170,7 @@ declare class KbqAutocompleteTrigger implements AfterViewInit, ControlValueAcces
163
170
  * Determines whether the blur event is triggered outside the specific target
164
171
  * @returns A boolean indicating if the blur event happened outside the target element
165
172
  */
166
- readonly onInputBlur: i0.InputSignal<(event: FocusEvent) => boolean>;
173
+ readonly onInputBlur: _angular_core.InputSignal<(event: FocusEvent) => boolean>;
167
174
  private _autocompleteDisabled;
168
175
  private overlayAttached;
169
176
  private overlayRef;
@@ -242,7 +249,6 @@ declare class KbqAutocompleteTrigger implements AfterViewInit, ControlValueAcces
242
249
  private getOverlayConfig;
243
250
  private getOverlayPosition;
244
251
  private getConnectedElement;
245
- private getPanelMinWidth;
246
252
  private getOverlaySize;
247
253
  private getHostWidth;
248
254
  /**
@@ -251,14 +257,14 @@ declare class KbqAutocompleteTrigger implements AfterViewInit, ControlValueAcces
251
257
  */
252
258
  private resetActiveItem;
253
259
  private canOpen;
254
- static ɵfac: i0.ɵɵFactoryDeclaration<KbqAutocompleteTrigger, never>;
255
- static ɵdir: i0.ɵɵDirectiveDeclaration<KbqAutocompleteTrigger, "input[kbqAutocomplete], textarea[kbqAutocomplete]", ["kbqAutocompleteTrigger"], { "autocomplete": { "alias": "kbqAutocomplete"; "required": false; "isSignal": true; }; "connectedTo": { "alias": "kbqAutocompleteConnectedTo"; "required": false; "isSignal": true; }; "autocompleteAttribute": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "autocompleteDisabled": { "alias": "kbqAutocompleteDisabled"; "required": false; }; "onInputBlur": { "alias": "kbqAutocompleteOnBlur"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
260
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KbqAutocompleteTrigger, never>;
261
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KbqAutocompleteTrigger, "input[kbqAutocomplete], textarea[kbqAutocomplete]", ["kbqAutocompleteTrigger"], { "autocomplete": { "alias": "kbqAutocomplete"; "required": false; "isSignal": true; }; "connectedTo": { "alias": "kbqAutocompleteConnectedTo"; "required": false; "isSignal": true; }; "autocompleteAttribute": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "autocompleteDisabled": { "alias": "kbqAutocompleteDisabled"; "required": false; }; "onInputBlur": { "alias": "kbqAutocompleteOnBlur"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
256
262
  }
257
263
 
258
264
  declare class KbqAutocompleteModule {
259
- static ɵfac: i0.ɵɵFactoryDeclaration<KbqAutocompleteModule, never>;
260
- static ɵmod: i0.ɵɵNgModuleDeclaration<KbqAutocompleteModule, never, [typeof i1.KbqOptionModule, typeof i2.OverlayModule, typeof KbqAutocomplete, typeof KbqAutocompleteTrigger, typeof KbqAutocompleteOrigin, typeof KbqAutocompleteFooter], [typeof KbqAutocomplete, typeof i1.KbqOptionModule, typeof KbqAutocompleteTrigger, typeof KbqAutocompleteOrigin, typeof KbqAutocompleteFooter]>;
261
- static ɵinj: i0.ɵɵInjectorDeclaration<KbqAutocompleteModule>;
265
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KbqAutocompleteModule, never>;
266
+ static ɵmod: _angular_core.ɵɵNgModuleDeclaration<KbqAutocompleteModule, never, [typeof i1.KbqOptionModule, typeof i2.OverlayModule, typeof KbqAutocomplete, typeof KbqAutocompleteTrigger, typeof KbqAutocompleteOrigin, typeof KbqAutocompleteFooter], [typeof KbqAutocomplete, typeof i1.KbqOptionModule, typeof KbqAutocompleteTrigger, typeof KbqAutocompleteOrigin, typeof KbqAutocompleteFooter]>;
267
+ static ɵinj: _angular_core.ɵɵInjectorDeclaration<KbqAutocompleteModule>;
262
268
  }
263
269
 
264
270
  export { AUTOCOMPLETE_PANEL_HEIGHT, KBQ_AUTOCOMPLETE_DEFAULT_OPTIONS, KBQ_AUTOCOMPLETE_DEFAULT_OPTIONS_FACTORY, KBQ_AUTOCOMPLETE_SCROLL_STRATEGY, KBQ_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY, KBQ_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER, KBQ_AUTOCOMPLETE_VALUE_ACCESSOR, KbqAutocomplete, KbqAutocompleteFooter, KbqAutocompleteModule, KbqAutocompleteOrigin, KbqAutocompleteSelectedEvent, KbqAutocompleteTrigger, getKbqAutocompleteMissingPanelError };
package/badge/index.d.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  import * as i0 from '@angular/core';
2
- import { AfterContentInit } from '@angular/core';
3
2
  import { KbqIconItem } from '@koobiq/components/icon';
4
3
  import * as i1 from '@angular/cdk/a11y';
5
4
  import * as i2 from '@angular/cdk/platform';
@@ -25,14 +24,14 @@ declare const leftIconClassName = "kbq-icon_left";
25
24
  declare const rightIconClassName = "kbq-icon_right";
26
25
  declare const badgeLeftIconClassName = "kbq-badge-icon_left";
27
26
  declare const badgeRightIconClassName = "kbq-badge-icon_right";
28
- declare class KbqBadgeCssStyler implements AfterContentInit {
27
+ declare class KbqBadgeCssStyler {
29
28
  private renderer;
30
29
  private cdr;
31
30
  readonly icons: i0.Signal<readonly any[]>;
32
31
  nativeElement: HTMLElement;
33
32
  isIconButton: boolean;
34
33
  constructor();
35
- ngAfterContentInit(): void;
34
+ /** @docs-private */
36
35
  updateClassModifierForIcons(): void;
37
36
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqBadgeCssStyler, never>;
38
37
  static ɵdir: i0.ɵɵDirectiveDeclaration<KbqBadgeCssStyler, "kbq-badge", never, {}, {}, ["icons"], never, true, never>;
@@ -73,6 +73,10 @@
73
73
  --kbq-button-size-border-radius: var(--kbq-breadcrumb-item-border-radius);
74
74
  }
75
75
 
76
+ &.kbq-dropdown-trigger {
77
+ --kbq-dropdown-trigger-horizontal-padding: var(--kbq-breadcrumb-item-horizontal-padding);
78
+ }
79
+
76
80
  &:focus-visible {
77
81
  outline-offset: unset;
78
82
  }
@@ -211,6 +211,7 @@ declare class KbqBreadcrumbs {
211
211
  protected readonly separator?: TemplateRef<any>;
212
212
  protected readonly items: _angular_core.Signal<readonly KbqBreadcrumbItem[]>;
213
213
  private readonly breadcrumbsResult;
214
+ private readonly resultDropdownTrigger;
214
215
  private readonly result;
215
216
  private readonly overflowItems;
216
217
  private readonly overflowItemsDir;
@@ -230,7 +231,7 @@ declare class KbqBreadcrumbs {
230
231
  constructor();
231
232
  private enforceMaxVisible;
232
233
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KbqBreadcrumbs, never>;
233
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KbqBreadcrumbs, "kbq-breadcrumbs,[kbq-breadcrumbs]", never, { "firstItemNegativeMargin": { "alias": "firstItemNegativeMargin"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "wrapMode": { "alias": "wrapMode"; "required": false; "isSignal": true; }; }, {}, ["items", "separator"], ["*"], true, [{ directive: typeof RdxRovingFocusGroupDirective; inputs: {}; outputs: {}; }]>;
234
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KbqBreadcrumbs, "kbq-breadcrumbs,[kbq-breadcrumbs]", never, { "firstItemNegativeMargin": { "alias": "firstItemNegativeMargin"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "wrapMode": { "alias": "wrapMode"; "required": false; "isSignal": true; }; }, {}, ["items", "separator"], never, true, [{ directive: typeof RdxRovingFocusGroupDirective; inputs: {}; outputs: {}; }]>;
234
235
  }
235
236
 
236
237
  declare class KbqBreadcrumbsModule {
@@ -3,15 +3,55 @@
3
3
  .kbq-button-group {
4
4
  &.kbq-button-group_horizontal {
5
5
  @include groups-mixins.group(':is(.kbq-button, .kbq-button-icon)');
6
+
7
+ & > :is(.kbq-button, .kbq-button-icon):not(:last-child, .cdk-keyboard-focused) {
8
+ border-right-color: transparent;
9
+ }
6
10
  }
7
11
 
8
12
  &.kbq-button-group_vertical {
9
13
  @include groups-mixins.vertical-group(':is(.kbq-button, .kbq-button-icon)');
14
+
15
+ & > :is(.kbq-button, .kbq-button-icon):not(:last-child, .cdk-keyboard-focused) {
16
+ border-bottom-color: transparent;
17
+ }
10
18
  }
11
19
 
12
20
  &:not(:has(> :not(.kbq-contrast-fade.kbq-button_filled))),
13
21
  &:not(:has(> :not(.kbq-contrast.kbq-button_filled))) {
14
- // @TODO tech debt (#DS-4847)
15
- gap: var(--kbq-size-3xs);
22
+ :is(.kbq-button, .kbq-button-icon) {
23
+ background-clip: padding-box !important;
24
+ }
25
+ }
26
+
27
+ &.kbq-contrast-fade.kbq-button-group-root_filled {
28
+ // internal css variable, so don't prefixed with kbq
29
+ --button-group-divider-color: var(--kbq-line-contrast-fade);
30
+
31
+ &.kbq-button-group_horizontal {
32
+ :is(.kbq-button, .kbq-button-icon):not(:first-child)::before {
33
+ content: '';
34
+ position: absolute;
35
+ // offset by -1px because absolute positioning is relative to the padding edge,
36
+ // but the visual junction sits 1px to the left in the transparent border area
37
+ left: calc(-1 * var(--kbq-size-border-width));
38
+ top: 0;
39
+ bottom: 0;
40
+ width: var(--kbq-size-border-width);
41
+ background: var(--button-group-divider-color);
42
+ }
43
+ }
44
+
45
+ &.kbq-button-group_vertical {
46
+ :is(.kbq-button, .kbq-button-icon):not(:first-child)::before {
47
+ content: '';
48
+ position: absolute;
49
+ top: calc(-1 * var(--kbq-size-border-width));
50
+ left: 0;
51
+ right: 0;
52
+ height: var(--kbq-size-border-width);
53
+ background: var(--button-group-divider-color);
54
+ }
55
+ }
16
56
  }
17
57
  }
@@ -54,6 +54,7 @@
54
54
 
55
55
  .kbq-button-toggle-wrapper {
56
56
  display: inline-flex;
57
+ justify-content: center;
57
58
 
58
59
  text-overflow: ellipsis;
59
60
  overflow: hidden;
@@ -81,6 +82,28 @@
81
82
  }
82
83
  }
83
84
  }
85
+
86
+ &.kbq-button-toggle-group_stretched {
87
+ width: 100%;
88
+
89
+ .kbq-button-toggle {
90
+ flex: 1;
91
+
92
+ > .kbq-button,
93
+ > .kbq-button-icon {
94
+ width: 100%;
95
+ flex: 1;
96
+
97
+ .kbq-button-wrapper {
98
+ justify-content: center;
99
+ }
100
+
101
+ .kbq-button-toggle-wrapper {
102
+ display: block;
103
+ }
104
+ }
105
+ }
106
+ }
84
107
  }
85
108
 
86
109
  .kbq-button-toggle_vertical {
@@ -32,6 +32,8 @@ declare class KbqButtonToggleGroup implements ControlValueAccessor, OnInit, Afte
32
32
  /** Whether the toggle group is vertical. */
33
33
  get vertical(): boolean;
34
34
  set vertical(value: boolean);
35
+ /** Whether the toggle group stretches to fill its container width, with toggles sharing equal space. */
36
+ readonly stretched: _angular_core.InputSignalWithTransform<boolean, unknown>;
35
37
  /** Value of the toggle group. */
36
38
  get value(): any;
37
39
  set value(newValue: any);
@@ -101,7 +103,7 @@ declare class KbqButtonToggleGroup implements ControlValueAccessor, OnInit, Afte
101
103
  /** Selects a value if there's a toggle that corresponds to it. */
102
104
  private selectValue;
103
105
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KbqButtonToggleGroup, never>;
104
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KbqButtonToggleGroup, "kbq-button-toggle-group", ["kbqButtonToggleGroup"], { "vertical": { "alias": "vertical"; "required": false; }; "value": { "alias": "value"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "valueChange": "valueChange"; "change": "change"; }, ["buttonToggles"], never, true, never>;
106
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KbqButtonToggleGroup, "kbq-button-toggle-group", ["kbqButtonToggleGroup"], { "vertical": { "alias": "vertical"; "required": false; }; "stretched": { "alias": "stretched"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "valueChange": "valueChange"; "change": "change"; }, ["buttonToggles"], never, true, never>;
105
107
  }
106
108
  /** Single button inside of a toggle group. */
107
109
  declare class KbqButtonToggle implements OnInit, AfterContentInit, AfterViewInit, OnDestroy {
@@ -32,9 +32,7 @@
32
32
 
33
33
  max-width: calc(100% - var(--padding));
34
34
 
35
- // `cursor: inherit` ensures that the wrapper element gets the same cursor as the kbq-checkbox
36
- // (e.g. pointer by default, regular when disabled), instead of the browser default.
37
- cursor: inherit;
35
+ cursor: pointer;
38
36
 
39
37
  padding-top: var(--kbq-checkbox-size-normal-padding-top);
40
38
 
@@ -56,7 +54,6 @@
56
54
  .kbq-checkbox {
57
55
  display: inline-block;
58
56
 
59
- cursor: pointer;
60
57
  -webkit-tap-highlight-color: transparent;
61
58
 
62
59
  max-width: 100%;
@@ -89,6 +86,10 @@
89
86
  &.kbq-disabled {
90
87
  cursor: default;
91
88
 
89
+ .kbq-checkbox__layout {
90
+ cursor: default;
91
+ }
92
+
92
93
  .kbq-checkbox__frame {
93
94
  box-shadow: none;
94
95
  }
@@ -1,7 +1,7 @@
1
1
  import * as _koobiq_components_core from '@koobiq/components/core';
2
2
  import { KbqClampedTextLocaleConfig } from '@koobiq/components/core';
3
3
  import * as _angular_core from '@angular/core';
4
- import { Signal, InjectionToken, Provider, AfterViewInit, ElementRef } from '@angular/core';
4
+ import { Signal, InjectionToken, Provider, OnInit, AfterViewInit, ElementRef } from '@angular/core';
5
5
 
6
6
  /**
7
7
  * Default maximum number of visible rows for the clamped text component
@@ -76,7 +76,7 @@ declare class KbqClampedListTrigger {
76
76
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KbqClampedListTrigger, "[kbqClampedListTrigger]", ["kbqClampedListTrigger"], {}, {}, never, never, true, never>;
77
77
  }
78
78
 
79
- declare class KbqClampedText implements KbqClamped, AfterViewInit {
79
+ declare class KbqClampedText implements KbqClamped, OnInit, AfterViewInit {
80
80
  /**
81
81
  * Max rows before text is clamped.
82
82
  * @default kbqClampedTextDefaultMaxRows
@@ -109,6 +109,7 @@ declare class KbqClampedText implements KbqClamped, AfterViewInit {
109
109
  private readonly destroyRef;
110
110
  private readonly elementRef;
111
111
  private readonly resizeObserver;
112
+ private readonly platform;
112
113
  /**
113
114
  * Clamped text locale configuration.
114
115
  * @docs-private
@@ -119,6 +120,7 @@ declare class KbqClampedText implements KbqClamped, AfterViewInit {
119
120
  */
120
121
  private isEventFromToggle;
121
122
  constructor();
123
+ ngOnInit(): void;
122
124
  ngAfterViewInit(): void;
123
125
  /** @docs-private */
124
126
  toggle(event: Event): void;