@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
@@ -1,12 +1,12 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { InjectionToken, Provider, AfterContentInit, AfterViewInit, OnDestroy, OnInit, DoCheck, ElementRef, ChangeDetectorRef, QueryList, TemplateRef, EventEmitter } from '@angular/core';
2
+ import { InjectionToken, AfterContentInit, AfterViewInit, OnDestroy, OnInit, DoCheck, ElementRef, ChangeDetectorRef, QueryList, TemplateRef, EventEmitter, Provider } from '@angular/core';
3
3
  import * as _angular_cdk_overlay_module_d from '@angular/cdk/overlay-module.d';
4
4
  import { SelectionModel } from '@angular/cdk/collections';
5
5
  import * as i1 from '@angular/cdk/overlay';
6
6
  import { ConnectedPosition, CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';
7
7
  import { ControlValueAccessor, NgForm, FormGroupDirective, NgControl } from '@angular/forms';
8
8
  import * as i5 from '@koobiq/components/core';
9
- import { KbqAbstractSelect, CanUpdateErrorState, ErrorStateMatcher, KbqSelectTrigger, KbqSelectMatcher, KbqSelectSearch, KbqSelectAllEvent, KbqComponentColors } from '@koobiq/components/core';
9
+ import { KbqPanelWidth, KbqPanelMinWidth, KbqPanelMaxWidth, KbqPanelMaxHeight, KbqAbstractSelect, CanUpdateErrorState, KbqSiblingPopup, ErrorStateMatcher, KbqSelectTrigger, KbqSelectMatcher, KbqSelectSearch, KbqSelectAllEvent, KbqComponentColors } from '@koobiq/components/core';
10
10
  import * as i9 from '@koobiq/components/form-field';
11
11
  import { KbqFormFieldControl, KbqCleaner } from '@koobiq/components/form-field';
12
12
  import * as i4 from '@koobiq/components/tags';
@@ -24,19 +24,32 @@ type KbqTreeSelectTriggerValue = {
24
24
  value: string;
25
25
  viewValue: string;
26
26
  };
27
- /** Tree select panel width type. */
28
- type KbqTreeSelectPanelWidth = 'auto' | number | null;
27
+ /**
28
+ * Tree select panel width type.
29
+ * @deprecated Use `KbqPanelWidth` from `@koobiq/components/core` instead.
30
+ */
31
+ type KbqTreeSelectPanelWidth = KbqPanelWidth;
29
32
  /** Options for the `kbq-tree-select` that can be configured using the `KBQ_TREE_SELECT_OPTIONS` injection token. */
30
33
  type KbqTreeSelectOptions = Partial<{
31
34
  /**
32
35
  * Width of the panel. If set to `auto`, the panel will match the trigger width.
33
36
  * If set to null or an empty string, the panel will grow to match the longest option's text.
34
37
  */
35
- panelWidth: KbqTreeSelectPanelWidth;
38
+ panelWidth: KbqPanelWidth;
36
39
  /**
37
40
  * Minimum width of the panel. If minWidth is larger than window width or property set to null, it will be ignored.
38
41
  */
39
- panelMinWidth: Exclude<KbqTreeSelectPanelWidth, 'auto'>;
42
+ panelMinWidth: KbqPanelMinWidth;
43
+ /**
44
+ * Maximum width of the panel. Caps growth by content only — it never overrides the trigger width or an
45
+ * explicit `panelWidth`. If null, the `--kbq-panel-size-width-max` token applies.
46
+ */
47
+ panelMaxWidth: KbqPanelMaxWidth;
48
+ /**
49
+ * Maximum height of the panel's scrollable option list. Does not include the search field or the
50
+ * footer. If null, the `--kbq-select-panel-size-max-height` token applies.
51
+ */
52
+ panelMaxHeight: KbqPanelMaxHeight;
40
53
  /**
41
54
  * Whether to enable hiding search by default if options is less than minimum.
42
55
  *
@@ -52,11 +65,21 @@ declare const KBQ_TREE_SELECT_OPTIONS: InjectionToken<Partial<{
52
65
  * Width of the panel. If set to `auto`, the panel will match the trigger width.
53
66
  * If set to null or an empty string, the panel will grow to match the longest option's text.
54
67
  */
55
- panelWidth: KbqTreeSelectPanelWidth;
68
+ panelWidth: KbqPanelWidth;
56
69
  /**
57
70
  * Minimum width of the panel. If minWidth is larger than window width or property set to null, it will be ignored.
58
71
  */
59
- panelMinWidth: Exclude<KbqTreeSelectPanelWidth, "auto">;
72
+ panelMinWidth: KbqPanelMinWidth;
73
+ /**
74
+ * Maximum width of the panel. Caps growth by content only — it never overrides the trigger width or an
75
+ * explicit `panelWidth`. If null, the `--kbq-panel-size-width-max` token applies.
76
+ */
77
+ panelMaxWidth: KbqPanelMaxWidth;
78
+ /**
79
+ * Maximum height of the panel's scrollable option list. Does not include the search field or the
80
+ * footer. If null, the `--kbq-select-panel-size-max-height` token applies.
81
+ */
82
+ panelMaxHeight: KbqPanelMaxHeight;
60
83
  /**
61
84
  * Whether to enable hiding search by default if options is less than minimum.
62
85
  *
@@ -76,7 +99,7 @@ declare class KbqTreeSelectChange {
76
99
  values?: unknown[] | undefined;
77
100
  constructor(source: KbqTreeSelect, value: any, isUserInput?: boolean, values?: unknown[] | undefined);
78
101
  }
79
- declare class KbqTreeSelect extends KbqAbstractSelect implements AfterContentInit, AfterViewInit, OnDestroy, OnInit, DoCheck, ControlValueAccessor, KbqFormFieldControl<KbqTreeOption>, CanUpdateErrorState {
102
+ declare class KbqTreeSelect extends KbqAbstractSelect implements AfterContentInit, AfterViewInit, OnDestroy, OnInit, DoCheck, ControlValueAccessor, KbqFormFieldControl<KbqTreeOption>, CanUpdateErrorState, KbqSiblingPopup {
80
103
  elementRef: ElementRef<HTMLElement>;
81
104
  readonly changeDetectorRef: ChangeDetectorRef;
82
105
  private readonly ngZone;
@@ -115,16 +138,25 @@ declare class KbqTreeSelect extends KbqAbstractSelect implements AfterContentIni
115
138
  /** Strategy that will be used to handle scrolling while the select panel is open. */
116
139
  scrollStrategy: _angular_cdk_overlay_module_d.ScrollStrategy;
117
140
  /**
118
- * The y-offset of the overlay panel in relation to the trigger's top start corner.
119
- * This must be adjusted to align the selected option text over the trigger text.
120
- * when the panel opens. Will change based on the y-position of the selected option.
141
+ * The y-offset of the overlay panel in relation to the trigger.
142
+ *
143
+ * @deprecated noop. The trigger↔panel gap is now controlled by the `--kbq-connected-overlay-gap` CSS
144
+ * variable (transparent padding inside the pane via the `kbq-connected-overlay_below/_above` panel
145
+ * classes), not by a physical overlay offset — so setting this has no effect. Will be removed in 21.0.0.
121
146
  */
122
147
  offsetY: number;
123
148
  /**
124
- * This position config ensures that the top "start" corner of the overlay
125
- * is aligned with with the top "start" of the origin by default (overlapping
126
- * the trigger completely). If the panel cannot fit below the trigger, it
127
- * will fall back to a position above the trigger.
149
+ * Minimum space to keep between the overlay and the viewport edge.
150
+ * At least `defaultOffsetY` so CDK's fit check which runs before the `kbq-connected-overlay_below/_above`
151
+ * gap padding is applied to the pane stays conservative enough to absorb that padding instead of
152
+ * letting the panel overflow the viewport by the size of the gap.
153
+ */
154
+ protected readonly viewportMargin: number;
155
+ /**
156
+ * Opens the panel below the trigger, falling back to above it when it does not fit.
157
+ *
158
+ * A third position is appended at runtime by `updatePanelAnchor`: a multiline trigger that has grown
159
+ * taller than the panel gets it anchored to its first row and drawn over the rest of it.
128
160
  */
129
161
  positions: ConnectedPosition[];
130
162
  options: QueryList<KbqTreeOption>;
@@ -132,9 +164,16 @@ declare class KbqTreeSelect extends KbqAbstractSelect implements AfterContentIni
132
164
  * Trigger - is a clickable field to open select dropdown panel
133
165
  */
134
166
  readonly trigger: _angular_core.Signal<ElementRef<any>>;
135
- readonly panel: _angular_core.Signal<ElementRef<any>>;
167
+ /** Reference to the overlay panel element. */
168
+ readonly panel: _angular_core.Signal<ElementRef<any> | undefined>;
169
+ /** Scrollable option list inside the panel. */
170
+ protected readonly optionsContainer: _angular_core.Signal<ElementRef<HTMLElement> | undefined>;
136
171
  overlayDir: CdkConnectedOverlay;
137
172
  tags: QueryList<KbqTag>;
173
+ /**
174
+ * Reference to the optional cleaner element for clearing selection.
175
+ * @docs-private
176
+ */
138
177
  readonly cleaner: _angular_core.Signal<KbqCleaner | undefined>;
139
178
  /** User-supplied override of the trigger element. */
140
179
  readonly customTrigger: _angular_core.Signal<KbqSelectTrigger | undefined>;
@@ -143,7 +182,12 @@ declare class KbqTreeSelect extends KbqAbstractSelect implements AfterContentIni
143
182
  readonly tree: _angular_core.Signal<KbqTreeSelection | undefined>;
144
183
  readonly search: _angular_core.Signal<KbqSelectSearch | undefined>;
145
184
  hiddenItemsText: string;
146
- /** Event emitted when the select panel has been toggled. */
185
+ /**
186
+ * Event emitted when the select panel has been toggled.
187
+ * Also serves as the `openedChange` member of the `KbqSiblingPopup` contract — a tooltip sharing
188
+ * this element's host reacts to it, so its emission timing (gated on `panelDoneAnimatingStream`, see
189
+ * `ngOnInit`) matters beyond this output's original consumers.
190
+ */
147
191
  readonly openedChange: EventEmitter<boolean>;
148
192
  /** Event emitted when the select has been opened. */
149
193
  readonly openedStream: Observable<void>;
@@ -152,8 +196,8 @@ declare class KbqTreeSelect extends KbqAbstractSelect implements AfterContentIni
152
196
  /** Event emitted when the selected value has been changed by the user. */
153
197
  readonly selectionChange: _angular_core.OutputEmitterRef<KbqTreeSelectChange>;
154
198
  /**
155
- * Event emitted when all options are selected or deselected via the Ctrl/Cmd + A shortcut.
156
- * Not emitted when a custom `selectAllHandler` is supplied the handler owns the behaviour then.
199
+ * Event emitted whenever the tree's `selectAllOptions()` runs a click on the `selectAll` master
200
+ * checkbox, the Ctrl/Cmd + A shortcut, or a custom `selectAllHandler` that delegates to it.
157
201
  */
158
202
  readonly onSelectAll: _angular_core.OutputEmitterRef<KbqSelectAllEvent<KbqTreeOption, KbqTreeSelect>>;
159
203
  /**
@@ -196,6 +240,15 @@ declare class KbqTreeSelect extends KbqAbstractSelect implements AfterContentIni
196
240
  private _autoSelect;
197
241
  /** When `true`, a repeated Ctrl/Cmd+A deselects all options. Off by default (Ctrl+A only selects). */
198
242
  readonly selectAllToggle: _angular_core.InputSignalWithTransform<boolean, unknown>;
243
+ /**
244
+ * Whether to render the "select all" master checkbox above the tree. Multiple selection only.
245
+ *
246
+ * The row acts on the nodes the user can actually toggle — enabled and selectable. Without a search
247
+ * query that covers the whole data set, collapsed branches included; while a query is active it
248
+ * covers only the matches. Enabling it also makes Ctrl/Cmd + A a two-way toggle, so the shortcut and
249
+ * the checkbox never disagree (`selectAllToggle` is implied).
250
+ */
251
+ readonly selectAll: _angular_core.InputSignalWithTransform<boolean, unknown>;
199
252
  get value(): any;
200
253
  get id(): string;
201
254
  set id(value: string);
@@ -222,22 +275,39 @@ declare class KbqTreeSelect extends KbqAbstractSelect implements AfterContentIni
222
275
  /** Whether multiple choice is enabled or not. True if multiple or multiline */
223
276
  get multiSelection(): boolean;
224
277
  private _focused;
225
- /** Width of the overlay panel. */
226
- protected overlayWidth: string | number;
227
- /** Min width of the overlay panel. */
228
- protected overlayMinWidth: string | number;
229
278
  /**
230
279
  * Minimum width of the panel.
231
280
  * If minWidth is larger than window width, it will be ignored.
232
281
  */
233
- readonly panelMinWidth: _angular_core.InputSignalWithTransform<number | null, unknown>;
282
+ readonly panelMinWidth: _angular_core.InputSignalWithTransform<KbqPanelMinWidth, unknown>;
234
283
  /** Origin for the overlay panel. */
235
284
  protected overlayOrigin?: CdkOverlayOrigin | ElementRef;
236
285
  /**
237
- * Width of the panel. If set to `auto`, the panel will match the trigger width.
238
- * If set to null or an empty string, the panel will grow to match the longest option's text.
286
+ * Width of the panel. If set to `auto`, the panel will match the trigger width, but will never be
287
+ * narrower than `panelMinWidth`. If set to null or an empty string, the panel will grow to match the
288
+ * longest option's text. Any other value is used as an exact width, and `panelMinWidth` is not applied.
289
+ */
290
+ readonly panelWidth: _angular_core.InputSignal<KbqPanelWidth>;
291
+ /**
292
+ * Maximum width of the panel in pixels. Caps how far the panel grows with its content — it never makes
293
+ * the panel narrower than the trigger, and never clamps an explicit `panelWidth`.
294
+ * When null, the `--kbq-panel-size-width-max` token applies.
295
+ */
296
+ readonly panelMaxWidth: _angular_core.InputSignalWithTransform<KbqPanelMaxWidth, unknown>;
297
+ /**
298
+ * Maximum height of the panel's scrollable option list, in pixels. Applied as the
299
+ * `--kbq-select-panel-size-max-height` custom property on the panel.
300
+ *
301
+ * The search field and the footer sit outside the scrollable area and add to the panel's total height.
302
+ * When null, the token default (256px) applies.
239
303
  */
240
- readonly panelWidth: _angular_core.InputSignal<KbqTreeSelectPanelWidth>;
304
+ readonly panelMaxHeight: _angular_core.InputSignalWithTransform<KbqPanelMaxHeight, unknown>;
305
+ /**
306
+ * `panelMaxHeight` rendered as a CSS length for the `--kbq-select-panel-size-max-height` token.
307
+ * A non-finite value (e.g. `null`) leaves the stylesheet default in place.
308
+ * @docs-private
309
+ */
310
+ protected readonly panelMaxHeightToken: _angular_core.Signal<string | null>;
241
311
  /**
242
312
  * Controls when the search functionality is displayed based on the number of available options.
243
313
  *
@@ -248,6 +318,12 @@ declare class KbqTreeSelect extends KbqAbstractSelect implements AfterContentIni
248
318
  get searchMinOptionsThreshold(): number | undefined;
249
319
  private _searchMinOptionsThreshold;
250
320
  get panelOpen(): boolean;
321
+ /** Whether the overlay panel is currently on screen. Part of the `KbqSiblingPopup` contract. */
322
+ get isAttached(): boolean;
323
+ /**
324
+ * Whether the cleaner (clear button) should be shown.
325
+ * @docs-private
326
+ */
251
327
  get canShowCleaner(): boolean;
252
328
  /** @docs-private */
253
329
  get colorForState(): KbqComponentColors;
@@ -256,13 +332,12 @@ declare class KbqTreeSelect extends KbqAbstractSelect implements AfterContentIni
256
332
  private closeSubscription;
257
333
  private _panelOpen;
258
334
  private originalOnKeyDown;
259
- /** The scroll position of the overlay panel, calculated to center the selected option. */
335
+ /** The scroll offset the panel is restored to when it attaches — the list always opens at the top. */
260
336
  private scrollTop;
261
337
  /** Unique id for this input. */
262
338
  private readonly uid;
263
339
  private tempValues;
264
340
  private readonly destroyRef;
265
- private readonly window;
266
341
  constructor();
267
342
  ngOnInit(): void;
268
343
  ngDoCheck(): void;
@@ -271,7 +346,17 @@ declare class KbqTreeSelect extends KbqAbstractSelect implements AfterContentIni
271
346
  ngOnDestroy(): void;
272
347
  updateErrorState(): void;
273
348
  hiddenItemsTextFormatter(hiddenItemsText: string, hiddenItems: number): string;
274
- clearValue($event: any): void;
349
+ /**
350
+ * Clears the current selection.
351
+ * @docs-private
352
+ */
353
+ clear(): void;
354
+ /**
355
+ * Clears the current selection.
356
+ * @deprecated Activate the projected `KbqCleaner` instead.
357
+ * @docs-private
358
+ */
359
+ clearValue(event: Event): void;
275
360
  /** `View -> model callback called when value changes` */
276
361
  onChange: (value: any) => void;
277
362
  /** `View -> model callback called when select has been touched` */
@@ -326,6 +411,9 @@ declare class KbqTreeSelect extends KbqAbstractSelect implements AfterContentIni
326
411
  onBlur(): void;
327
412
  /** Callback that is invoked when the overlay panel has been attached. */
328
413
  onAttached(): void;
414
+ /** Element the overlay is positioned and sized against. */
415
+ protected getOverlayOriginElement(): HTMLElement | undefined;
416
+ protected isPanelOpen(): boolean;
329
417
  /** Returns the theme to be used on the panel. */
330
418
  getPanelTheme(): string;
331
419
  /** Returns the full set of classes for the panel: base class, theme and custom `panelClass`. */
@@ -340,16 +428,20 @@ declare class KbqTreeSelect extends KbqAbstractSelect implements AfterContentIni
340
428
  onRemoveSelectedOption(selectedOption: any, $event: any): void;
341
429
  calculateHiddenItems: () => void;
342
430
  triggerKeydownHandler(event: KeyboardEvent): void;
343
- panelKeydownHandler(event: KeyboardEvent): any;
431
+ panelKeydownHandler(event: KeyboardEvent): void;
344
432
  /** @docs-private */
345
433
  protected shouldShowSearch(): boolean;
346
434
  private updateLocaleParams;
347
435
  private closingActions;
348
436
  private getTotalItemsWidthInMatcher;
349
437
  private getTotalVisibleItems;
350
- /** Gets how wide the overlay panel should be. */
351
- private getOverlayWidth;
352
438
  private buildTriggerClone;
439
+ /**
440
+ * Width of a single `kbq-tag` in the matcher, including margins and the inter-tag gap.
441
+ *
442
+ * Tags are `border-box` and carry horizontal padding, which `getComputedStyle().width` — always
443
+ * the used content-box width — leaves out. See the twin in `KbqSelect`.
444
+ */
353
445
  private getItemWidth;
354
446
  private refreshTriggerValues;
355
447
  /**
@@ -365,11 +457,10 @@ declare class KbqTreeSelect extends KbqAbstractSelect implements AfterContentIni
365
457
  * the first item instead.
366
458
  */
367
459
  private highlightCorrectOption;
368
- /** Scrolls the active option into view. */
369
460
  private scrollActiveOptionIntoView;
370
461
  private subscribeOnSearchChanges;
371
462
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KbqTreeSelect, never>;
372
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KbqTreeSelect, "kbq-tree-select", ["kbqTreeSelect"], { "hiddenItemsText": { "alias": "hiddenItemsText"; "required": false; }; "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; }; "placeholder": { "alias": "placeholder"; "required": false; }; "required": { "alias": "required"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "autoSelect": { "alias": "autoSelect"; "required": false; }; "selectAllToggle": { "alias": "selectAllToggle"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; }; "hasBackdrop": { "alias": "hasBackdrop"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "selectAllHandler": { "alias": "selectAllHandler"; "required": false; }; "panelMinWidth": { "alias": "panelMinWidth"; "required": false; "isSignal": true; }; "panelWidth": { "alias": "panelWidth"; "required": false; "isSignal": true; }; "searchMinOptionsThreshold": { "alias": "searchMinOptionsThreshold"; "required": false; }; "hiddenItemsTextFormatter": { "alias": "hiddenItemsTextFormatter"; "required": false; }; }, { "openedChange": "openedChange"; "openedStream": "opened"; "closedStream": "closed"; "selectionChange": "selectionChange"; "onSelectAll": "onSelectAll"; "valueChange": "valueChange"; }, ["cleaner", "customTrigger", "customMatcher", "customTagTemplateRef", "tree", "search"], ["kbq-select-matcher, [kbq-select-matcher]", "kbq-select-trigger, [kbq-select-trigger]", "kbq-cleaner", "[kbqSelectSearch]", "[kbq-select-search-empty-result]", "kbq-tree-selection", "kbq-select-footer,[kbq-tree-select-footer]"], true, never>;
463
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KbqTreeSelect, "kbq-tree-select", ["kbqTreeSelect"], { "hiddenItemsText": { "alias": "hiddenItemsText"; "required": false; }; "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; }; "placeholder": { "alias": "placeholder"; "required": false; }; "required": { "alias": "required"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "autoSelect": { "alias": "autoSelect"; "required": false; }; "selectAllToggle": { "alias": "selectAllToggle"; "required": false; "isSignal": true; }; "selectAll": { "alias": "selectAll"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; }; "hasBackdrop": { "alias": "hasBackdrop"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "selectAllHandler": { "alias": "selectAllHandler"; "required": false; }; "panelMinWidth": { "alias": "panelMinWidth"; "required": false; "isSignal": true; }; "panelWidth": { "alias": "panelWidth"; "required": false; "isSignal": true; }; "panelMaxWidth": { "alias": "panelMaxWidth"; "required": false; "isSignal": true; }; "panelMaxHeight": { "alias": "panelMaxHeight"; "required": false; "isSignal": true; }; "searchMinOptionsThreshold": { "alias": "searchMinOptionsThreshold"; "required": false; }; "hiddenItemsTextFormatter": { "alias": "hiddenItemsTextFormatter"; "required": false; }; }, { "openedChange": "openedChange"; "openedStream": "opened"; "closedStream": "closed"; "selectionChange": "selectionChange"; "onSelectAll": "onSelectAll"; "valueChange": "valueChange"; }, ["cleaner", "customTrigger", "customMatcher", "customTagTemplateRef", "tree", "search"], ["kbq-select-matcher, [kbq-select-matcher]", "kbq-select-trigger, [kbq-select-trigger]", "kbq-cleaner", "[kbqSelectSearch]", "[kbq-select-search-empty-result]", "kbq-tree-selection", "kbq-select-footer,[kbq-tree-select-footer]"], true, never>;
373
464
  static ngAcceptInputType_multiple: unknown;
374
465
  static ngAcceptInputType_disabled: unknown;
375
466
  }
@@ -1,50 +0,0 @@
1
- @use './accordion-theme' as *;
2
-
3
- .kbq-accordion {
4
- display: block;
5
- }
6
-
7
- .kbq-accordion-item {
8
- box-sizing: border-box;
9
- display: block;
10
-
11
- border-width: 2px;
12
- border-style: solid;
13
- border-color: transparent;
14
- }
15
-
16
- .kbq-accordion-header {
17
- display: flex;
18
-
19
- height: var(--kbq-accordion-size-item-header-height);
20
- }
21
-
22
- .kbq-accordion-content {
23
- display: block;
24
- overflow: hidden;
25
-
26
- & > p {
27
- margin: unset;
28
- padding: var(--kbq-accordion-size-item-content-padding);
29
- }
30
-
31
- &[data-state='open'] {
32
- transition: height 300ms ease-out;
33
- height: var(--radix-accordion-content-height);
34
- }
35
-
36
- &[data-state='closed'] {
37
- transition: height 300ms ease-out;
38
- height: 0;
39
- }
40
-
41
- @media (prefers-reduced-motion: reduce) {
42
- &[data-state='open'],
43
- &[data-state='closed'] {
44
- transition: none;
45
- }
46
- }
47
- }
48
-
49
- @include kbq-accordion-theme();
50
- @include kbq-accordion-typography();
@@ -1,4 +0,0 @@
1
- @import '../../../../node_modules/@koobiq/design-tokens/web/variables';
2
- @import '../../../../node_modules/@koobiq/design-tokens/web/palette';
3
- @import '../../../../node_modules/@koobiq/design-tokens/web/typography';
4
- @import '../../../../node_modules/@koobiq/design-tokens/web/md-typography';