@koobiq/components 20.2.0 → 20.3.1

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 (213) hide show
  1. package/accordion/_accordion-theme.scss +5 -1
  2. package/accordion/accordion-tokens.scss +2 -0
  3. package/accordion/accordion-trigger.scss +6 -0
  4. package/accordion/accordion.scss +21 -0
  5. package/accordion/index.d.ts +55 -8
  6. package/actions-panel/index.d.ts +25 -13
  7. package/app-switcher/app-switcher-dropdown-app.scss +7 -5
  8. package/app-switcher/app-switcher-dropdown-site.scss +6 -4
  9. package/app-switcher/index.d.ts +41 -4
  10. package/app-switcher/kbq-app-switcher-list-item.scss +6 -8
  11. package/autocomplete/index.d.ts +24 -9
  12. package/breadcrumbs/index.d.ts +1 -1
  13. package/button/index.d.ts +2 -2
  14. package/button-toggle/button-toggle-tokens.scss +2 -0
  15. package/button-toggle/button-toggle.scss +9 -0
  16. package/button-toggle/index.d.ts +5 -0
  17. package/checkbox/index.d.ts +33 -29
  18. package/clamped-text/index.d.ts +1 -1
  19. package/code-block/index.d.ts +24 -19
  20. package/content-panel/index.d.ts +1 -1
  21. package/core/index.d.ts +1125 -199
  22. package/core/option/_action-container-mixins.scss +28 -0
  23. package/core/option/_option-theme.scss +24 -0
  24. package/core/option/action.scss +7 -0
  25. package/core/styles/_koobiq-theme.scss +2 -0
  26. package/core/styles/_tokens.scss +1 -0
  27. package/core/styles/common/_connected-overlay.scss +6 -3
  28. package/core/styles/common/_select.scss +12 -0
  29. package/core/styles/common/_tokens.scss +0 -9
  30. package/core/styles/theming/_index.scss +0 -1
  31. package/core/styles/theming/_theming.scss +34 -5
  32. package/datepicker/index.d.ts +46 -15
  33. package/dl/dl.scss +26 -0
  34. package/dl/index.d.ts +8 -1
  35. package/dropdown/_dropdown-theme.scss +28 -2
  36. package/dropdown/dropdown-item.scss +13 -0
  37. package/dropdown/dropdown.scss +7 -1
  38. package/dropdown/index.d.ts +264 -17
  39. package/dynamic-translation/index.d.ts +1 -1
  40. package/fesm2022/koobiq-components-accordion.mjs +106 -46
  41. package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
  42. package/fesm2022/koobiq-components-actions-panel.mjs +57 -46
  43. package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
  44. package/fesm2022/koobiq-components-alert.mjs +16 -16
  45. package/fesm2022/koobiq-components-app-switcher.mjs +233 -38
  46. package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
  47. package/fesm2022/koobiq-components-autocomplete.mjs +54 -31
  48. package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
  49. package/fesm2022/koobiq-components-badge.mjs +13 -13
  50. package/fesm2022/koobiq-components-breadcrumbs.mjs +25 -25
  51. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  52. package/fesm2022/koobiq-components-button-toggle.mjs +17 -12
  53. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  54. package/fesm2022/koobiq-components-button.mjs +25 -25
  55. package/fesm2022/koobiq-components-checkbox.mjs +69 -92
  56. package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
  57. package/fesm2022/koobiq-components-clamped-text.mjs +13 -13
  58. package/fesm2022/koobiq-components-code-block.mjs +56 -69
  59. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  60. package/fesm2022/koobiq-components-content-panel.mjs +29 -29
  61. package/fesm2022/koobiq-components-core.mjs +2454 -795
  62. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  63. package/fesm2022/koobiq-components-datepicker.mjs +160 -121
  64. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  65. package/fesm2022/koobiq-components-divider.mjs +7 -7
  66. package/fesm2022/koobiq-components-dl.mjs +23 -15
  67. package/fesm2022/koobiq-components-dl.mjs.map +1 -1
  68. package/fesm2022/koobiq-components-dropdown.mjs +754 -155
  69. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  70. package/fesm2022/koobiq-components-dynamic-translation.mjs +13 -13
  71. package/fesm2022/koobiq-components-ellipsis-center.mjs +7 -7
  72. package/fesm2022/koobiq-components-empty-state.mjs +19 -19
  73. package/fesm2022/koobiq-components-file-upload.mjs +74 -42
  74. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  75. package/fesm2022/koobiq-components-filter-bar.mjs +605 -192
  76. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  77. package/fesm2022/koobiq-components-flag.mjs +7 -7
  78. package/fesm2022/koobiq-components-form-field.mjs +359 -165
  79. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  80. package/fesm2022/koobiq-components-icon.mjs +39 -21
  81. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  82. package/fesm2022/koobiq-components-inline-edit.mjs +172 -27
  83. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
  84. package/fesm2022/koobiq-components-input.mjs +41 -24
  85. package/fesm2022/koobiq-components-input.mjs.map +1 -1
  86. package/fesm2022/koobiq-components-link.mjs +8 -8
  87. package/fesm2022/koobiq-components-list.mjs +657 -143
  88. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  89. package/fesm2022/koobiq-components-loader-overlay.mjs +16 -16
  90. package/fesm2022/koobiq-components-markdown.mjs +14 -11
  91. package/fesm2022/koobiq-components-markdown.mjs.map +1 -1
  92. package/fesm2022/koobiq-components-modal.mjs +70 -38
  93. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  94. package/fesm2022/koobiq-components-navbar.mjs +69 -54
  95. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  96. package/fesm2022/koobiq-components-notification-center.mjs +23 -22
  97. package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
  98. package/fesm2022/koobiq-components-overflow-items.mjs +16 -17
  99. package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
  100. package/fesm2022/koobiq-components-popover.mjs +26 -21
  101. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  102. package/fesm2022/koobiq-components-progress-bar.mjs +13 -13
  103. package/fesm2022/koobiq-components-progress-spinner.mjs +13 -13
  104. package/fesm2022/koobiq-components-radio.mjs +10 -10
  105. package/fesm2022/koobiq-components-resizer.mjs +33 -14
  106. package/fesm2022/koobiq-components-resizer.mjs.map +1 -1
  107. package/fesm2022/koobiq-components-scrollbar.mjs +10 -10
  108. package/fesm2022/koobiq-components-search-expandable.mjs +7 -7
  109. package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
  110. package/fesm2022/koobiq-components-select.mjs +420 -107
  111. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  112. package/fesm2022/koobiq-components-sidebar.mjs +14 -14
  113. package/fesm2022/koobiq-components-sidepanel.mjs +26 -26
  114. package/fesm2022/koobiq-components-skeleton.mjs +10 -10
  115. package/fesm2022/koobiq-components-split-button.mjs +7 -7
  116. package/fesm2022/koobiq-components-splitter.mjs +17 -17
  117. package/fesm2022/koobiq-components-table.mjs +15 -13
  118. package/fesm2022/koobiq-components-table.mjs.map +1 -1
  119. package/fesm2022/koobiq-components-tabs.mjs +56 -58
  120. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  121. package/fesm2022/koobiq-components-tags.mjs +283 -122
  122. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  123. package/fesm2022/koobiq-components-textarea.mjs +13 -8
  124. package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
  125. package/fesm2022/koobiq-components-time-range.mjs +29 -24
  126. package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
  127. package/fesm2022/koobiq-components-timepicker.mjs +58 -26
  128. package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
  129. package/fesm2022/koobiq-components-timezone.mjs +76 -39
  130. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  131. package/fesm2022/koobiq-components-title.mjs +7 -7
  132. package/fesm2022/koobiq-components-toast.mjs +51 -26
  133. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  134. package/fesm2022/koobiq-components-toggle.mjs +72 -64
  135. package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
  136. package/fesm2022/koobiq-components-tooltip.mjs +115 -36
  137. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  138. package/fesm2022/koobiq-components-top-bar.mjs +13 -13
  139. package/fesm2022/koobiq-components-tree-select.mjs +190 -56
  140. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  141. package/fesm2022/koobiq-components-tree.mjs +302 -81
  142. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  143. package/fesm2022/koobiq-components-username.mjs +27 -27
  144. package/file-upload/index.d.ts +25 -6
  145. package/file-upload/multiple-file-upload.component.scss +14 -0
  146. package/filter-bar/_filter-bar-theme.scss +0 -6
  147. package/filter-bar/index.d.ts +222 -9
  148. package/filter-bar/pipes/pipe-multi-tree-select.scss +0 -6
  149. package/filter-bar/pipes/pipe-multiselect.scss +0 -6
  150. package/filter-bar/pipes/pipe-tree-select.scss +0 -6
  151. package/form-field/_form-field-theme.scss +76 -20
  152. package/form-field/fieldset.scss +10 -0
  153. package/form-field/form-field-tokens.scss +15 -1
  154. package/form-field/form-field.scss +15 -19
  155. package/form-field/index.d.ts +148 -68
  156. package/icon/index.d.ts +31 -6
  157. package/inline-edit/index.d.ts +57 -4
  158. package/inline-edit/inline-edit.scss +10 -0
  159. package/input/index.d.ts +17 -2
  160. package/list/_list-theme.scss +42 -10
  161. package/list/index.d.ts +326 -79
  162. package/list/list-tokens.scss +43 -8
  163. package/list/list.scss +186 -12
  164. package/markdown/index.d.ts +1 -1
  165. package/modal/index.d.ts +22 -5
  166. package/modal/modal-tokens.scss +1 -1
  167. package/navbar/index.d.ts +16 -1
  168. package/navbar/navbar-brand.scss +6 -0
  169. package/navbar/vertical-navbar.scss +6 -0
  170. package/notification-center/notification-item.scss +6 -0
  171. package/package.json +3 -6
  172. package/popover/index.d.ts +2 -2
  173. package/prebuilt-themes/dark-theme.css +1 -1
  174. package/prebuilt-themes/light-theme.css +1 -1
  175. package/prebuilt-themes/theme.css +1 -1
  176. package/resizer/index.d.ts +12 -0
  177. package/schematics/migrations/deprecated-icons/README.md +29 -4
  178. package/schematics/migrations/deprecated-icons/data.js +7 -0
  179. package/schematics/migrations/deprecated-icons/index.js +62 -35
  180. package/schematics/migrations/new-icons-pack/README.md +37 -2
  181. package/schematics/migrations/new-icons-pack/data.js +8 -0
  182. package/schematics/migrations/new-icons-pack/index.js +144 -53
  183. package/schematics/ng-add/index.js +3 -3
  184. package/schematics/utils/angular-parsing.js +30 -12
  185. package/schematics/utils/ast.js +31 -0
  186. package/schematics/utils/icon-migration.js +530 -0
  187. package/schematics/utils/typescript.js +44 -0
  188. package/scrollbar/index.d.ts +1 -1
  189. package/select/index.d.ts +163 -18
  190. package/select/select-tokens.scss +0 -1
  191. package/select/select.scss +0 -2
  192. package/splitter/index.d.ts +1 -1
  193. package/table/_table-theme.scss +4 -0
  194. package/table/index.d.ts +2 -1
  195. package/table/table.scss +8 -0
  196. package/tabs/index.d.ts +0 -1
  197. package/tags/index.d.ts +128 -29
  198. package/textarea/index.d.ts +5 -0
  199. package/time-range/index.d.ts +1 -1
  200. package/timepicker/index.d.ts +4 -0
  201. package/timezone/index.d.ts +9 -5
  202. package/toast/index.d.ts +26 -3
  203. package/toggle/index.d.ts +34 -14
  204. package/tooltip/index.d.ts +54 -11
  205. package/tree/_tree-theme.scss +25 -5
  206. package/tree/index.d.ts +71 -3
  207. package/tree/tree-option.scss +2 -8
  208. package/tree-select/_tree-select-theme.scss +22 -0
  209. package/tree-select/index.d.ts +83 -16
  210. package/core/styles/_tokens.kbq.import.scss +0 -4
  211. package/core/styles/theming/_components-theming.scss +0 -1927
  212. package/filter-bar/pipes/pipe-select.scss +0 -5
  213. package/overflow-items/overflow-items.scss +0 -20
