@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
package/title/index.d.ts CHANGED
@@ -1,35 +1,125 @@
1
1
  import * as i0 from '@angular/core';
2
- import { AfterViewInit, OnDestroy } from '@angular/core';
2
+ import { AfterViewInit, OnDestroy, TemplateRef } from '@angular/core';
3
3
  import * as i1 from '@koobiq/components/tooltip';
4
4
  import { KbqTooltipTrigger } from '@koobiq/components/tooltip';
5
5
  import { Subject } from 'rxjs';
6
6
 
7
+ /**
8
+ * Shows a tooltip with the full text of the host element, but only when that text is truncated —
9
+ * i.e. it overflows horizontally, or vertically when clamped to several lines. The tooltip opens on
10
+ * hover and on keyboard focus, and hides on blur, mouse leave, or window resize.
11
+ *
12
+ * By default, the tooltip content is the trimmed `textContent` of the host. Provide explicit content
13
+ * with `[kbq-title]="stringOrTemplateRef"`. For nested markup, mark the measured container with the
14
+ * `#kbqTitleContainer` template reference and the text element(s) with `#kbqTitleText`; several
15
+ * `#kbqTitleText` elements are supported and the tooltip is shown when any of them overflows.
16
+ *
17
+ * Host components that provide `KBQ_TITLE_TEXT_REF` (e.g. `KbqOption`) supply the text and parent
18
+ * elements automatically, so the directive works without explicit template references.
19
+ */
7
20
  declare class KbqTitleDirective extends KbqTooltipTrigger implements AfterViewInit, OnDestroy {
21
+ /** Optional host component that exposes the measured text/parent elements via `KBQ_TITLE_TEXT_REF`. */
8
22
  private componentInstance;
23
+ /** Host native element the directive is attached to. */
9
24
  private readonly nativeElement;
25
+ /** SSR-safe window reference used for `getComputedStyle` reads. */
26
+ private readonly window;
27
+ /** Observes host content mutations to re-evaluate overflow and refresh the resolved tooltip content. */
10
28
  private contentObserver;
29
+ /**
30
+ * Optional explicit tooltip content. Accepts a `TemplateRef` (rendered as rich tooltip content) or a string.
31
+ * When omitted (a bare `kbq-title` attribute resolves to an empty string), the directive falls back to the
32
+ * trimmed `textContent` of the host (`viewValue`), preserving the default behavior.
33
+ */
34
+ readonly titleContent: i0.InputSignal<string | TemplateRef<any>>;
11
35
  set trigger(value: string);
36
+ /**
37
+ * The pop-up trigger. Always reports `PopUpTriggers.Hover`, so the title tooltip reacts to hover and
38
+ * keyboard focus regardless of the assigned value. The setter is kept only as a no-op workaround so a
39
+ * host that also uses a popover can assign a trigger without breaking `kbq-title`.
40
+ */
12
41
  get trigger(): string;
42
+ /**
43
+ * Whether the host content is clipped and therefore needs a tooltip. Returns `true` if any measured
44
+ * text element overflows the parent — covering multiple `#kbqTitleText` elements, the sub-pixel
45
+ * special case, and both horizontal and vertical overflow.
46
+ */
13
47
  get isOverflown(): boolean;
48
+ /** Whether the text is clipped horizontally: the parent `offsetWidth` is smaller than the child `scrollWidth`. */
14
49
  get isHorizontalOverflown(): boolean;
50
+ /** Whether the text is clipped vertically: the parent `offsetHeight` is smaller than the child `scrollHeight`. */
15
51
  get isVerticalOverflown(): boolean;
52
+ /**
53
+ * Compares measured widths, treating only *visible* clipping as overflow. With `text-overflow: ellipsis`
54
+ * any positive difference counts (even a sub-pixel overflow shows `…`). With `text-overflow: clip` the
55
+ * widths are rounded to whole CSS pixels first — mirroring the integer `offsetWidth`/`scrollWidth` path —
56
+ * so an imperceptible sub-pixel clip is not treated as truncation.
57
+ * @docs-private */
58
+ private isWidthOverflown;
59
+ /** Trimmed `textContent` of the measured parent, used as the default tooltip content. */
16
60
  get viewValue(): string;
61
+ /**
62
+ * Measured container element. Resolved as the projected `#kbqTitleContainer`, otherwise the
63
+ * `KBQ_TITLE_TEXT_REF` host's `parentTextElement`, otherwise the host element itself.
64
+ * @docs-private */
17
65
  get parent(): HTMLElement;
66
+ /** First effective text element used for overflow detection (the first entry of `childElements`).
67
+ * @docs-private */
18
68
  get child(): HTMLElement;
69
+ /** Whether the host element contains exactly one child node and that node is a text node. */
19
70
  get hasOnlyText(): boolean;
71
+ /**
72
+ * Whether the measured text truncates with an ellipsis on either the child text element or its
73
+ * wrapping container. Only then is a sub-pixel overflow actually visible (the trailing glyph is
74
+ * replaced by `…`); with the default `text-overflow: clip` a sub-pixel clip is imperceptible, so
75
+ * it must not be reported as truncation. Both elements are checked because `text-overflow` is not
76
+ * inherited and consumers place it differently: `KbqOption`/`KbqDropdownItem` style the measured
77
+ * `child`, whereas `KbqTreeOption` styles the `parent` container that wraps the child.
78
+ * @docs-private */
79
+ private get hasEllipsis();
80
+ /** Whether the element's computed `text-overflow` renders an ellipsis.
81
+ * @docs-private */
82
+ private elementHasEllipsis;
83
+ /**
84
+ * Effective text elements used for overflow detection. Resolves to the projected `#kbqTitleText` elements,
85
+ * otherwise falls back to the `KbqTitleTextRef` host's `textElement`, otherwise to the host element itself.
86
+ * Always contains at least one element.
87
+ * @docs-private */
88
+ private get childElements();
89
+ /** Resolved tooltip content: the explicit `titleContent` input when provided, otherwise the host text.
90
+ * @docs-private */
91
+ private get resolvedContent();
92
+ /** Emits `window:resize` events; subscribed to re-evaluate overflow after the viewport changes.
93
+ * @docs-private */
20
94
  readonly resizeStream: Subject<Event>;
95
+ /** Debounce/throttle interval (ms) applied to the resize and content-observer streams. */
21
96
  private readonly debounceInterval;
97
+ /** Subscription to `resizeStream`, torn down in `ngOnDestroy`. */
22
98
  private resizeSubscription;
99
+ /** Subscription to the content observer, torn down in `ngOnDestroy`. */
23
100
  private contentObserverSubscription;
101
+ /** Subscription to the focus monitor, torn down in `ngOnDestroy`. */
24
102
  private focusMonitorSubscription;
103
+ /** Projected text elements marked with the `#kbqTitleText` template reference. */
25
104
  private childContainer;
105
+ /** Projected container element marked with the `#kbqTitleContainer` template reference. */
26
106
  private parentContainer;
107
+ /**
108
+ * Sets the initial tooltip content and wires the streams that toggle the tooltip's `disabled` state:
109
+ * window resize and content mutations re-evaluate overflow, and keyboard focus opens the tooltip
110
+ * while other focus origins hide it.
111
+ */
27
112
  ngAfterViewInit(): void;
113
+ /** Unsubscribes from the resize, content-observer and focus-monitor streams and stops focus monitoring. */
28
114
  ngOnDestroy(): void;
115
+ /** Enables the tooltip only when the content is overflown. Bound to `mouseenter` and keyboard focus.
116
+ * @docs-private */
29
117
  handleElementEnter(): void;
118
+ /** Always disables (hides) the tooltip. Bound to `mouseleave` and non-keyboard focus changes.
119
+ * @docs-private */
30
120
  hideTooltip(): void;
31
121
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqTitleDirective, never>;
32
- static ɵdir: i0.ɵɵDirectiveDeclaration<KbqTitleDirective, "[kbq-title]", ["kbqTitle"], {}, {}, ["childContainer", "parentContainer"], never, true, never>;
122
+ static ɵdir: i0.ɵɵDirectiveDeclaration<KbqTitleDirective, "[kbq-title]", ["kbqTitle"], { "titleContent": { "alias": "kbq-title"; "required": false; "isSignal": true; }; }, {}, ["parentContainer", "childContainer"], never, true, never>;
33
123
  }
