@koobiq/components 20.1.0 → 20.3.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 (249) hide show
  1. package/accordion/_accordion-theme.scss +6 -2
  2. package/accordion/accordion-tokens.scss +3 -0
  3. package/accordion/{accordion-trigger.component.scss → accordion-trigger.scss} +10 -0
  4. package/accordion/accordion.scss +71 -0
  5. package/accordion/index.d.ts +264 -121
  6. package/actions-panel/index.d.ts +25 -13
  7. package/alert/_alert-theme.scss +14 -0
  8. package/alert/alert.component.scss +24 -13
  9. package/alert/index.d.ts +63 -29
  10. package/app-switcher/app-switcher-dropdown-app.scss +7 -5
  11. package/app-switcher/app-switcher-dropdown-site.scss +6 -4
  12. package/app-switcher/index.d.ts +41 -4
  13. package/app-switcher/kbq-app-switcher-list-item.scss +6 -8
  14. package/autocomplete/autocomplete.scss +2 -1
  15. package/autocomplete/index.d.ts +58 -37
  16. package/badge/index.d.ts +2 -3
  17. package/breadcrumbs/index.d.ts +1 -1
  18. package/button/index.d.ts +2 -2
  19. package/button-toggle/button-toggle-tokens.scss +2 -0
  20. package/button-toggle/button-toggle.scss +9 -0
  21. package/button-toggle/index.d.ts +5 -0
  22. package/checkbox/index.d.ts +33 -29
  23. package/clamped-text/index.d.ts +3 -2
  24. package/code-block/index.d.ts +24 -19
  25. package/content-panel/index.d.ts +1 -1
  26. package/core/index.d.ts +1217 -186
  27. package/core/option/_action-container-mixins.scss +28 -0
  28. package/core/option/_option-theme.scss +24 -0
  29. package/core/option/action.scss +7 -0
  30. package/core/styles/_core.scss +2 -0
  31. package/core/styles/_koobiq-theme.scss +2 -0
  32. package/core/styles/_tokens.scss +1 -0
  33. package/core/styles/common/_animation.scss +31 -24
  34. package/core/styles/common/_connected-overlay.scss +39 -0
  35. package/core/styles/common/_select.scss +19 -2
  36. package/core/styles/common/_tokens.scss +0 -9
  37. package/core/styles/theming/_index.scss +0 -1
  38. package/core/styles/theming/_theming.scss +34 -5
  39. package/datepicker/index.d.ts +46 -15
  40. package/dl/dl.scss +26 -0
  41. package/dl/index.d.ts +8 -1
  42. package/dropdown/_dropdown-theme.scss +28 -2
  43. package/dropdown/dropdown-item.scss +29 -0
  44. package/dropdown/dropdown-tokens.scss +2 -1
  45. package/dropdown/dropdown.scss +16 -1
  46. package/dropdown/index.d.ts +331 -17
  47. package/dynamic-translation/index.d.ts +1 -1
  48. package/fesm2022/koobiq-components-accordion.mjs +480 -317
  49. package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
  50. package/fesm2022/koobiq-components-actions-panel.mjs +57 -46
  51. package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
  52. package/fesm2022/koobiq-components-alert.mjs +98 -58
  53. package/fesm2022/koobiq-components-alert.mjs.map +1 -1
  54. package/fesm2022/koobiq-components-app-switcher.mjs +233 -38
  55. package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
  56. package/fesm2022/koobiq-components-autocomplete.mjs +89 -52
  57. package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
  58. package/fesm2022/koobiq-components-badge.mjs +18 -17
  59. package/fesm2022/koobiq-components-badge.mjs.map +1 -1
  60. package/fesm2022/koobiq-components-breadcrumbs.mjs +25 -25
  61. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  62. package/fesm2022/koobiq-components-button-toggle.mjs +17 -12
  63. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  64. package/fesm2022/koobiq-components-button.mjs +25 -25
  65. package/fesm2022/koobiq-components-checkbox.mjs +69 -92
  66. package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
  67. package/fesm2022/koobiq-components-clamped-text.mjs +18 -13
  68. package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -1
  69. package/fesm2022/koobiq-components-code-block.mjs +56 -69
  70. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  71. package/fesm2022/koobiq-components-content-panel.mjs +29 -29
  72. package/fesm2022/koobiq-components-core.mjs +2485 -735
  73. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  74. package/fesm2022/koobiq-components-datepicker.mjs +168 -126
  75. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  76. package/fesm2022/koobiq-components-divider.mjs +7 -7
  77. package/fesm2022/koobiq-components-dl.mjs +23 -15
  78. package/fesm2022/koobiq-components-dl.mjs.map +1 -1
  79. package/fesm2022/koobiq-components-dropdown.mjs +814 -136
  80. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  81. package/fesm2022/koobiq-components-dynamic-translation.mjs +13 -13
  82. package/fesm2022/koobiq-components-ellipsis-center.mjs +7 -7
  83. package/fesm2022/koobiq-components-empty-state.mjs +19 -19
  84. package/fesm2022/koobiq-components-file-upload.mjs +74 -42
  85. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  86. package/fesm2022/koobiq-components-filter-bar.mjs +783 -199
  87. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  88. package/fesm2022/koobiq-components-flag.mjs +7 -7
  89. package/fesm2022/koobiq-components-form-field.mjs +350 -162
  90. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  91. package/fesm2022/koobiq-components-icon.mjs +52 -25
  92. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  93. package/fesm2022/koobiq-components-inline-edit.mjs +175 -28
  94. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
  95. package/fesm2022/koobiq-components-input.mjs +41 -24
  96. package/fesm2022/koobiq-components-input.mjs.map +1 -1
  97. package/fesm2022/koobiq-components-link.mjs +8 -8
  98. package/fesm2022/koobiq-components-list.mjs +657 -143
  99. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  100. package/fesm2022/koobiq-components-loader-overlay.mjs +16 -16
  101. package/fesm2022/koobiq-components-markdown.mjs +14 -11
  102. package/fesm2022/koobiq-components-markdown.mjs.map +1 -1
  103. package/fesm2022/koobiq-components-modal.mjs +59 -35
  104. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  105. package/fesm2022/koobiq-components-navbar.mjs +177 -67
  106. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  107. package/fesm2022/koobiq-components-notification-center.mjs +40 -24
  108. package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
  109. package/fesm2022/koobiq-components-overflow-items.mjs +16 -17
  110. package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
  111. package/fesm2022/koobiq-components-popover.mjs +31 -21
  112. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  113. package/fesm2022/koobiq-components-progress-bar.mjs +13 -13
  114. package/fesm2022/koobiq-components-progress-spinner.mjs +13 -13
  115. package/fesm2022/koobiq-components-radio.mjs +10 -10
  116. package/fesm2022/koobiq-components-resizer.mjs +33 -14
  117. package/fesm2022/koobiq-components-resizer.mjs.map +1 -1
  118. package/fesm2022/koobiq-components-scrollbar.mjs +10 -10
  119. package/fesm2022/koobiq-components-search-expandable.mjs +49 -14
  120. package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
  121. package/fesm2022/koobiq-components-select.mjs +450 -146
  122. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  123. package/fesm2022/koobiq-components-sidebar.mjs +14 -14
  124. package/fesm2022/koobiq-components-sidepanel.mjs +26 -26
  125. package/fesm2022/koobiq-components-skeleton.mjs +10 -10
  126. package/fesm2022/koobiq-components-split-button.mjs +10 -17
  127. package/fesm2022/koobiq-components-split-button.mjs.map +1 -1
  128. package/fesm2022/koobiq-components-splitter.mjs +17 -17
  129. package/fesm2022/koobiq-components-table.mjs +15 -13
  130. package/fesm2022/koobiq-components-table.mjs.map +1 -1
  131. package/fesm2022/koobiq-components-tabs.mjs +80 -68
  132. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  133. package/fesm2022/koobiq-components-tags.mjs +283 -122
  134. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  135. package/fesm2022/koobiq-components-textarea.mjs +13 -8
  136. package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
  137. package/fesm2022/koobiq-components-time-range.mjs +29 -24
  138. package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
  139. package/fesm2022/koobiq-components-timepicker.mjs +61 -30
  140. package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
  141. package/fesm2022/koobiq-components-timezone.mjs +77 -42
  142. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  143. package/fesm2022/koobiq-components-title.mjs +7 -7
  144. package/fesm2022/koobiq-components-toast.mjs +51 -26
  145. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  146. package/fesm2022/koobiq-components-toggle.mjs +72 -64
  147. package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
  148. package/fesm2022/koobiq-components-tooltip.mjs +219 -28
  149. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  150. package/fesm2022/koobiq-components-top-bar.mjs +13 -13
  151. package/fesm2022/koobiq-components-tree-select.mjs +222 -80
  152. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  153. package/fesm2022/koobiq-components-tree.mjs +302 -81
  154. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  155. package/fesm2022/koobiq-components-username.mjs +27 -27
  156. package/file-upload/index.d.ts +25 -6
  157. package/file-upload/multiple-file-upload.component.scss +14 -0
  158. package/filter-bar/_filter-bar-theme.scss +0 -10
  159. package/filter-bar/filter-bar-tokens.scss +3 -0
  160. package/filter-bar/filters.scss +3 -2
  161. package/filter-bar/index.d.ts +281 -9
  162. package/filter-bar/pipes/base-pipe.scss +0 -11
  163. package/filter-bar/pipes/pipe-input.scss +10 -0
  164. package/filter-bar/pipes/pipe-multi-tree-select.scss +0 -6
  165. package/filter-bar/pipes/pipe-multiselect.scss +0 -6
  166. package/filter-bar/pipes/pipe-tree-select.scss +0 -6
  167. package/form-field/_form-field-theme.scss +76 -20
  168. package/form-field/fieldset.scss +10 -0
  169. package/form-field/form-field-tokens.scss +15 -1
  170. package/form-field/form-field.scss +15 -19
  171. package/form-field/index.d.ts +147 -65
  172. package/icon/icon-button.scss +3 -1
  173. package/icon/index.d.ts +45 -7
  174. package/inline-edit/index.d.ts +57 -4
  175. package/inline-edit/inline-edit.scss +10 -0
  176. package/input/index.d.ts +17 -2
  177. package/list/_list-theme.scss +42 -10
  178. package/list/index.d.ts +326 -79
  179. package/list/list-tokens.scss +43 -8
  180. package/list/list.scss +186 -12
  181. package/markdown/index.d.ts +1 -1
  182. package/modal/index.d.ts +21 -4
  183. package/modal/modal-tokens.scss +1 -1
  184. package/navbar/_navbar-item_vertical.scss +7 -5
  185. package/navbar/index.d.ts +54 -5
  186. package/navbar/navbar-brand.scss +23 -7
  187. package/navbar/vertical-navbar.scss +6 -0
  188. package/notification-center/index.d.ts +2 -1
  189. package/notification-center/notification-item.scss +6 -0
  190. package/package.json +3 -6
  191. package/popover/index.d.ts +2 -2
  192. package/prebuilt-themes/dark-theme.css +1 -1
  193. package/prebuilt-themes/light-theme.css +1 -1
  194. package/prebuilt-themes/theme.css +1 -1
  195. package/resizer/index.d.ts +12 -0
  196. package/schematics/collection.json +10 -0
  197. package/schematics/migrations/alert-signals/README.md +64 -0
  198. package/schematics/migrations/alert-signals/data.js +70 -0
  199. package/schematics/migrations/alert-signals/index.js +350 -0
  200. package/schematics/migrations/alert-signals/schema.json +20 -0
  201. package/schematics/migrations/autocomplete-panel-width-auto/README.md +68 -0
  202. package/schematics/migrations/autocomplete-panel-width-auto/index.js +70 -0
  203. package/schematics/migrations/autocomplete-panel-width-auto/schema.json +15 -0
  204. package/schematics/migrations/deprecated-icons/README.md +29 -4
  205. package/schematics/migrations/deprecated-icons/data.js +7 -0
  206. package/schematics/migrations/deprecated-icons/index.js +62 -35
  207. package/schematics/migrations/filter-bar-signals/README.md +1 -1
  208. package/schematics/migrations/new-icons-pack/README.md +37 -2
  209. package/schematics/migrations/new-icons-pack/data.js +8 -0
  210. package/schematics/migrations/new-icons-pack/index.js +144 -53
  211. package/schematics/migrations.json +11 -1
  212. package/schematics/ng-add/index.js +3 -3
  213. package/schematics/utils/angular-parsing.js +41 -14
  214. package/schematics/utils/ast.js +31 -0
  215. package/schematics/utils/icon-migration.js +530 -0
  216. package/schematics/utils/typescript.js +44 -0
  217. package/scrollbar/index.d.ts +1 -1
  218. package/search-expandable/index.d.ts +3 -0
  219. package/select/index.d.ts +212 -40
  220. package/select/select-tokens.scss +0 -1
  221. package/select/select.scss +0 -2
  222. package/splitter/index.d.ts +1 -1
  223. package/table/_table-theme.scss +4 -0
  224. package/table/index.d.ts +2 -1
  225. package/table/table.scss +8 -0
  226. package/tabs/_tabs-common.scss +60 -31
  227. package/tabs/_tabs-theme.scss +12 -0
  228. package/tabs/index.d.ts +2 -2
  229. package/tabs/tab-header.scss +14 -0
  230. package/tabs/tab-nav-bar.scss +4 -0
  231. package/tabs/tabs-tokens.scss +1 -0
  232. package/tags/index.d.ts +128 -29
  233. package/textarea/index.d.ts +5 -0
  234. package/time-range/index.d.ts +1 -1
  235. package/timepicker/index.d.ts +4 -0
  236. package/timezone/index.d.ts +10 -8
  237. package/toast/index.d.ts +26 -3
  238. package/toggle/index.d.ts +34 -14
  239. package/tooltip/index.d.ts +119 -7
  240. package/tree/_tree-theme.scss +25 -5
  241. package/tree/index.d.ts +71 -3
  242. package/tree/tree-option.scss +2 -8
  243. package/tree-select/_tree-select-theme.scss +22 -0
  244. package/tree-select/index.d.ts +127 -36
  245. package/accordion/accordion.component.scss +0 -50
  246. package/core/styles/_tokens.kbq.import.scss +0 -4
  247. package/core/styles/theming/_components-theming.scss +0 -1927
  248. package/filter-bar/pipes/pipe-select.scss +0 -5
  249. package/overflow-items/overflow-items.scss +0 -20