@@ -1,20 +1,108 @@
1
- import { KbqIconButton } from '@koobiq/components/icon';
2
1
  import * as i0 from '@angular/core';
3
- import { Signal, AfterContentInit, QueryList, AfterViewInit, OnDestroy, ChangeDetectorRef, TemplateRef, OutputEmitterRef, InjectionToken, Provider, AfterContentChecked, ElementRef } from '@angular/core';
4
- import { KbqColorDirective, KbqComponentColors } from '@koobiq/components/core';
5
- import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';
2
+ import { Signal, InjectionToken, AfterContentInit, Provider, QueryList, AfterViewInit, OnDestroy, ChangeDetectorRef, TemplateRef, OutputEmitterRef, AfterContentChecked, ElementRef } from '@angular/core';
3
+ import { KbqIconButton } from '@koobiq/components/icon';
6
4
  import { NgControl } from '@angular/forms';
7
5
  import { Observable, Subject } from 'rxjs';
6
+ import { KbqColorDirective, KbqComponentColors } from '@koobiq/components/core';
7
+ import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';
8
8
  import { KbqTooltipTrigger } from '@koobiq/components/tooltip';
9
9
 
10
+ /** An interface which allows a control to work inside of a `KbqFormField`. */
11
+ declare abstract class KbqFormFieldControl<T> {
12
+ /** The value of the control. */
13
+ value: T | null;
14
+ /**
15
+ * Stream that emits whenever the state of the control changes such that the parent `KbqFormField`
16
+ * needs to run change detection.
17
+ */
18
+ readonly stateChanges: Observable<void>;
19
+ /** The element ID for this control. */
20
+ readonly id: string;
21
+ /** The placeholder for this control. */
22
+ readonly placeholder: string;
23
+ /** Gets the NgControl for this control. */
24
+ readonly ngControl: NgControl | null;
25
+ /** Whether the control is focused. */
26
+ readonly focused: boolean;
27
+ /** Whether the control is empty. */
28
+ readonly empty: boolean;
29
+ /** Whether the control is required. */
30
+ readonly required: boolean;
31
+ /** Whether the control is disabled. */
32
+ readonly disabled: boolean;
33
+ /** Whether the control is in an error state. */
34
+ readonly errorState: boolean;
35
+ /**
36
+ * Whether the control's value was filled in by the browser.
37
+ *
38
+ * Implement it only where autofill is reachable: on a control that is itself a text input or a
39
+ * textarea, or — like `KbqTagList` — on a wrapper that forwards the state of the input it hosts.
40
+ * Leave it out on controls the browser never fills.
41
+ *
42
+ * A signal rather than a plain property because the form field reads it from a host binding and
43
+ * runs `OnPush`: a signal read there marks the form field dirty on its own.
44
+ */
45
+ readonly autofilled?: Signal<boolean>;
46
+ /**
47
+ * An optional name for the control type that can be used to distinguish `kbq-form-field` elements
48
+ * based on their control type. The form field will add a class,
49
+ * `kbq-form-field-type-{{controlType}}` to its root element.
50
+ */
51
+ readonly controlType?: string;
52
+ /** Handles a click on the control's container. */
53
+ abstract onContainerClick(event: MouseEvent): void;
54
+ /** Focuses the control. */
55
+ abstract focus(options?: FocusOptions): void;
56
+ /** Opens control's overlay. */
57
+ abstract open?(): void;
58
+ }
59
+
60
+ /** @docs-private */
61
+ interface KbqCleanerContext {
62
+ readonly control: KbqFormFieldControl<unknown>;
63
+ readonly keydownTarget: HTMLElement;
64
+ readonly clearByEscape: boolean;
65
+ /** Overrides the default `cleanerControl.ngControl?.reset()` behavior when the cleaner is activated. */
66
+ clear?(): void;
67
+ }
68
+ /** @docs-private */
69
+ declare const KBQ_CLEANER_CONTEXT: InjectionToken<KbqCleanerContext | null>;
70
+ /**
71
+ * Utility provider for `KBQ_CLEANER_CONTEXT`, built from a factory that resolves the current host's `KbqCleanerContext`.
72
+ * @docs-private
73
+ */
74
+ declare const kbqCleanerFactoryProvider: (factory: () => KbqCleanerContext) => Provider;
75
+ /** @docs-private */
76
+ declare function getKbqFormFieldYouCanNotUseCleanerInNumberInputError(): Error;
10
77
  /**
11
78
  * Element to be placed in end of the form field.
12
79
  * Resets form control by click.
13
80
  */