34
124
 
35
125
  declare class KbqTitleModule {
@@ -1,10 +1,42 @@
1
- import * as rxjs from 'rxjs';
2
1
  import * as i0 from '@angular/core';
3
2
  import { InjectionToken, ElementRef, AfterViewInit, OnChanges, OnDestroy, Renderer2, WritableSignal, TemplateRef, EventEmitter, SimpleChanges, Type } from '@angular/core';
3
+ import * as rxjs from 'rxjs';
4
4
  import { FocusMonitor } from '@angular/cdk/a11y';
5
5
  import { ScrollStrategy, Overlay, OverlayConfig } from '@angular/cdk/overlay';
6
6
  import { KbqPopUp, KbqPopUpTrigger, KbqParentPopup, KbqPopUpPlacementValues, KbqComponentColors } from '@koobiq/components/core';
7
7
 
8
+ /**
9
+ * Default value of the `kbqTooltipSingleInstance` input. Provide `false` at the application level to
10
+ * globally disable the "only one tooltip is visible at a time" behavior.
11
+ */
12
+ declare const KBQ_TOOLTIP_SINGLE_INSTANCE_DEFAULT: InjectionToken<boolean>;
13
+ /**
14
+ * Contract of a tooltip taking part in the "only one tooltip is visible at a time" group.
15
+ * @docs-private
16
+ */
17
+ interface KbqExclusiveTooltip {
18
+ /** Hides the tooltip because another one has taken its place. */
19
+ hideAsInactive(): void;
20
+ }
21
+ /**
22
+ * Keeps track of the single tooltip that is currently visible, so that showing a new one hides the
23
+ * previous. Holds the *trigger*, not the overlay component — the latter is re-created on every show.
24
+ */
25
+ declare class KbqTooltipRegistry {
26
+ /** Tooltip that currently owns the screen, or `null` when nothing is visible. */
27
+ private visibleTooltip;
28
+ /** Marks the tooltip as the only visible one, hiding the previously visible tooltip. */
29
+ setVisible(tooltip: KbqExclusiveTooltip): void;
30
+ /**
31
+ * Clears the registry, but only when the given tooltip is still the registered one. The guard
32
+ * matters because hiding the previous tooltip is asynchronous: its `visibleChange(false)` arrives
33
+ * after the new tooltip has already been registered, and must not wipe that newer entry.
34
+ */
35
+ clearVisible(tooltip: KbqExclusiveTooltip): void;
36
+ static ɵfac: i0.ɵɵFactoryDeclaration<KbqTooltipRegistry, never>;
37
+ static ɵprov: i0.ɵɵInjectableDeclaration<KbqTooltipRegistry>;
38
+ }
39
+
8
40
  declare enum TooltipModifier {
9
41
  Default = "default",
10
42
  Warning = "warning",
@@ -43,9 +75,19 @@ declare const KBQ_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER: {
43
75
  deps: (typeof Overlay)[];
44
76
  useFactory: typeof kbqTooltipScrollStrategyFactory;
45
77
  };
46
- declare class KbqTooltipTrigger extends KbqPopUpTrigger<KbqTooltipComponent> implements AfterViewInit, OnChanges, OnDestroy {
78
+ /**
79
+ * Trigger directive that shows a `KbqTooltipComponent` for its host element. Extends `KbqPopUpTrigger` with
80
+ * tooltip-specific inputs (content, placement, color, arrow, enter/leave delays, modifier and header) and
81
+ * behavior such as opening on keyboard focus only and positioning relative to the mouse cursor.
82
+ */
83
+ declare class KbqTooltipTrigger extends KbqPopUpTrigger<KbqTooltipComponent> implements AfterViewInit, OnChanges, OnDestroy, KbqExclusiveTooltip {
84
+ /** Registry holding the single tooltip that is currently visible. */
85
+ private readonly tooltipRegistry;
86
+ /** @docs-private */
47
87
  protected scrollStrategy: () => ScrollStrategy;
88
+ /** @docs-private */
48
89
  protected parentPopup: KbqParentPopup | null;
90
+ /** @docs-private */
49
91
  protected focusMonitor: FocusMonitor;
50
92
  /** @docs-private */
51
93
  protected renderer: Renderer2;
@@ -64,46 +106,78 @@ declare class KbqTooltipTrigger extends KbqPopUpTrigger<KbqTooltipComponent> imp
64
106
  * Defaults to `true`.
65
107
  */
66
108
  readonly ignoreTooltipPointerEvents: i0.InputSignal<boolean>;
109
+ /**
110
+ * Whether the tooltip takes part in the "only one tooltip is visible at a time" group: showing it
111
+ * hides the previously visible tooltip, and it is hidden when another tooltip is shown.
112
+ *
113
+ * Defaults to `true`; the default can be changed application-wide with the
114
+ * `KBQ_TOOLTIP_SINGLE_INSTANCE_DEFAULT` token.
115
+ *
116
+ * Tooltips without an interactive `kbqTrigger` (`manual`, `none`, …) never take part in the group,
117
+ * regardless of this input — they are shown imperatively and are expected to stay pinned.
118
+ */
119
+ readonly singleInstance: i0.InputSignalWithTransform<boolean, unknown>;
67
120
  /**
68
121
  * Changes hiding behavior. By default, tooltip is hidden on mouseleave from trigger.
69
122
  * Setting hideWithTimeout to true will delay tooltip hiding and will not hide when the mouse moves from trigger
70
123
  * to tooltip.
71
124
  */
72
125
  hideWithTimeout: boolean;
126
+ /** Input (`kbqVisible`) that programmatically shows or hides the tooltip; reflects the current `visible` state. */
73
127
  get tooltipVisible(): boolean;
74
128
  set tooltipVisible(value: boolean);
129
+ /** Input (`kbqPlacement`) that sets the tooltip placement relative to its trigger; reflects the current `placement`. */
75
130
  get tooltipPlacement(): KbqPopUpPlacementValues;
131
+ set tooltipPlacement(value: KbqPopUpPlacementValues);
76
132
  /**
77
133
  * Positions the tooltip relative to the mouse cursor. Only available for top and bottom kbqPlacement.
78
134
  * Does not work with kbqPlacementPriority.
79
135
  */
80
136
  relativeToPointer: boolean;
81
- set tooltipPlacement(value: KbqPopUpPlacementValues);
137
+ /** Input (`kbqPlacementPriority`) that sets the ordered fallback placements; reflects the current `placementPriority`. */
82
138
  get tooltipPlacementPriority(): string | string[] | null;
83
139
  set tooltipPlacementPriority(value: string | string[] | null);
140
+ /** Input (`kbqTooltip`) with the tooltip content — a string or a template. Updating it refreshes an open tooltip. */
84
141
  get content(): string | TemplateRef<any>;
85
142
  set content(content: string | TemplateRef<any>);
143
+ /** Input (`kbqTooltipDisabled`) controlling whether the tooltip is disabled; setting it to `true` hides it. */
86
144
  get disabled(): boolean;
87
145
  set disabled(value: boolean);
146
+ /** Input (`kbqEnterDelay`) — delay in milliseconds before the tooltip is shown. Defaults to `400`. */
88
147
  enterDelay: number;
148
+ /** Input (`kbqLeaveDelay`) — delay in milliseconds before the tooltip is hidden. Defaults to `0`. */
89
149
  leaveDelay: number;
150
+ /** Input (`kbqTrigger`) with the comma-separated trigger events. An empty value resets to hover + focus and rebinds listeners. */
90
151
  get trigger(): string;
91
152
  set trigger(value: string);
153
+ /** Backing field for `trigger`; defaults to hover + focus. */
92
154
  protected _trigger: string;
155
+ /** Input (`kbqTooltipClass`) with an extra CSS class applied to the tooltip; updating it refreshes the class map. */
93
156
  get customClass(): string;
94
157
  set customClass(value: string);
158
+ /** Input (`kbqTooltipContext`) with the context object passed to a template tooltip; updating it refreshes the open tooltip. */
95
159
  get context(): any;
96
160
  set context(ctx: any);
161
+ /** Backing field for `context`. */
97
162
  private _context;
163
+ /** Input (`kbqTooltipColor`) with the tooltip color theme; the getter returns the `kbq-`-prefixed CSS class. */
98
164
  get color(): string;
99
165
  set color(value: KbqComponentColors | string);
166
+ /** Backing field for `color`; defaults to `KbqComponentColors.Contrast`. */
100
167
  private _color;
168
+ /** Input (`kbqTooltipArrow`) — whether to render the tooltip's arrow/pointer. Defaults to `false`. */
101
169
  arrow: boolean;
170
+ /** Input (`kbqTooltipOffset`) — distance in pixels between the tooltip and its trigger; `null` uses the default. */
102
171
  offset: number | null;
172
+ /** Output (`kbqPlacementChange`) that emits the new placement whenever the tooltip repositions. */
103
173
  readonly placementChange: EventEmitter<any>;
174
+ /** Output (`kbqVisibleChange`) that emits when the tooltip's visibility changes. */
104
175
  readonly visibleChange: EventEmitter<boolean>;
176
+ /** Whether the configured trigger list includes the `click` trigger. */
105
177
  private get hasClickInTrigger();
178
+ /** @docs-private */
106
179
  protected originSelector: string;
180
+ /** @docs-private */
107
181
  protected overlayConfig: OverlayConfig;
108
182
  /**
109
183
  * Visual variant of the tooltip. Accepts `'default'` | `'warning'` | `'extended'`.
@@ -126,11 +200,48 @@ declare class KbqTooltipTrigger extends KbqPopUpTrigger<KbqTooltipComponent> imp
126
200
  * the next show/hide cycle.
127
201
  */
128
202
  ngOnChanges(changes: SimpleChanges): void;
203
+ /**
204
+ * Whether this tooltip takes part in the "only one tooltip is visible at a time" group.
205
+ *
206
+ * Read through the `trigger` getter on purpose: `KbqTitleDirective` always reports `hover`, so title
207
+ * tooltips participate, while `kbqValidationTooltip` consumers (datepicker, timepicker, inline-edit)
208
+ * assign `trigger = 'manual'` and therefore stay out of the group.
209
+ */
210
+ private get participatesInSingleInstance();
211
+ /**
212
+ * Sets up an effect that mirrors a `forDisabledComponent`'s disabled signal: when that component is disabled it
213
+ * makes the host focusable (so the tooltip can still be triggered) and enables the tooltip, otherwise disables it.
214
+ *
215
+ * Also joins the "only one tooltip is visible at a time" group. Both the subscription and the teardown live
216
+ * here rather than in `ngAfterViewInit`/`ngOnDestroy` because several subclasses override those hooks:
217
+ * `KbqTitleDirective` and `KbqEllipsisCenterDirective` skip `super.ngAfterViewInit()`, and `KbqPasswordToggle`
218
+ * skips `super` in both hooks entirely. `destroyRef` additionally covers a trigger destroyed while its
219
+ * tooltip is still visible — that path disposes the overlay without emitting `visibleChange(false)`.
220
+ */
129
221
  constructor();
222
+ /**
223
+ * Hides the tooltip when a parent pop-up closes, starts focus monitoring on the host, and—when
224
+ * `ignoreTooltipPointerEvents` is set—adds the panel class that makes the tooltip ignore pointer events.
225
+ */
130
226
  ngAfterViewInit(): void;
227
+ /** Stops focus monitoring on the host element and runs the base-class teardown. */
131
228
  ngOnDestroy(): void;
229
+ /**
230
+ * Shows the tooltip after `delay` ms. Suppresses showing on a focus trigger that did not originate from
231
+ * the keyboard, and applies cursor-relative positioning when `relativeToPointer` is enabled.
232
+ */
132
233
  show(delay?: number): void;
133
- /** method allows to show the tooltip relative to the given mouse event. */
234
+ /**
235
+ * Hides the tooltip because another tooltip became visible.
236
+ *
237
+ * Goes straight to the pop-up instead of `hide()`: `hide()` silently no-ops when the last recorded
238
+ * `triggerName` is `mouseleave` and the pop-up itself is hovered. Hiding through the instance keeps
239
+ * `visibleChange(false)` firing, so `isOpen`, `kbqVisibleChange` and the `kbqVisible` input stay in sync.
240
+ * Does nothing when the tooltip is already detached or when closing is prevented.
241
+ * @docs-private */
242
+ hideAsInactive(): void;
243
+ /** method allows to show the tooltip relative to the given mouse event.
244
+ * @docs-private */
134
245
  showForMouseEvent(event: MouseEvent): void;
135
246
  /**
136
247
  * method allows to show the tooltip relative to the element
@@ -139,15 +250,20 @@ declare class KbqTooltipTrigger extends KbqPopUpTrigger<KbqTooltipComponent> imp
139
250
  * For example:
140
251
  * const tooltip = new KbqTooltipTrigger();
141
252
  * tooltip.showForElement(element);
142
- */
253
+ * @docs-private */
143
254
  showForElement(element: HTMLElement): void;
255
+ /** @docs-private */
144
256
  updateData(): void;
257
+ /** @docs-private */
145
258
  closingActions(): rxjs.Observable<void | MouseEvent>;
259
+ /** @docs-private */
146
260
  getOverlayHandleComponentType(): Type<KbqTooltipComponent>;
261
+ /** @docs-private */
147
262
  updateClassMap(newPlacement?: string): void;
263
+ /** @docs-private */
148
264
  protected applyRelativeToPointer(): void;
149
265
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqTooltipTrigger, never>;
150
- static ɵdir: i0.ɵɵDirectiveDeclaration<KbqTooltipTrigger, "[kbqTooltip]", ["kbqTooltip"], { "forDisabledComponent": { "alias": "forDisabledComponent"; "required": false; "isSignal": true; }; "ignoreTooltipPointerEvents": { "alias": "ignoreTooltipPointerEvents"; "required": false; "isSignal": true; }; "hideWithTimeout": { "alias": "hideWithTimeout"; "required": false; }; "tooltipVisible": { "alias": "kbqVisible"; "required": false; }; "tooltipPlacement": { "alias": "kbqPlacement"; "required": false; }; "relativeToPointer": { "alias": "kbqRelativeToPointer"; "required": false; }; "tooltipPlacementPriority": { "alias": "kbqPlacementPriority"; "required": false; }; "content": { "alias": "kbqTooltip"; "required": false; }; "disabled": { "alias": "kbqTooltipDisabled"; "required": false; }; "enterDelay": { "alias": "kbqEnterDelay"; "required": false; }; "leaveDelay": { "alias": "kbqLeaveDelay"; "required": false; }; "trigger": { "alias": "kbqTrigger"; "required": false; }; "customClass": { "alias": "kbqTooltipClass"; "required": false; }; "context": { "alias": "kbqTooltipContext"; "required": false; }; "color": { "alias": "kbqTooltipColor"; "required": false; }; "arrow": { "alias": "kbqTooltipArrow"; "required": false; }; "offset": { "alias": "kbqTooltipOffset"; "required": false; }; "modifier": { "alias": "kbqTooltipModifier"; "required": false; }; "header": { "alias": "kbqTooltipHeader"; "required": false; }; }, { "placementChange": "kbqPlacementChange"; "visibleChange": "kbqVisibleChange"; }, never, never, true, never>;
266
+ static ɵdir: i0.ɵɵDirectiveDeclaration<KbqTooltipTrigger, "[kbqTooltip]", ["kbqTooltip"], { "forDisabledComponent": { "alias": "forDisabledComponent"; "required": false; "isSignal": true; }; "ignoreTooltipPointerEvents": { "alias": "ignoreTooltipPointerEvents"; "required": false; "isSignal": true; }; "singleInstance": { "alias": "kbqTooltipSingleInstance"; "required": false; "isSignal": true; }; "hideWithTimeout": { "alias": "hideWithTimeout"; "required": false; }; "tooltipVisible": { "alias": "kbqVisible"; "required": false; }; "tooltipPlacement": { "alias": "kbqPlacement"; "required": false; }; "relativeToPointer": { "alias": "kbqRelativeToPointer"; "required": false; }; "tooltipPlacementPriority": { "alias": "kbqPlacementPriority"; "required": false; }; "content": { "alias": "kbqTooltip"; "required": false; }; "disabled": { "alias": "kbqTooltipDisabled"; "required": false; }; "enterDelay": { "alias": "kbqEnterDelay"; "required": false; }; "leaveDelay": { "alias": "kbqLeaveDelay"; "required": false; }; "trigger": { "alias": "kbqTrigger"; "required": false; }; "customClass": { "alias": "kbqTooltipClass"; "required": false; }; "context": { "alias": "kbqTooltipContext"; "required": false; }; "color": { "alias": "kbqTooltipColor"; "required": false; }; "arrow": { "alias": "kbqTooltipArrow"; "required": false; }; "offset": { "alias": "kbqTooltipOffset"; "required": false; }; "modifier": { "alias": "kbqTooltipModifier"; "required": false; }; "header": { "alias": "kbqTooltipHeader"; "required": false; }; }, { "placementChange": "kbqPlacementChange"; "visibleChange": "kbqVisibleChange"; }, never, never, true, never>;
151
267
  static ngAcceptInputType_hideWithTimeout: unknown;
152
268
  static ngAcceptInputType_relativeToPointer: unknown;
153
269
  static ngAcceptInputType_arrow: unknown;
@@ -160,4 +276,5 @@ declare class KbqToolTipModule {
160
276
  static ɵinj: i0.ɵɵInjectorDeclaration<KbqToolTipModule>;
161
277
  }
162
278
 
163
- export { KBQ_TOOLTIP_OPEN_TIME, KBQ_TOOLTIP_OPEN_TIME_PROVIDER, KBQ_TOOLTIP_SCROLL_STRATEGY, KBQ_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER, KbqToolTipModule, KbqTooltipComponent, KbqTooltipTrigger, MIN_TIME_FOR_DELAY, TooltipModifier, kbqTooltipScrollStrategyFactory };
279
+ export { KBQ_TOOLTIP_OPEN_TIME, KBQ_TOOLTIP_OPEN_TIME_PROVIDER, KBQ_TOOLTIP_SCROLL_STRATEGY, KBQ_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER, KBQ_TOOLTIP_SINGLE_INSTANCE_DEFAULT, KbqToolTipModule, KbqTooltipComponent, KbqTooltipRegistry, KbqTooltipTrigger, MIN_TIME_FOR_DELAY, TooltipModifier, kbqTooltipScrollStrategyFactory };
280
+ export type { KbqExclusiveTooltip };
@@ -11,11 +11,6 @@
11
11
  color: var(--kbq-tree-#{$state-name}-text-color);
12
12
  }
13
13
 
14
- .kbq-tree-node-toggle .kbq-icon.kbq-empty,
15
- .kbq-icon.kbq-empty.kbq-tree-node-toggle {
16
- color: var(--kbq-tree-#{$state-name}-tree-toggle-color);
17
- }
18
-
19
14
  .kbq-option-action .kbq-icon.kbq-empty {
20
15
  color: var(--kbq-tree-#{$state-name}-action-button-color);
21
16
  }
@@ -69,7 +64,7 @@
69
64
  &.kbq-disabled {
70
65
  @include kbq-tree-option(states-disabled);
71
66
 
72
- & .kbq-icon.kbq-empty {
67
+ & .kbq-icon.kbq-empty:not(.kbq-tree-node-toggle .kbq-icon) {
73
68
  color: var(--kbq-states-icon-disabled);
74
69
  }
75
70
  }
@@ -91,7 +86,7 @@
91
86
  @include kbq-typography-level-to-styles-css-variables(typography, text-normal);
92
87
  }
93
88
 
94
- .kbq-tree-option-caption {
89
+ .kbq-option-caption {
95
90
  @include kbq-typography-level-to-styles-css-variables(typography, text-compact);
96
91
  }
97
92
  }
package/tree/index.d.ts CHANGED
@@ -605,9 +605,15 @@ declare class KbqTreeSelection extends KbqTreeBase<any> implements ControlValueA
605
605
  private elementRef;
606
606
  private scheduler;
607
607
  private clipboard;
608
+ private readonly platform;
608
609
  protected readonly focusMonitor: FocusMonitor;
609
- /** Indicates whether this component is placed inside a KbqFormField component. */
610
- protected readonly inSelect: boolean;
610
+ /**
611
+ * Whether this tree-selection is rendered inside a select panel (enables option
612
+ * hover-to-focus). Defaults to detecting a wrapping `KbqFormField`, and is forced to `true`
613
+ * by the host `KbqTreeSelect` so hover works even when the tree-select has no form-field
614
+ * wrapper (e.g. the filter-bar pipes render the tree-select bare).
615
+ */
616
+ inSelect: boolean;
611
617
  renderedOptions: QueryList<KbqTreeOption>;
612
618
  keyManager: FocusKeyManager<KbqTreeOption>;
613
619
  selectionModel: SelectionModel<SelectionModelOption>;
@@ -633,6 +639,8 @@ declare class KbqTreeSelection extends KbqTreeBase<any> implements ControlValueA
633
639
  get noUnselectLast(): boolean;
634
640
  set noUnselectLast(value: boolean);
635
641
  private _noUnselectLast;
642
+ /** When `true`, a repeated Ctrl/Cmd+A deselects all options. Off by default (Ctrl+A only selects). */
643
+ readonly selectAllToggle: i0.InputSignalWithTransform<boolean, unknown>;
636
644
  get disabled(): boolean;
637
645
  set disabled(rawValue: boolean);
638
646
  private _disabled;
@@ -660,7 +668,14 @@ declare class KbqTreeSelection extends KbqTreeBase<any> implements ControlValueA
660
668
  renderNodeChanges(data: KbqTreeOption[], dataDiffer?: IterableDiffer<KbqTreeOption>, viewContainer?: ViewContainerRef, parentData?: KbqTreeOption): void;
661
669
  emitNavigationEvent(option: KbqTreeOption): void;
662
670
  emitChangeEvent(option: KbqTreeOption): void;
663
- selectAllOptions(): void;
671
+ /**
672
+ * Function for handling the combination Ctrl + A (select all). By default, the internal handler is used,
673
+ * which toggles the selection of all non-disabled, selectable options.
674
+ */
675
+ get selectAllHandler(): (event: KeyboardEvent, tree: KbqTreeSelection) => void;
676
+ set selectAllHandler(fn: (event: KeyboardEvent, tree: KbqTreeSelection) => void);
677
+ private _selectAllHandler;
678
+ selectAllOptions(allowDeselect?: boolean): void;
664
679
  copyActiveOption(event: KeyboardEvent): void;
665
680
  writeValue(value: any): void;
666
681
  /** `View -> model callback called when value changes` */
@@ -705,7 +720,7 @@ declare class KbqTreeSelection extends KbqTreeBase<any> implements ControlValueA
705
720
  private canDeselectLast;
706
721
  private isFocusReceivedFromNestedOption;
707
722
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqTreeSelection, never>;
708
- static ɵcmp: i0.ɵɵComponentDeclaration<KbqTreeSelection, "kbq-tree-selection", ["kbqTreeSelection"], { "treeControl": { "alias": "treeControl"; "required": false; }; "autoSelect": { "alias": "autoSelect"; "required": false; }; "noUnselectLast": { "alias": "noUnselectLast"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; }, { "navigationChange": "navigationChange"; "selectionChange": "selectionChange"; "onSelectAll": "onSelectAll"; "onCopy": "onCopy"; }, ["unorderedOptions"], never, true, never>;
723
+ static ɵcmp: i0.ɵɵComponentDeclaration<KbqTreeSelection, "kbq-tree-selection", ["kbqTreeSelection"], { "treeControl": { "alias": "treeControl"; "required": false; }; "autoSelect": { "alias": "autoSelect"; "required": false; }; "noUnselectLast": { "alias": "noUnselectLast"; "required": false; }; "selectAllToggle": { "alias": "selectAllToggle"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; "selectAllHandler": { "alias": "selectAllHandler"; "required": false; }; }, { "navigationChange": "navigationChange"; "selectionChange": "selectionChange"; "onSelectAll": "onSelectAll"; "onCopy": "onCopy"; }, ["unorderedOptions"], never, true, never>;
709
724
  }
710
725
 
711
726
  declare class KbqTreeModule {
package/tree/toggle.scss CHANGED
@@ -9,6 +9,7 @@
9
9
  flex-shrink: 0;
10
10
 
11
11
  height: 100%;
12
+
12
13
  // FIXME: default token doesn't exist
13
14
  padding-left: var(--kbq-tree-size-toggle-padding);
14
15
  padding-right: var(--kbq-tree-size-toggle-padding);
@@ -27,6 +28,10 @@
27
28
 
28
29
  &[disabled] {
29
30
  cursor: default;
31
+
32
+ & .kbq-icon {
33
+ color: var(--kbq-tree-states-disabled-tree-toggle-color);
34
+ }
30
35
  }
31
36
  }
32
37
 
@@ -70,10 +70,6 @@
70
70
  outline: none;
71
71
  }
72
72
 
73
- &.kbq-disabled .kbq-icon {
74
- cursor: default;
75
- }
76
-
77
73
  &:not(.kbq-disabled) {
78
74
  cursor: pointer;
79
75
 
@@ -9,7 +9,7 @@
9
9
  &.kbq-control_has-validate-directive.ng-invalid,
10
10
  // Invalid by control `ErrorStateMatcher`
11
11
  &.kbq-invalid {
12
- color: var(--kbq-error-default);
12
+ color: var(--kbq-foreground-error);
13
13
 
14
14
  .kbq-select__placeholder {
15
15
  color: var(--kbq-form-field-states-error-placeholder);