package/select/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { AfterViewInit, OnDestroy, AfterContentInit, OnInit, DoCheck, ElementRef, DestroyRef, QueryList, TemplateRef, EventEmitter, InjectionToken, Provider } from '@angular/core';
2
+ import { AfterViewInit, OnDestroy, InjectionToken, AfterContentInit, OnInit, DoCheck, ElementRef, DestroyRef, QueryList, TemplateRef, EventEmitter, Provider } from '@angular/core';
3
3
  import * as i5 from '@koobiq/components/tooltip';
4
4
  import { KbqTooltipTrigger } from '@koobiq/components/tooltip';
5
5
  import * as _angular_cdk_overlay_module_d from '@angular/cdk/overlay-module.d';
@@ -9,7 +9,7 @@ import { ConnectedPosition, CdkConnectedOverlay, CdkOverlayOrigin } from '@angul
9
9
  import { CdkVirtualForOf, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
10
10
  import { ControlValueAccessor, NgForm, FormGroupDirective, NgControl } from '@angular/forms';
11
11
  import * as i2 from '@koobiq/components/core';
12
- import { KbqAbstractSelect, CanUpdateErrorState, ErrorStateMatcher, KbqLocaleService, KbqOptionBase, ActiveDescendantKeyManager, KbqOption, KbqSelectTrigger, KbqSelectMatcher, KbqOptgroup, KbqSelectSearch, KbqSelectSearchEmptyResult, KbqOptionSelectionChange, KbqSelectAllEvent, KbqVirtualOption, KbqComponentColors } from '@koobiq/components/core';
12
+ import { KbqPanelWidth, KbqPanelMinWidth, KbqPanelMaxWidth, KbqPanelMaxHeight, KbqAbstractSelect, CanUpdateErrorState, KbqSiblingPopup, ErrorStateMatcher, KbqLocaleService, KbqOptionBase, ActiveDescendantKeyManager, KbqOption, KbqSelectTrigger, KbqSelectMatcher, KbqOptgroup, KbqSelectSearch, KbqSelectSearchEmptyResult, KbqOptionSelectionChange, KbqSelectAllEvent, KbqVirtualOption, KbqPseudoCheckboxState, KbqComponentColors } from '@koobiq/components/core';
13
13
  import * as i11 from '@koobiq/components/form-field';
14
14
  import { KbqFormFieldControl, KbqCleaner } from '@koobiq/components/form-field';
15
15
  import * as i4 from '@koobiq/components/tags';
@@ -75,19 +75,32 @@ declare class KbqSelectChange {
75
75
  value: any;
76
76
  constructor(source: KbqSelect, value: any);
77
77
  }
78
- /** Select panel width type. */
79
- type KbqSelectPanelWidth = 'auto' | number | null;
78
+ /**
79
+ * Select panel width type.
80
+ * @deprecated Use `KbqPanelWidth` from `@koobiq/components/core` instead.
81
+ */
82
+ type KbqSelectPanelWidth = KbqPanelWidth;
80
83
  /** Options for the `kbq-select` that can be configured using the `KBQ_SELECT_OPTIONS` injection token. */
81
84
  type KbqSelectOptions = Partial<{
82
85
  /**
83
86
  * Width of the panel. If set to `auto`, the panel will match the trigger width.
84
87
  * If set to null or an empty string, the panel will grow to match the longest option's text.
85
88
  */
86
- panelWidth: KbqSelectPanelWidth;
89
+ panelWidth: KbqPanelWidth;
87
90
  /**
88
91
  * Minimum width of the panel. If minWidth is larger than window width or property set to null, it will be ignored.
89
92
  */
90
- panelMinWidth: Exclude<KbqSelectPanelWidth, 'auto'>;
93
+ panelMinWidth: KbqPanelMinWidth;
94
+ /**
95
+ * Maximum width of the panel. Caps growth by content only — it never overrides the trigger width or an
96
+ * explicit `panelWidth`. If null, the `--kbq-panel-size-width-max` token applies.
97
+ */
98
+ panelMaxWidth: KbqPanelMaxWidth;
99
+ /**
100
+ * Maximum height of the panel's scrollable option list. Does not include the search field or the
101
+ * footer. If null, the `--kbq-select-panel-size-max-height` token applies.
102
+ */
103
+ panelMaxHeight: KbqPanelMaxHeight;
91
104
  /**
92
105
  * Whether to enable hiding search by default if options is less than minimum.
93
106
  *
@@ -103,11 +116,21 @@ declare const KBQ_SELECT_OPTIONS: InjectionToken<Partial<{
103
116
  * Width of the panel. If set to `auto`, the panel will match the trigger width.
104
117
  * If set to null or an empty string, the panel will grow to match the longest option's text.
105
118
  */
106
- panelWidth: KbqSelectPanelWidth;
119
+ panelWidth: KbqPanelWidth;
107
120
  /**
108
121
  * Minimum width of the panel. If minWidth is larger than window width or property set to null, it will be ignored.
109
122
  */
110
- panelMinWidth: Exclude<KbqSelectPanelWidth, "auto">;
123
+ panelMinWidth: KbqPanelMinWidth;
124
+ /**
125
+ * Maximum width of the panel. Caps growth by content only — it never overrides the trigger width or an
126
+ * explicit `panelWidth`. If null, the `--kbq-panel-size-width-max` token applies.
127
+ */
128
+ panelMaxWidth: KbqPanelMaxWidth;
129
+ /**
130
+ * Maximum height of the panel's scrollable option list. Does not include the search field or the
131
+ * footer. If null, the `--kbq-select-panel-size-max-height` token applies.
132
+ */
133
+ panelMaxHeight: KbqPanelMaxHeight;
111
134
  /**
112
135
  * Whether to enable hiding search by default if options is less than minimum.
113
136
  *
@@ -123,7 +146,7 @@ declare const kbqSelectOptionsProvider: (options: KbqSelectOptions) => Provider;
123
146
  declare const delayBeforeDisplayingResultWithoutOptions = 101;
124
147
  /** Minimum time in milliseconds to display the loading state. */
125
148
  declare const minimumTimeToDisplayLoading = 300;
126
- declare class KbqSelect extends KbqAbstractSelect implements AfterContentInit, OnDestroy, OnInit, DoCheck, ControlValueAccessor, KbqFormFieldControl<any>, CanUpdateErrorState {
149
+ declare class KbqSelect extends KbqAbstractSelect implements AfterContentInit, OnDestroy, OnInit, DoCheck, ControlValueAccessor, KbqFormFieldControl<any>, CanUpdateErrorState, KbqSiblingPopup {
127
150
  private readonly _changeDetectorRef;
128
151
  private readonly _ngZone;
129
152
  private readonly _renderer;
@@ -145,11 +168,21 @@ declare class KbqSelect extends KbqAbstractSelect implements AfterContentInit, O
145
168
  * Width of the panel. If set to `auto`, the panel will match the trigger width.
146
169
  * If set to null or an empty string, the panel will grow to match the longest option's text.
147
170
  */
148
- panelWidth: KbqSelectPanelWidth;
171
+ panelWidth: KbqPanelWidth;
149
172
  /**
150
173
  * Minimum width of the panel. If minWidth is larger than window width or property set to null, it will be ignored.
151
174
  */
152
- panelMinWidth: Exclude<KbqSelectPanelWidth, "auto">;
175
+ panelMinWidth: KbqPanelMinWidth;
176
+ /**
177
+ * Maximum width of the panel. Caps growth by content only — it never overrides the trigger width or an
178
+ * explicit `panelWidth`. If null, the `--kbq-panel-size-width-max` token applies.
179
+ */
180
+ panelMaxWidth: KbqPanelMaxWidth;
181
+ /**
182
+ * Maximum height of the panel's scrollable option list. Does not include the search field or the
183
+ * footer. If null, the `--kbq-select-panel-size-max-height` token applies.
184
+ */
185
+ panelMaxHeight: KbqPanelMaxHeight;
153
186
  /**
154
187
  * Whether to enable hiding search by default if options is less than minimum.
155
188
  *
@@ -159,7 +192,6 @@ declare class KbqSelect extends KbqAbstractSelect implements AfterContentInit, O
159
192
  */
160
193
  searchMinOptionsThreshold: "auto" | number;
161
194
  }> | null;
162
- private readonly window;
163
195
  /** Whether the component is in an error state. */
164
196
  errorState: boolean;
165
197
  /**
@@ -179,6 +211,12 @@ declare class KbqSelect extends KbqAbstractSelect implements AfterContentInit, O
179
211
  selectionModel: SelectionModel<KbqOptionBase>;
180
212
  /** Previously selected options before the current selection was made. */
181
213
  previousSelectionModelSelected: KbqOptionBase[];
214
+ /**
215
+ * Detached copies of the selected options, captured while the option was still rendered.
216
+ * `cdk-virtual-scroll` recycles option views, so a `KbqOption` kept in `selectionModel` can
217
+ * silently start carrying another item's value and label — the copy preserves the original ones.
218
+ */
219
+ private readonly selectedOptionCopies;
182
220
  /** Manages keyboard events for options in the panel. */
183
221
  keyManager: ActiveDescendantKeyManager<KbqOption>;
184
222
  /** The value of the select panel's transform-origin property for animations. */
@@ -188,16 +226,25 @@ declare class KbqSelect extends KbqAbstractSelect implements AfterContentInit, O
188
226
  /** Strategy that will be used to handle scrolling while the select panel is open. */
189
227
  scrollStrategy: _angular_cdk_overlay_module_d.ScrollStrategy;
190
228
  /**
191
- * The y-offset of the overlay panel in relation to the trigger's top start corner.
192
- * This must be adjusted to align the selected option text over the trigger text
193
- * when the panel opens. Will change based on the y-position of the selected option.
229
+ * The y-offset of the overlay panel in relation to the trigger.
230
+ *
231
+ * @deprecated noop. The trigger↔panel gap is now controlled by the `--kbq-connected-overlay-gap` CSS
232
+ * variable (transparent padding inside the pane via the `kbq-connected-overlay_below/_above` panel
233
+ * classes), not by a physical overlay offset — so setting this has no effect. Will be removed in 21.0.0.
194
234
  */
195
235
  offsetY: number;
196
236
  /**
197
- * This position config ensures that the top "start" corner of the overlay
198
- * is aligned with the top "start" of the origin by default (overlapping
199
- * the trigger completely). If the panel cannot fit below the trigger, it
200
- * will fall back to a position above the trigger.
237
+ * Minimum space to keep between the overlay and the viewport edge.
238
+ * At least `defaultOffsetY` so CDK's fit check which runs before the `kbq-connected-overlay_below/_above`
239
+ * gap padding is applied to the pane stays conservative enough to absorb that padding instead of
240
+ * letting the panel overflow the viewport by the size of the gap.
241
+ */
242
+ protected readonly viewportMargin: number;
243
+ /**
244
+ * Opens the panel below the trigger, falling back to above it when it does not fit.
245
+ *
246
+ * A third position is appended at runtime by `updatePanelAnchor`: a multiline trigger that has grown
247
+ * taller than the panel gets it anchored to its first row and drawn over the rest of it.
201
248
  */
202
249
  positions: ConnectedPosition[];
203
250
  /**
@@ -208,6 +255,8 @@ declare class KbqSelect extends KbqAbstractSelect implements AfterContentInit, O
208
255
  readonly panel: _angular_core.Signal<ElementRef<any> | undefined>;
209
256
  /** Reference to the container element that holds the options. */
210
257
  readonly optionsContainer: _angular_core.Signal<ElementRef<any>>;
258
+ /** Reference to the built-in "select all" row, rendered only while `selectAll` is on. */
259
+ readonly selectAllOption: _angular_core.Signal<KbqOption | undefined>;
211
260
  /** Reference to the CDK connected overlay directive. */
212
261
  overlayDir: CdkConnectedOverlay;
213
262
  /** Reference to the optional footer element in the panel. */
@@ -224,10 +273,23 @@ declare class KbqSelect extends KbqAbstractSelect implements AfterContentInit, O
224
273
  readonly customMatcher: _angular_core.Signal<KbqSelectMatcher | undefined>;
225
274
  /** Custom template reference for rendering tag content. */
226
275
  readonly customTagTemplateRef: _angular_core.Signal<TemplateRef<any> | undefined>;
227
- /** Reference to the optional cleaner element for clearing selection. */
276
+ /**
277
+ * Reference to the optional cleaner element for clearing selection.
278
+ * @docs-private
279
+ */
228
280
  readonly cleaner: _angular_core.Signal<KbqCleaner | undefined>;
229
281
  /** All of the defined select options. */
230
282
  options: QueryList<KbqOption>;
283
+ /**
284
+ * Everything the key manager navigates: the built-in "select all" row first, then `options`.
285
+ *
286
+ * The row is rendered by the select's own template, so it never reaches the `options` content query.
287
+ * Kept as a separate list rather than folded into `options` because `options` is public API — the
288
+ * filter-bar pipes, `firstFiltered` and the tallies below all mean "the options the consumer
289
+ * projected", and a synthetic entry there would quietly corrupt every one of them.
290
+ * @docs-private
291
+ */
292
+ readonly navigableOptions: QueryList<KbqOption>;
231
293
  /** All of the defined groups of options. */
232
294
  readonly optionGroups: _angular_core.Signal<readonly KbqOptgroup[]>;
233
295
  /** Reference to the optional search component. */
@@ -236,6 +298,8 @@ declare class KbqSelect extends KbqAbstractSelect implements AfterContentInit, O
236
298
  readonly searchEmpty: _angular_core.Signal<KbqSelectSearchEmptyResult | undefined>;
237
299
  /** Template string for hidden items text. Supports {{ number }} placeholder. */
238
300
  hiddenItemsText: string;
301
+ /** Label of the "select all" row. Kept in step with the locale service. */
302
+ protected selectAllText: string;
239
303
  /** Determines whether preselected values are displayed. */
240
304
  readonly showPreselectedValues: _angular_core.InputSignal<boolean>;
241
305
  /**
@@ -274,7 +338,12 @@ declare class KbqSelect extends KbqAbstractSelect implements AfterContentInit, O
274
338
  private _searchMinOptionsThreshold;
275
339
  /** Combined stream of all of the child options' change events. */
276
340
  readonly optionSelectionChanges: Observable<KbqOptionSelectionChange>;
277
- /** Event emitted when the select panel has been toggled. Emits true when opened, false when closed. */
341
+ /**
342
+ * Event emitted when the select panel has been toggled. Emits true when opened, false when closed.
343
+ * Also serves as the `openedChange` member of the `KbqSiblingPopup` contract — a tooltip sharing
344
+ * this element's host reacts to it, so its emission timing (gated on `panelDoneAnimatingStream`, see
345
+ * `ngOnInit`) matters beyond this output's original consumers.
346
+ */
278
347
  readonly openedChange: EventEmitter<boolean>;
279
348
  /** Event emitted before the select panel starts opening. */
280
349
  readonly beforeOpened: _angular_core.OutputEmitterRef<void>;
@@ -354,6 +423,15 @@ declare class KbqSelect extends KbqAbstractSelect implements AfterContentInit, O
354
423
  readonly virtualOptionFactory: _angular_core.InputSignal<((value: any) => KbqVirtualOption) | undefined>;
355
424
  /** When `true`, a repeated Ctrl/Cmd+A deselects all options. Off by default (Ctrl+A only selects). */
356
425
  readonly selectAllToggle: _angular_core.InputSignalWithTransform<boolean, unknown>;
426
+ /**
427
+ * Whether to render the "select all" master checkbox above the options. Multiple selection only.
428
+ *
429
+ * The row acts on the options the user can actually toggle — rendered, enabled and selectable. Since
430
+ * search filtering removes options from the DOM, "select all" under an active query selects only the
431
+ * matches. Enabling it also makes Ctrl/Cmd + A a two-way toggle, so the shortcut and the checkbox
432
+ * never disagree (`selectAllToggle` is implied).
433
+ */
434
+ readonly selectAll: _angular_core.InputSignalWithTransform<boolean, unknown>;
357
435
  /**
358
436
  * Function for handling the Ctrl + A (select all) keyboard combination.
359
437
  * By default, the internal handler selects all options.
@@ -363,15 +441,37 @@ declare class KbqSelect extends KbqAbstractSelect implements AfterContentInit, O
363
441
  get selectAllHandler(): (event: KeyboardEvent, select: KbqSelect) => void;
364
442
  set selectAllHandler(fn: (event: KeyboardEvent, select: KbqSelect) => void);
365
443
  /**
366
- * Width of the panel. If set to `auto`, the panel will match the trigger width.
367
- * If set to null or an empty string, the panel will grow to match the longest option's text.
444
+ * Width of the panel. If set to `auto`, the panel will match the trigger width, but will never be
445
+ * narrower than `panelMinWidth`. If set to null or an empty string, the panel will grow to match the
446
+ * longest option's text. Any other value is used as an exact width, and `panelMinWidth` is not applied.
368
447
  */
369
- panelWidth: KbqSelectPanelWidth;
448
+ readonly panelWidth: _angular_core.InputSignal<KbqPanelWidth>;
370
449
  /**
371
450
  * Minimum width of the panel in pixels.
372
451
  * If minWidth is larger than window width, it will be ignored.
373
452
  */
374
- panelMinWidth: Exclude<KbqSelectPanelWidth, 'auto'>;
453
+ readonly panelMinWidth: _angular_core.InputSignalWithTransform<KbqPanelMinWidth, unknown>;
454
+ /**
455
+ * Maximum width of the panel in pixels. Caps how far the panel grows with its content — it never makes
456
+ * the panel narrower than the trigger, and never clamps an explicit `panelWidth`.
457
+ * When null, the `--kbq-panel-size-width-max` token applies.
458
+ */
459
+ readonly panelMaxWidth: _angular_core.InputSignalWithTransform<KbqPanelMaxWidth, unknown>;
460
+ /**
461
+ * Maximum height of the panel's scrollable option list, in pixels. Applied as the
462
+ * `--kbq-select-panel-size-max-height` custom property on the panel, so it also drives the pinned height
463
+ * of a `cdk-virtual-scroll-viewport` — with virtual scroll the value is an exact height, not a cap.
464
+ *
465
+ * The search field and the footer sit outside the scrollable area and add to the panel's total height.
466
+ * When null, the token default (256px) applies.
467
+ */
468
+ readonly panelMaxHeight: _angular_core.InputSignalWithTransform<KbqPanelMaxHeight, unknown>;
469
+ /**
470
+ * `panelMaxHeight` rendered as a CSS length for the `--kbq-select-panel-size-max-height` token.
471
+ * A non-finite value (e.g. `null`) leaves the stylesheet default in place.
472
+ * @docs-private
473
+ */
474
+ protected readonly panelMaxHeightToken: _angular_core.Signal<string | null>;
375
475
  /** Value of the select control. Can be a single value or array of values for multiple selection. */
376
476
  get value(): any;
377
477
  set value(newValue: any);
@@ -402,12 +502,40 @@ declare class KbqSelect extends KbqAbstractSelect implements AfterContentInit, O
402
502
  set focused(value: boolean);
403
503
  /** Whether the select panel is currently open. */
404
504
  panelOpen: boolean;
505
+ /** Whether the overlay panel is currently on screen. Part of the `KbqSiblingPopup` contract. */
506
+ get isAttached(): boolean;
405
507
  /** Whether virtual scrolling is enabled for the options panel. */
406
508
  withVirtualScroll: boolean;
407
509
  private _focused;
408
510
  /** Whether the search returned no results. */
409
511
  get isEmptySearchResult(): boolean;
410
- /** Whether the cleaner (clear button) should be shown. */
512
+ /**
513
+ * Whether the "select all" row is currently rendered.
514
+ *
515
+ * Unsupported whenever a selected value can exist as a synthetic `KbqVirtualOption` instead of a
516
+ * real, projected `KbqOption` (see `selectValue`) — under `withVirtualScroll` or
517
+ * `showPreselectedValues`. `selectAllTargets` can only see `this.options`, the currently-rendered
518
+ * `KbqOption`s, so a checkbox built on top of it would misreport "everything selected" after only
519
+ * touching the values that happen to have a rendered option.
520
+ */
521
+ protected get showSelectAll(): boolean;
522
+ /** Whether every option "select all" can act on is selected. */
523
+ get allOptionsSelected(): boolean;
524
+ /** State of the "select all" master checkbox. */
525
+ get selectAllState(): KbqPseudoCheckboxState;
526
+ /**
527
+ * Options "select all" acts on, and the ones its checkbox state is derived from.
528
+ *
529
+ * `KbqOption.select()` and `deselect()` do not consult `disabled` or `selectable()`, so the
530
+ * filtering has to happen here rather than being left to the options themselves.
531
+ */
532
+ private get selectAllTargets();
533
+ /** Adapter shared by the master checkbox and the Ctrl/Cmd + A handler, so the two cannot drift apart. */
534
+ private get selectAllAdapter();
535
+ /**
536
+ * Whether the cleaner (clear button) should be shown.
537
+ * @docs-private
538
+ */
411
539
  get canShowCleaner(): boolean;
412
540
  /** Returns the currently selected option(s). Single value or array for multiple selection. */
413
541
  get selected(): KbqOptionBase | KbqOptionBase[];
@@ -427,20 +555,18 @@ declare class KbqSelect extends KbqAbstractSelect implements AfterContentInit, O
427
555
  get colorForState(): KbqComponentColors;
428
556
  /** Whether multiple choice is enabled. True if multiple or multiline mode is active. */
429
557
  get multiSelection(): boolean;
558
+ /** Whether a "select all" batch is running, so the per-option changes propagate only once. */
559
+ private selectAllInProgress;
430
560
  /** Subscription to the close event of the overlay. */
431
561
  private closeSubscription;
432
562
  /** Subscription to the options panel scroll event used by `scrolledToBottom`. */
433
563
  private scrollSubscription;
434
- /** The scroll position of the overlay panel, calculated to center the selected option. */
564
+ /** The scroll offset the panel is restored to when it attaches — the list always opens at the top. */
435
565
  private scrollTop;
436
566
  /** Unique id for this input. Auto-incremented for each instance. */
437
567
  private readonly uid;
438
568
  /** Subject that emits when the component visibility changes. */
439
569
  private visibleChanges;
440
- /** Width of the overlay panel in pixels or as a string. */
441
- protected overlayWidth: string | number;
442
- /** Minimum width of the overlay panel in pixels. */
443
- protected overlayMinWidth: string | number;
444
570
  /** Origin element for the overlay panel positioning. */
445
571
  protected overlayOrigin?: CdkOverlayOrigin | ElementRef;
446
572
  /** Flag indicating if the dropdown class has been added to the overlay container. */
@@ -464,11 +590,24 @@ declare class KbqSelect extends KbqAbstractSelect implements AfterContentInit, O
464
590
  * @returns Formatted string with the number of hidden items.
465
591
  */
466
592
  hiddenItemsTextFormatter(hiddenItemsText: string, hiddenItems: number): string;
593
+ /**
594
+ * Selects every option "select all" can act on, or deselects them all when they are already selected.
595
+ *
596
+ * Backs both the master checkbox and Ctrl/Cmd + A while `selectAll` is on. Emits a single
597
+ * `selectionChange` for the whole batch, followed by `onSelectAll`.
598
+ */
599
+ protected toggleSelectAll(): void;
600
+ /**
601
+ * Clears the current selection.
602
+ * @docs-private
603
+ */
604
+ clear(): void;
467
605
  /**
468
606
  * Clears the current selection.
469
- * @param $event Mouse event to prevent default behavior.
607
+ * @deprecated Activate the projected `KbqCleaner` instead.
608
+ * @docs-private
470
609
  */
471
- clearValue($event: any): void;
610
+ clearValue(event: Event): void;
472
611
  /** `View -> model callback called when value changes` */
473
612
  onChange: (value: any) => void;
474
613
  /** `View -> model callback called when select has been touched` */
@@ -545,6 +684,14 @@ declare class KbqSelect extends KbqAbstractSelect implements AfterContentInit, O
545
684
  * Sets up position change subscription and closing actions.
546
685
  */
547
686
  onAttached(): void;
687
+ /** Element the overlay is positioned and sized against. */
688
+ protected getOverlayOriginElement(): HTMLElement | undefined;
689
+ protected isPanelOpen(): boolean;
690
+ /**
691
+ * A `cdk-virtual-scroll-viewport` pins its height to `--kbq-select-panel-size-max-height` in both
692
+ * directions, so its `scrollHeight` follows the cap rather than the content.
693
+ */
694
+ protected isListHeightPinnedToCap(): boolean;
548
695
  /** Returns the theme to be used on the panel based on parent form field color. */
549
696
  getPanelTheme(): string;
550
697
  /** Returns the full set of classes for the panel: base class, theme and custom `panelClass`. */
@@ -610,6 +757,12 @@ declare class KbqSelect extends KbqAbstractSelect implements AfterContentInit, O
610
757
  private getTotalItemsWidthInMatcher;
611
758
  /**
612
759
  * Calculates the width of a single item including margins.
760
+ *
761
+ * The elements measured here are `kbq-tag`s, which are `border-box` and carry horizontal
762
+ * padding. `getComputedStyle().width` resolves to the used content-box width whatever
763
+ * `box-sizing` says, so it dropped that padding from every tag and the matcher believed more
764
+ * tags fit than actually do. `getBoundingClientRect()` is always the border box — the same fix
765
+ * `kbqGetPanelWidthOrigin()` carries for the dropdown trigger.
613
766
  * @param element The DOM element to measure.
614
767
  * @returns Total width including margins and gap.
615
768
  */
@@ -623,6 +776,17 @@ declare class KbqSelect extends KbqAbstractSelect implements AfterContentInit, O
623
776
  * Defers execution to avoid change detection errors.
624
777
  */
625
778
  private initializeSelection;
779
+ /** Whether the key manager has no active item, or its active item is missing from the current options list. */
780
+ private isActiveItemStale;
781
+ /**
782
+ * Rebuilds the key manager's list — the "select all" row first, then the projected options — and
783
+ * re-applies the panel's initial highlight whenever the row is what just joined that list.
784
+ *
785
+ * Both callers have to be able to do the second part: whichever of the view query and
786
+ * `options.changes` runs first is the one that brings the row in, and the other then sees a list
787
+ * it is already part of.
788
+ */
789
+ private syncNavigableOptions;
626
790
  /**
627
791
  * Sets the selected option based on a value.
628
792
  * If no option can be found with the designated value, the select trigger is cleared.
@@ -636,16 +800,28 @@ declare class KbqSelect extends KbqAbstractSelect implements AfterContentInit, O
636
800
  */
637
801
  private getCorrespondOption;
638
802
  /**
639
- * Finds and selects and option based on its value.
640
- * @returns Option that has the corresponding value.
803
+ * Finds and selects an option based on its value.
804
+ * @returns Option that has the corresponding value, when it is currently rendered.
641
805
  */
642
806
  private selectValue;
807
+ /**
808
+ * Builds a detached option for a value whose `KbqOption` is not rendered, or returns `undefined`
809
+ * when the value cannot be resolved and the consumer gave no way to render it.
810
+ */
811
+ private createVirtualOptionForValue;
643
812
  /**
644
813
  * Single entry point for building a `KbqVirtualOption` from a raw value.
645
814
  * Uses the consumer-provided `virtualOptionFactory` when set, otherwise
646
815
  * wraps the raw value with the select's current `disabled` state.
647
816
  */
648
817
  private createVirtualOption;
818
+ /**
819
+ * Remembers the value and the label of a selected option while its view is still live, so that the
820
+ * selection survives the view being recycled by `cdk-virtual-scroll` for another item.
821
+ */
822
+ private captureSelectedOptionCopy;
823
+ /** Copy of `option` when its view has been recycled for another item, otherwise `option` itself. */
824
+ private resolveSelectedOption;
649
825
  /** Sets up a key manager to listen to keyboard events on the overlay panel. */
650
826
  private initKeyManager;
651
827
  /** Drops current option subscriptions and IDs and resets from scratch. */
@@ -661,10 +837,7 @@ declare class KbqSelect extends KbqAbstractSelect implements AfterContentInit, O
661
837
  * the first item instead.
662
838
  */
663
839
  private highlightCorrectOption;
664
- /** Scrolls the active option into view. */
665
840
  private scrollActiveOptionIntoView;
666
- /** Gets how wide the overlay panel should be. */
667
- private getOverlayWidth;
668
841
  /** Comparison function to specify which option is displayed. Defaults to object equality. */
669
842
  private _compareWith;
670
843
  /** Function for handling the combination Ctrl + A (select all). By default, the internal handler is used. */
@@ -684,9 +857,8 @@ declare class KbqSelect extends KbqAbstractSelect implements AfterContentInit, O
684
857
  /** Removes the dropdown class from the overlay container when select closes. */
685
858
  private removeClassFromOverlayContainer;
686
859
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KbqSelect, never>;
687
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KbqSelect, "kbq-select", ["kbqSelect"], { "hiddenItemsText": { "alias": "hiddenItemsText"; "required": false; }; "showPreselectedValues": { "alias": "showPreselectedValues"; "required": false; "isSignal": true; }; "triggerValuesLimit": { "alias": "triggerValuesLimit"; "required": false; "isSignal": true; }; "panelClass": { "alias": "panelClass"; "required": false; "isSignal": true; }; "backdropClass": { "alias": "backdropClass"; "required": false; "isSignal": true; }; "errorStateMatcher": { "alias": "errorStateMatcher"; "required": false; }; "sortComparator": { "alias": "sortComparator"; "required": false; "isSignal": true; }; "multiline": { "alias": "multiline"; "required": false; "isSignal": true; }; "searchMinOptionsThreshold": { "alias": "searchMinOptionsThreshold"; "required": false; }; "scrolledToBottomOffset": { "alias": "scrolledToBottomOffset"; "required": false; "isSignal": true; }; "hasBackdrop": { "alias": "hasBackdrop"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "required": { "alias": "required"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "compareWith": { "alias": "compareWith"; "required": false; }; "virtualOptionFactory": { "alias": "virtualOptionFactory"; "required": false; "isSignal": true; }; "selectAllToggle": { "alias": "selectAllToggle"; "required": false; "isSignal": true; }; "selectAllHandler": { "alias": "selectAllHandler"; "required": false; }; "panelWidth": { "alias": "panelWidth"; "required": false; }; "panelMinWidth": { "alias": "panelMinWidth"; "required": false; }; "value": { "alias": "value"; "required": false; }; "id": { "alias": "id"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "hiddenItemsTextFormatter": { "alias": "hiddenItemsTextFormatter"; "required": false; }; }, { "openedChange": "openedChange"; "beforeOpened": "beforeOpened"; "openedStream": "opened"; "closedStream": "closed"; "selectionChange": "selectionChange"; "onSelectAll": "onSelectAll"; "valueChange": "valueChange"; "scrolledToBottom": "scrolledToBottom"; }, ["footer", "cdkVirtualForOf", "virtualScrollViewport", "customTrigger", "customMatcher", "customTagTemplateRef", "cleaner", "optionGroups", "search", "searchEmpty", "options"], ["kbq-select-matcher, [kbq-select-matcher]", "kbq-select-trigger, [kbq-select-trigger]", "kbq-cleaner", "[kbqSelectSearch]", "[kbq-select-search-empty-result]", "*", "kbq-select-footer,[kbq-select-footer]"], true, never>;
860
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KbqSelect, "kbq-select", ["kbqSelect"], { "hiddenItemsText": { "alias": "hiddenItemsText"; "required": false; }; "showPreselectedValues": { "alias": "showPreselectedValues"; "required": false; "isSignal": true; }; "triggerValuesLimit": { "alias": "triggerValuesLimit"; "required": false; "isSignal": true; }; "panelClass": { "alias": "panelClass"; "required": false; "isSignal": true; }; "backdropClass": { "alias": "backdropClass"; "required": false; "isSignal": true; }; "errorStateMatcher": { "alias": "errorStateMatcher"; "required": false; }; "sortComparator": { "alias": "sortComparator"; "required": false; "isSignal": true; }; "multiline": { "alias": "multiline"; "required": false; "isSignal": true; }; "searchMinOptionsThreshold": { "alias": "searchMinOptionsThreshold"; "required": false; }; "scrolledToBottomOffset": { "alias": "scrolledToBottomOffset"; "required": false; "isSignal": true; }; "hasBackdrop": { "alias": "hasBackdrop"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "required": { "alias": "required"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "compareWith": { "alias": "compareWith"; "required": false; }; "virtualOptionFactory": { "alias": "virtualOptionFactory"; "required": false; "isSignal": true; }; "selectAllToggle": { "alias": "selectAllToggle"; "required": false; "isSignal": true; }; "selectAll": { "alias": "selectAll"; "required": false; "isSignal": true; }; "selectAllHandler": { "alias": "selectAllHandler"; "required": false; }; "panelWidth": { "alias": "panelWidth"; "required": false; "isSignal": true; }; "panelMinWidth": { "alias": "panelMinWidth"; "required": false; "isSignal": true; }; "panelMaxWidth": { "alias": "panelMaxWidth"; "required": false; "isSignal": true; }; "panelMaxHeight": { "alias": "panelMaxHeight"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; }; "id": { "alias": "id"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "hiddenItemsTextFormatter": { "alias": "hiddenItemsTextFormatter"; "required": false; }; }, { "openedChange": "openedChange"; "beforeOpened": "beforeOpened"; "openedStream": "opened"; "closedStream": "closed"; "selectionChange": "selectionChange"; "onSelectAll": "onSelectAll"; "valueChange": "valueChange"; "scrolledToBottom": "scrolledToBottom"; }, ["footer", "cdkVirtualForOf", "virtualScrollViewport", "customTrigger", "customMatcher", "customTagTemplateRef", "cleaner", "optionGroups", "search", "searchEmpty", "options"], ["kbq-select-matcher, [kbq-select-matcher]", "kbq-select-trigger, [kbq-select-trigger]", "kbq-cleaner", "[kbqSelectSearch]", "[kbq-select-search-empty-result]", "*", "kbq-select-footer,[kbq-select-footer]"], true, never>;
688
861
  static ngAcceptInputType_multiple: unknown;
689
- static ngAcceptInputType_panelMinWidth: unknown;
690
862
  static ngAcceptInputType_tabIndex: unknown;
691
863
  static ngAcceptInputType_disabled: unknown;
692
864
  }
@@ -10,7 +10,6 @@
10
10
  --kbq-select-size-multiple-padding-vertical: var(--kbq-size-xxs);
11
11
  --kbq-select-size-multiple-content-gap: var(--kbq-size-xxs);
12
12
  --kbq-select-panel-size-border-radius: var(--kbq-size-border-radius);
13
- --kbq-select-panel-size-max-height: 256px;
14
13
  /* THEME TOKENS */
15
14
  --kbq-select-panel-dropdown-background: var(--kbq-background-card);
16
15
  --kbq-select-panel-dropdown-shadow: var(--kbq-shadow-popup);
@@ -19,8 +19,6 @@
19
19
  .kbq-select__content {
20
20
  @extend %kbq-select-content;
21
21
 
22
- box-sizing: initial;
23
-
24
22
  .kbq-option {
25
23
  @include item-active-area(var(--kbq-size-3xs));
26
24
  }
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { OnInit, AfterContentInit, OnDestroy, ElementRef, ChangeDetectorRef, AfterViewInit, QueryList } from '@angular/core';
2
+ import { OnInit, AfterViewInit, OnDestroy, AfterContentInit, ElementRef, ChangeDetectorRef, QueryList } from '@angular/core';
3
3
  import * as i1 from '@koobiq/components/icon';
4
4
 
5
5
  interface IArea {
@@ -28,6 +28,10 @@
28
28
  }
29
29
  }
30
30
 
31
+ &.kbq-table_sticky-header > thead > tr > th {
32
+ background-color: var(--kbq-background-bg);
33
+ }
34
+
31
35
  &.kbq-table_bordered {
32
36
  & > tbody > tr {
33
37
  & th,
package/table/index.d.ts CHANGED
@@ -6,8 +6,9 @@ import * as i2 from '@angular/cdk/platform';
6
6
  declare class KbqTable {
7
7
  readonly border: i0.InputSignalWithTransform<boolean, unknown>;
8
8
  readonly disableHover: i0.InputSignalWithTransform<boolean, unknown>;
9
+ readonly stickyHeader: i0.InputSignalWithTransform<boolean, unknown>;
9
10
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqTable, never>;
10
- static ɵcmp: i0.ɵɵComponentDeclaration<KbqTable, "table[kbq-table]", ["kbqTable"], { "border": { "alias": "border"; "required": false; "isSignal": true; }; "disableHover": { "alias": "disableHover"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
11
+ static ɵcmp: i0.ɵɵComponentDeclaration<KbqTable, "table[kbq-table]", ["kbqTable"], { "border": { "alias": "border"; "required": false; "isSignal": true; }; "disableHover": { "alias": "disableHover"; "required": false; "isSignal": true; }; "stickyHeader": { "alias": "stickyHeader"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
11
12
  }
12
13
  declare class KbqTableCellContent {
13
14
  readonly button: i0.Signal<KbqButton | undefined>;
package/table/table.scss CHANGED
@@ -37,6 +37,14 @@
37
37
  }
38
38
  }
39
39
 
40
+ .kbq-table.kbq-table_sticky-header {
41
+ & > thead > tr > th {
42
+ position: sticky;
43
+ top: 0;
44
+ z-index: 1;
45
+ }
46
+ }
47
+
40
48
  .kbq-table.kbq-table_bordered {
41
49
  & > tbody > tr {
42
50
  & th,