14
- declare class KbqCleaner extends KbqIconButton {
81
+ declare class KbqCleaner extends KbqIconButton implements AfterContentInit {
82
+ private readonly context;
83
+ /**
84
+ * Whether the cleaner can be displayed for the current control state.
85
+ * @docs-private
86
+ */
87
+ get canShow(): boolean;
88
+ private readonly a11yLocaleConfiguration;
89
+ /** Accessible name of the cleaner. Defaults to the localized "Clear". */
90
+ readonly ariaLabel: i0.InputSignal<string | undefined>;
91
+ /** @docs-private */
92
+ protected readonly accessibleName: i0.Signal<string>;
15
93
  constructor();
94
+ ngAfterContentInit(): void;
95
+ /**
96
+ * Clears the owning control in response to pointer or keyboard activation.
97
+ * @docs-private
98
+ */
99
+ clear(event: Event): void;
100
+ /**
101
+ * Clears the focused control when Escape handling is enabled.
102
+ */
103
+ private onKeyDown;
16
104
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqCleaner, never>;
17
- static ɵcmp: i0.ɵɵComponentDeclaration<KbqCleaner, "kbq-cleaner", ["kbqCleaner"], {}, {}, never, ["*"], true, never>;
105
+ static ɵcmp: i0.ɵɵComponentDeclaration<KbqCleaner, "kbq-cleaner", ["kbqCleaner"], { "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
18
106
  }
19
107
 
20
108
  /** Hint text to be shown below the form field control. */
@@ -64,45 +152,6 @@ declare class KbqFieldset {
64
152
  static ɵcmp: i0.ɵɵComponentDeclaration<KbqFieldset, "kbq-fieldset", never, {}, {}, ["legend"], ["[kbqLegend]", "*", "kbq-error", "kbq-hint, kbq-password-hint, kbq-reactive-password-hint"], true, never>;
65
153
  }
66
154
 
67
- /** An interface which allows a control to work inside of a `KbqFormField`. */
68
- declare abstract class KbqFormFieldControl<T> {
69
- /** The value of the control. */
70
- value: T | null;
71
- /**
72
- * Stream that emits whenever the state of the control changes such that the parent `KbqFormField`
73
- * needs to run change detection.
74
- */
75
- readonly stateChanges: Observable<void>;
76
- /** The element ID for this control. */
77
- readonly id: string;
78
- /** The placeholder for this control. */
79
- readonly placeholder: string;
80
- /** Gets the NgControl for this control. */
81
- readonly ngControl: NgControl | null;
82
- /** Whether the control is focused. */
83
- readonly focused: boolean;
84
- /** Whether the control is empty. */
85
- readonly empty: boolean;
86
- /** Whether the control is required. */
87
- readonly required: boolean;
88
- /** Whether the control is disabled. */
89
- readonly disabled: boolean;
90
- /** Whether the control is in an error state. */
91
- readonly errorState: boolean;
92
- /**
93
- * An optional name for the control type that can be used to distinguish `kbq-form-field` elements
94
- * based on their control type. The form field will add a class,
95
- * `kbq-form-field-type-{{controlType}}` to its root element.
96
- */
97
- readonly controlType?: string;
98
- /** Handles a click on the control's container. */
99
- abstract onContainerClick(event: MouseEvent): void;
100
- /** Focuses the control. */
101
- abstract focus(options?: FocusOptions): void;
102
- /** Opens control's overlay. */
103
- abstract open?(): void;
104
- }
105
-
106
155
  declare enum PasswordRules {
107
156
  Length = 0,
108
157
  UpperLatin = 1,
@@ -157,14 +206,20 @@ declare class KbqPasswordToggle extends KbqTooltipTrigger implements AfterViewIn
157
206
  protected readonly nativeElement: HTMLElement;
158
207
  protected readonly focusMonitor: FocusMonitor;
159
208
  protected readonly changeDetectorRef: ChangeDetectorRef;
209
+ private readonly a11yLocaleConfiguration;
160
210
  private readonly formField;
161
211
  readonly tabindex: i0.InputSignalWithTransform<number, unknown>;
162
212
  /**
163
213
  * @docs-private
164
214
  */
165
215
  readonly icon: i0.Signal<KbqIconButton>;
216
+ /**
217
+ * Tooltip shown while the password is visible. Reading it resolves to the tooltip matching the current
218
+ * visibility, so that the base trigger renders the right one.
219
+ */
166
220
  get content(): string | TemplateRef<any>;
167
221
  set content(content: string | TemplateRef<any>);
222
+ /** Tooltip shown while the password is hidden. */
168
223
  readonly kbqTooltipHidden: i0.InputSignal<string | TemplateRef<any>>;
169
224
  protected hasError: boolean;
170
225
  /** Form field password control. */
@@ -181,23 +236,24 @@ declare class KbqPasswordToggle extends KbqTooltipTrigger implements AfterViewIn
181
236
  * @docs-private
182
237
  */
183
238
  get visibility(): 'hidden' | 'visible';
184
- constructor();
185
239
  /**
240
+ * Accessible name of the icon-only toggle, describing the action it performs.
241
+ *
186
242
  * @docs-private
187
243
  */
244
+ protected get accessibleName(): string;
245
+ constructor();
188
246
  ngAfterContentInit(): void;
189
- /**
190
- * @docs-private
191
- */
192
247
  ngAfterViewInit(): void;
248
+ ngOnDestroy(): void;
193
249
  /**
194
250
  * @docs-private
195
251
  */
196
- ngOnDestroy(): void;
252
+ toggle(event: Event): void;
197
253
  /**
198
- * @docs-private
254
+ * Toggles password visibility for the Alt+F8 shortcut.
199
255
  */
200
- toggle(event: KeyboardEvent): void;
256
+ private onFormFieldKeyDown;
201
257
  private updateState;
202
258
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqPasswordToggle, never>;
203
259
  static ɵcmp: i0.ɵɵComponentDeclaration<KbqPasswordToggle, "kbq-password-toggle", ["kbqPasswordToggle"], { "tabindex": { "alias": "tabindex"; "required": false; "isSignal": true; }; "content": { "alias": "kbqTooltipNotHidden"; "required": false; }; "kbqTooltipHidden": { "alias": "kbqTooltipHidden"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
@@ -209,10 +265,16 @@ declare class KbqPrefix {
209
265
  static ɵdir: i0.ɵɵDirectiveDeclaration<KbqPrefix, "[kbqPrefix]", ["kbqPrefix"], {}, {}, never, never, true, never>;
210
266
  }
211
267
 
212
- type KbqNumberInput = KbqFormFieldControl<unknown> & {
268
+ /**
269
+ * Narrow structural contract for the control hosted by `kbqNumberInput`, duck-typed here to avoid
270
+ * a circular dependency between `@koobiq/components/form-field` and `@koobiq/components/input`.
271
+ */
272
+ type KbqStepperControl = KbqFormFieldControl<unknown> & {
273
+ readonly controlType: 'input-number';
274
+ readonly step: number;
213
275
  stepUp: (step: number) => void;
276
+ /** Decreases the value by `step`. */
214
277
  stepDown: (step: number) => void;
215
- step: number;
216
278
  };
217
279
  /**
218
280
  * Timeout duration when clicking the up/down arrow
@@ -228,6 +290,7 @@ declare const KBQ_STEPPER_INTERVAL_DELAY = 75;
228
290
  declare class KbqStepper {
229
291
  private readonly formField;
230
292
  private readonly document;
293
+ private readonly destroyRef;
231
294
  /** Emitted when the stepper is incremented. */
232
295
  readonly stepUp: OutputEmitterRef<void>;
233
296
  /** Emitted when the stepper is decremented. */
@@ -246,19 +309,21 @@ declare class KbqStepper {
246
309
  */
247
310
  private readonly longPress;
248
311
  /**
249
- * Form field number control.
312
+ * Form field number control. Resolved once per control change instead of on every template read.
250
313
  *
251
314
  * @docs-private
252
315
  */
253
- protected get control(): KbqNumberInput;
316
+ protected readonly control: i0.Signal<KbqStepperControl>;
317
+ constructor();
254
318
  /**
319
+ * @deprecated No longer required — `KbqStepper` resolves its control automatically via DI.
255
320
  * @docs-private
256
321
  */
257
- connectTo(numberInput: KbqNumberInput): void;
322
+ connectTo(_: any): void;
258
323
  /** @docs-private */
259
- onStepUp($event: MouseEvent): void;
324
+ onStepUp(event: MouseEvent): void;
260
325
  /** @docs-private */
261
- onStepDown($event: MouseEvent): void;
326
+ onStepDown(event: MouseEvent): void;
262
327
  private handleStep;
263
328
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqStepper, never>;
264
329
  static ɵcmp: i0.ɵɵComponentDeclaration<KbqStepper, "kbq-stepper", ["kbqStepper"], {}, { "stepUp": "stepUp"; "stepDown": "stepDown"; }, never, never, true, never>;
@@ -272,8 +337,11 @@ declare class KbqSuffix {
272
337
 
273
338
  /** @docs-private */
274
339
  declare function getKbqFormFieldMissingControlError(): Error;
275
- /** @docs-private */
276
- declare function getKbqFormFieldYouCanNotUseCleanerInNumberInputError(): Error;
340
+ /**
341
+ * Injection token used to access the owning `KbqFormField`.
342
+ * @docs-private
343
+ */
344
+ declare const KBQ_FORM_FIELD: InjectionToken<KbqFormField>;
277
345
  /**
278
346
  * Default options for the kbq-form-field that can be configured using the `KBQ_FORM_FIELD_DEFAULT_OPTIONS`
279
347
  * injection token.
@@ -292,6 +360,7 @@ type KbqFormFieldDefaultOptions = Partial<{
292
360
  }>;
293
361
  /**
294
362
  * Injection token that can be used to configure the default options for all kbq-form-field's.
363
+ * @docs-private
295
364
  */
296
365
  declare const KBQ_FORM_FIELD_DEFAULT_OPTIONS: InjectionToken<Partial<{
297
366
  /** Disables form field borders and shadows. */
@@ -313,6 +382,7 @@ declare class KbqFormField extends KbqColorDirective implements AfterContentInit
313
382
  private readonly changeDetectorRef;
314
383
  private readonly focusMonitor;
315
384
  private readonly defaultOptions;
385
+ private readonly customOverlayOrigin;
316
386
  /**
317
387
  * @docs-private
318
388
  */
@@ -376,6 +446,7 @@ declare class KbqFormField extends KbqColorDirective implements AfterContentInit
376
446
  hovered: boolean;
377
447
  /**
378
448
  * @docs-private
449
+ * @deprecated Unused. This property is no longer used by the form field and will be removed in a future version.
379
450
  */
380
451
  canCleanerClearByEsc: boolean;
381
452
  /** Whether the form field is invalid. */
@@ -457,6 +528,17 @@ declare class KbqFormField extends KbqColorDirective implements AfterContentInit
457
528
  get canShowCleaner(): boolean;
458
529
  /** Whether the form field is disabled. */
459
530
  get disabled(): boolean;
531
+ /**
532
+ * Whether the form field control's value was filled in by the browser. Controls that cannot be
533
+ * autofilled do not implement `autofilled`, and report `false` here.
534
+ *
535
+ * Reflected as `kbq-form-field_autofilled` for application code to key on. The autofill styling
536
+ * does not use it: CSS matches `:autofill` directly, in the same style pass the browser fills
537
+ * the field, where this arrives a frame or two later. Keeping the paint on one source also means
538
+ * a class left behind by a detached or re-attached control cannot tint a field the browser no
539
+ * longer considers autofilled.
540
+ */
541
+ get autofilled(): boolean;
460
542
  ngAfterContentInit(): void;
461
543
  ngAfterContentChecked(): void;
462
544
  ngAfterViewInit(): void;
@@ -475,10 +557,10 @@ declare class KbqFormField extends KbqColorDirective implements AfterContentInit
475
557
  onContainerClick(event: MouseEvent): void;
476
558
  /**
477
559
  * Handles keydown events.
478
- *
560
+ * @deprecated Unused. This method is no longer called by the form field and will be removed in a future version.
479
561
  * @docs-private
480
562
  */
481
- onKeyDown(event: KeyboardEvent): void;
563
+ onKeyDown(_event: KeyboardEvent): void;
482
564
  /**
483
565
  * @docs-private
484
566
  */
@@ -525,11 +607,9 @@ declare class KbqFormField extends KbqColorDirective implements AfterContentInit
525
607
  */
526
608
  declare class KbqTrim {
527
609
  private readonly noTrim;
528
- private ngControl;
529
- private original;
610
+ private readonly ngControl;
530
611
  constructor();
531
612
  trim(value: any): any;
532
- private registerOnChange;
533
613
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqTrim, never>;
534
614
  static ɵdir: i0.ɵɵDirectiveDeclaration<KbqTrim, "[kbqInput], [kbqTextarea]", ["KbqTrim"], {}, {}, never, never, true, never>;
535
615
  }
@@ -565,5 +645,5 @@ declare class KbqFormFieldModule {
565
645
  static ɵinj: i0.ɵɵInjectorDeclaration<KbqFormFieldModule>;
566
646
  }
567
647
 
568
- export { KBQ_FORM_FIELD_DEFAULT_OPTIONS, KBQ_STEPPER_INITIAL_TIMEOUT, KBQ_STEPPER_INTERVAL_DELAY, KbqCleaner, KbqError, KbqFieldset, KbqFieldsetItem, KbqFormField, KbqFormFieldControl, KbqFormFieldModule, KbqHint, KbqLabel, KbqLegend, KbqPasswordHint, KbqPasswordToggle, KbqPrefix, KbqReactivePasswordHint, KbqStepper, KbqSuffix, KbqTrim, PasswordRules, getKbqFormFieldMissingControlError, getKbqFormFieldYouCanNotUseCleanerInNumberInputError, hasPasswordStrengthError, kbqFormFieldDefaultOptionsProvider, regExpPasswordValidator };
569
- export type { KbqFormFieldDefaultOptions };
648
+ export { KBQ_CLEANER_CONTEXT, KBQ_FORM_FIELD, KBQ_FORM_FIELD_DEFAULT_OPTIONS, KBQ_STEPPER_INITIAL_TIMEOUT, KBQ_STEPPER_INTERVAL_DELAY, KbqCleaner, KbqError, KbqFieldset, KbqFieldsetItem, KbqFormField, KbqFormFieldControl, KbqFormFieldModule, KbqHint, KbqLabel, KbqLegend, KbqPasswordHint, KbqPasswordToggle, KbqPrefix, KbqReactivePasswordHint, KbqStepper, KbqSuffix, KbqTrim, PasswordRules, getKbqFormFieldMissingControlError, getKbqFormFieldYouCanNotUseCleanerInNumberInputError, hasPasswordStrengthError, kbqCleanerFactoryProvider, kbqFormFieldDefaultOptionsProvider, regExpPasswordValidator };
649
+ export type { KbqCleanerContext, KbqFormFieldDefaultOptions };
package/icon/index.d.ts CHANGED
@@ -1,11 +1,32 @@
1
1
  import * as i0 from '@angular/core';
2
- import { AfterContentInit, OnChanges, ElementRef, ChangeDetectorRef, DestroyRef, SimpleChanges, AfterViewInit, OnDestroy, InjectionToken, Provider } from '@angular/core';
2
+ import { InjectionToken, Provider, AfterContentInit, OnChanges, ElementRef, ChangeDetectorRef, DestroyRef, SimpleChanges, AfterViewInit, OnDestroy } from '@angular/core';
3
3
  import { FocusMonitor } from '@angular/cdk/a11y';
4
- import * as _koobiq_components_core from '@koobiq/components/core';
5
- import { KbqColorDirective } from '@koobiq/components/core';
6
4
  import { Observable, ReplaySubject } from 'rxjs';
5
+ import { KbqColorDirective } from '@koobiq/components/core';
7
6
  import { SafeResourceUrl, SafeHtml } from '@angular/platform-browser';
8
7
 
8
+ /**
9
+ * Narrow contract that lets `KbqIcon` react to a host's error state (e.g. `autoColor`) without
10
+ * depending on the host's concrete class.
11
+ * @docs-private
12
+ */
13
+ interface KbqIconErrorStateContext {
14
+ /** Whether the host is currently in an error state. */
15
+ readonly errorState: boolean;
16
+ /** Emits whenever the host's state changes, prompting `KbqIcon` to re-check `errorState`. */
17
+ readonly stateChanges: Observable<void>;
18
+ }
19
+ /**
20
+ * Injection token used by `KbqIcon` to look up its `KbqIconErrorStateContext`.
21
+ * @docs-private
22
+ */
23
+ declare const KBQ_ICON_ERROR_STATE_CONTEXT: InjectionToken<KbqIconErrorStateContext>;
24
+ /**
25
+ * Utility provider for `KBQ_ICON_ERROR_STATE_CONTEXT`, built from a factory that resolves the current host's `KbqIconErrorStateContext`.
26
+ * @docs-private
27
+ */
28
+ declare const kbqIconErrorStateContextFactoryProvider: (factory: () => KbqIconErrorStateContext) => Provider;
29
+
9
30
  interface KbqIconOptions {
10
31
  viewBox?: string;
11
32
  withCredentials?: boolean;
@@ -56,7 +77,11 @@ declare class KbqIconRegistry {
56
77
 
57
78
  declare class KbqIcon extends KbqColorDirective implements AfterContentInit, OnChanges {
58
79
  readonly elementRef: ElementRef<HTMLElement>;
59
- protected readonly formField: _koobiq_components_core.KbqFormFieldRef | null;
80
+ /**
81
+ * Host providing error state for `autoColor`, when the icon sits inside one (e.g. a form field).
82
+ * @docs-private
83
+ */
84
+ protected readonly errorStateContext: KbqIconErrorStateContext | null;
60
85
  protected readonly changeDetectorRef: ChangeDetectorRef;
61
86
  protected readonly registry: KbqIconRegistry | null;
62
87
  protected readonly destroyRef: DestroyRef;
@@ -171,5 +196,5 @@ declare class KbqIconModule {
171
196
  static ɵinj: i0.ɵɵInjectorDeclaration<KbqIconModule>;
172
197
  }
173
198
 
174
- export { KBQ_ICONS_CONFIG, KBQ_ICON_RESOLVER, KbqIcon, KbqIconButton, KbqIconItem, KbqIconModule, KbqIconRegistry, kbqIconsDictProvider, kbqIconsProvider, kbqIconsResolverProvider };
175
- export type { KbqIconButtonSize, KbqIconOptions, KbqIconResolver, KbqIconsConfig };
199
+ export { KBQ_ICONS_CONFIG, KBQ_ICON_ERROR_STATE_CONTEXT, KBQ_ICON_RESOLVER, KbqIcon, KbqIconButton, KbqIconItem, KbqIconModule, KbqIconRegistry, kbqIconErrorStateContextFactoryProvider, kbqIconsDictProvider, kbqIconsProvider, kbqIconsResolverProvider };
200
+ export type { KbqIconButtonSize, KbqIconErrorStateContext, KbqIconOptions, KbqIconResolver, KbqIconsConfig };
@@ -1,9 +1,10 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { ElementRef, TemplateRef } from '@angular/core';
3
- import { CdkConnectedOverlay, ScrollStrategy } from '@angular/cdk/overlay';
4
- import { PopUpPlacements, KbqComponentColors } from '@koobiq/components/core';
3
+ import { ScrollStrategy, CdkConnectedOverlay } from '@angular/cdk/overlay';
4
+ import { KbqConnectedOverlayOriginProvider, PopUpPlacements, KbqComponentColors } from '@koobiq/components/core';
5
5
  import { KbqDropdownTrigger } from '@koobiq/components/dropdown';
6
6
  import { KbqLabel, KbqFormField } from '@koobiq/components/form-field';
7
+ import { KbqSelect } from '@koobiq/components/select';
7
8
  import { KbqTooltipTrigger } from '@koobiq/components/tooltip';
8
9
  import * as i1 from '@angular/cdk/a11y';
9
10
 
@@ -37,11 +38,24 @@ declare class KbqInlineEditMenu {
37
38
  * This component is projecting edit/view mode templates and adds keyboard/pointer handlers.
38
39
  * Edit mode opens in a positioned overlay that matches the view mode width or can be customized.
39
40
  */
40
- declare class KbqInlineEdit {
41
+ declare class KbqInlineEdit implements KbqConnectedOverlayOriginProvider {
41
42
  private readonly overlay;
42
43
  private readonly document;
44
+ private readonly window;
43
45
  private readonly resizeObserver;
44
46
  protected readonly elementRef: ElementRef<HTMLElement>;
47
+ private readonly ngZone;
48
+ private readonly scrollDispatcher;
49
+ /**
50
+ * The validation tooltip is anchored inside the edit-mode overlay — an overlay inside another
51
+ * overlay. Its default `close()` scroll strategy would close it the moment either overlay's
52
+ * origin scrolls (including the programmatic scroll `showValidationTooltip()` uses to bring an
53
+ * invalid control into view), so it's overridden to `reposition()` here — passed directly as a
54
+ * per-instance override to this tooltip's `[kbqTooltipScrollStrategy]` input, rather than a DI
55
+ * override, so it doesn't leak into any `kbqTooltip` in projected content.
56
+ * @docs-private
57
+ */
58
+ protected readonly validationTooltipScrollStrategy: () => ScrollStrategy;
45
59
  /**
46
60
  * Whether to show save/cancel action buttons in edit mode.
47
61
  * @default false
@@ -94,6 +108,14 @@ declare class KbqInlineEdit {
94
108
  /** @docs-private */
95
109
  protected readonly formFieldRefList: _angular_core.Signal<readonly KbqFormField[]>;
96
110
  /** @docs-private */
111
+ protected readonly selectRef: _angular_core.Signal<KbqSelect | undefined>;
112
+ /**
113
+ * Whether edit mode contains a single-value select. When true, edit mode shows only the
114
+ * dropdown panel instead of a bordered field - see the "Select-style editor" example.
115
+ * @docs-private
116
+ */
117
+ protected readonly isSingleSelect: _angular_core.Signal<boolean>;
118
+ /** @docs-private */
97
119
  protected overlayOrigin: HTMLElement;
98
120
  /** @docs-private */
99
121
  protected readonly tooltipTrigger: _angular_core.Signal<KbqTooltipTrigger>;
@@ -126,15 +148,46 @@ declare class KbqInlineEdit {
126
148
  /** @docs-private */
127
149
  protected readonly colors: typeof KbqComponentColors;
128
150
  private initialValue;
151
+ /** Handle for an in-flight `showValidationTooltip()` scroll/settle request, if any. */
152
+ private validationTooltipScrollHandle;
129
153
  constructor();
130
154
  /** Manually switch mode */
131
155
  toggleMode(): void;
156
+ /**
157
+ * Implements `KbqConnectedOverlayOriginProvider`, letting a nested `KbqFormField`'s control
158
+ * anchor its overlay to this element instead of the form-field's own container.
159
+ * When no override is needed, the form-field falls back to its default.
160
+ * @docs-private
161
+ */
162
+ getConnectedOverlayOrigin(): ElementRef | undefined;
163
+ /** Saves the current value and returns to view mode, running the same validation as a normal save. */
164
+ commit(): void;
132
165
  /** @docs-private */
133
166
  protected onClick(event: Event): void;
134
167
  /** @docs-private */
135
168
  protected onAttach(): void;
136
169
  /** @docs-private */
137
170
  protected save($event?: Event): void;
171
+ /**
172
+ * Whether `overlayOrigin` is fully within the viewport and every registered `CdkScrollable`
173
+ * ancestor between it and the viewport. Ancestors without the `CdkScrollable` directive aren't
174
+ * visible to `ScrollDispatcher` and aren't checked — same limitation as the rest of overlay
175
+ * positioning.
176
+ */
177
+ private isOverlayOriginFullyVisible;
178
+ /**
179
+ * Shows the validation tooltip, scrolling the invalid control into view first if it isn't fully visible.
180
+ *
181
+ * `scrollIntoView({ behavior: 'smooth' })` finishes asynchronously — for a long scroll distance it can take
182
+ * a while — so showing the tooltip right away would anchor its overlay to a stale, pre-scroll position.
183
+ * `scrollend` reports when the scroll actually completes; the timeout is a fallback for browsers without
184
+ * `scrollend` support and cases where nothing ends up scrolling.
185
+ *
186
+ * TODO(DS-5420): "scroll an element into view, then act once settled" isn't inline-edit-specific — worth
187
+ * extracting into `packages/components/core` in a follow-up. Kept local to this fix for now.
188
+ */
189
+ private showValidationTooltip;
190
+ private showValidationTooltipIfStillInvalid;
138
191
  /** @docs-private */
139
192
  protected cancel(): void;
140
193
  /** @docs-private */
@@ -163,7 +216,7 @@ declare class KbqInlineEdit {
163
216
  private getInputNativeElement;
164
217
  private markAllAsTouched;
165
218
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KbqInlineEdit, never>;
166
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KbqInlineEdit, "kbq-inline-edit", ["kbqInlineEdit"], { "showActions": { "alias": "showActions"; "required": false; "isSignal": true; }; "showTooltipOnError": { "alias": "showTooltipOnError"; "required": false; "isSignal": true; }; "validationTooltip": { "alias": "validationTooltip"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "editModeWidth": { "alias": "editModeWidth"; "required": false; "isSignal": true; }; "tooltipPlacement": { "alias": "tooltipPlacement"; "required": false; "isSignal": true; }; "overlayPanelClass": { "alias": "overlayPanelClass"; "required": false; "isSignal": true; }; "getValueHandler": { "alias": "getValueHandler"; "required": false; "isSignal": true; }; "setValueHandler": { "alias": "setValueHandler"; "required": false; "isSignal": true; }; "canSaveOnEnter": { "alias": "canSaveOnEnter"; "required": false; "isSignal": true; }; "interactiveSelectors": { "alias": "interactiveSelectors"; "required": false; "isSignal": true; }; }, { "saved": "saved"; "canceled": "canceled"; "modeChange": "modeChange"; }, ["menu", "label", "formFieldRefList"], ["kbq-label", "[kbqInlineEditViewMode]", "[kbqInlineEditMenu]", "[kbqInlineEditEditMode]"], true, [{ directive: typeof i1.CdkMonitorFocus; inputs: {}; outputs: {}; }]>;
219
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KbqInlineEdit, "kbq-inline-edit", ["kbqInlineEdit"], { "showActions": { "alias": "showActions"; "required": false; "isSignal": true; }; "showTooltipOnError": { "alias": "showTooltipOnError"; "required": false; "isSignal": true; }; "validationTooltip": { "alias": "validationTooltip"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "editModeWidth": { "alias": "editModeWidth"; "required": false; "isSignal": true; }; "tooltipPlacement": { "alias": "tooltipPlacement"; "required": false; "isSignal": true; }; "overlayPanelClass": { "alias": "overlayPanelClass"; "required": false; "isSignal": true; }; "getValueHandler": { "alias": "getValueHandler"; "required": false; "isSignal": true; }; "setValueHandler": { "alias": "setValueHandler"; "required": false; "isSignal": true; }; "canSaveOnEnter": { "alias": "canSaveOnEnter"; "required": false; "isSignal": true; }; "interactiveSelectors": { "alias": "interactiveSelectors"; "required": false; "isSignal": true; }; }, { "saved": "saved"; "canceled": "canceled"; "modeChange": "modeChange"; }, ["menu", "label", "formFieldRefList", "selectRef"], ["kbq-label", "[kbqInlineEditViewMode]", "[kbqInlineEditMenu]", "[kbqInlineEditEditMode]"], true, [{ directive: typeof i1.CdkMonitorFocus; inputs: {}; outputs: {}; }]>;
167
220
  }
168
221
 
169
222
  declare class KbqInlineEditModule {
@@ -125,6 +125,12 @@
125
125
  }
126
126
  }
127
127
 
128
+ // Select-style editor: edit mode shows only the dropdown, not a bordered field, so the view
129
+ // text keeps showing through and just gets the "active" look instead.
130
+ &.kbq-inline-edit_select.kbq-inline-edit_edit {
131
+ --kbq-inline-edit-background: var(--kbq-states-background-transparent-active);
132
+ }
133
+
128
134
  &:hover,
129
135
  &.cdk-keyboard-focused,
130
136
  &.kbq-inline-edit_anchor-focused {
@@ -187,6 +193,10 @@
187
193
  padding: var(--kbq-size-xxs) var(--kbq-size-s) var(--kbq-size-s);
188
194
  }
189
195
 
196
+ &.kbq-inline-edit__panel_select .kbq-inline-edit__control-container {
197
+ display: none;
198
+ }
199
+
190
200
  .kbq-inline-edit__control-container,
191
201
  .kbq-inline-edit__action-button {
192
202
  box-shadow: var(--kbq-shadow-popup);
package/input/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { OnDestroy, EventEmitter, OnChanges, DoCheck, ElementRef, Provider, SimpleChanges, InjectionToken } from '@angular/core';
2
+ import { OnDestroy, EventEmitter, OnChanges, DoCheck, ElementRef, SimpleChanges, Provider, InjectionToken } from '@angular/core';
3
3
  import * as i2 from '@angular/forms';
4
4
  import { ControlValueAccessor, NgControl, NgForm, FormGroupDirective, Validator, AbstractControl, ValidationErrors } from '@angular/forms';
5
5
  import { KbqNumberInputLocaleConfig, CanUpdateErrorState, ErrorStateMatcher } from '@koobiq/components/core';
@@ -38,7 +38,11 @@ declare class KbqNumberInput implements KbqFormFieldControl<any>, ControlValueAc
38
38
  empty: boolean;
39
39
  required: boolean;
40
40
  errorState: boolean;
41
- controlType?: string | undefined;
41
+ /**
42
+ * Implemented as part of KbqFormFieldControl.
43
+ * @docs-private
44
+ */
45
+ controlType: string;
42
46
  /**
43
47
  * Allows input and pasting of integers only.
44
48
  */
@@ -114,6 +118,11 @@ declare class KbqInput implements KbqFormFieldControl<any>, OnChanges, OnDestroy
114
118
  * @docs-private
115
119
  */
116
120
  focused: boolean;
121
+ /**
122
+ * Implemented as part of KbqFormFieldControl.
123
+ * @docs-private
124
+ */
125
+ readonly autofilled: i0.Signal<boolean>;
117
126
  /**
118
127
  * Implemented as part of KbqFormFieldControl.
119
128
  * @docs-private
@@ -248,6 +257,11 @@ declare class KbqInputPassword implements KbqFormFieldControl<any>, OnChanges, O
248
257
  * @docs-private
249
258
  */
250
259
  focused: boolean;
260
+ /**
261
+ * Implemented as part of KbqFormFieldControl.
262
+ * @docs-private
263
+ */
264
+ readonly autofilled: i0.Signal<boolean>;
251
265
  /**
252
266
  * Implemented as part of KbqFormFieldControl.
253
267
  * @docs-private
@@ -306,6 +320,7 @@ declare class KbqInputPassword implements KbqFormFieldControl<any>, OnChanges, O
306
320
  ngDoCheck(): void;
307
321
  updateErrorState(): void;
308
322
  checkRules(): void;
323
+ /** Toggles the native input type between password and text. */
309
324
  toggleType(): void;
310
325
  /** Focuses the input. */
311
326
  focus(): void;