@koobiq/components 19.6.0 → 19.8.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 (159) hide show
  1. package/accordion/accordion-content.directive.d.ts +1 -0
  2. package/autocomplete/autocomplete-trigger.directive.d.ts +2 -1
  3. package/autocomplete/autocomplete.component.d.ts +7 -1
  4. package/breadcrumbs/breadcrumbs.scss +0 -4
  5. package/code-block/_code-block-theme.scss +1 -10
  6. package/code-block/code-block-highlight.d.ts +62 -7
  7. package/code-block/code-block-tokens.scss +5 -10
  8. package/code-block/code-block.d.ts +10 -1
  9. package/code-block/code-block.scss +8 -7
  10. package/core/forms/forms-tokens.scss +1 -1
  11. package/core/option/option.d.ts +10 -1
  12. package/core/styles/common/_groups-mixins.scss +2 -2
  13. package/core/styles/common/_groups.scss +6 -6
  14. package/core/validation/validation.d.ts +1 -1
  15. package/dropdown/dropdown-item.scss +9 -6
  16. package/dropdown/dropdown-tokens.scss +1 -1
  17. package/dropdown/dropdown-trigger.directive.d.ts +8 -1
  18. package/dropdown/dropdown.component.d.ts +6 -6
  19. package/dropdown/dropdown.scss +1 -1
  20. package/dropdown/dropdown.types.d.ts +19 -7
  21. package/fesm2022/koobiq-components-accordion.mjs +32 -29
  22. package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
  23. package/fesm2022/koobiq-components-actions-panel.mjs +10 -10
  24. package/fesm2022/koobiq-components-alert.mjs +16 -16
  25. package/fesm2022/koobiq-components-app-switcher.mjs +25 -25
  26. package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
  27. package/fesm2022/koobiq-components-autocomplete.mjs +35 -23
  28. package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
  29. package/fesm2022/koobiq-components-badge.mjs +13 -13
  30. package/fesm2022/koobiq-components-breadcrumbs.mjs +26 -26
  31. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  32. package/fesm2022/koobiq-components-button-toggle.mjs +10 -10
  33. package/fesm2022/koobiq-components-button.mjs +19 -19
  34. package/fesm2022/koobiq-components-button.mjs.map +1 -1
  35. package/fesm2022/koobiq-components-checkbox.mjs +10 -10
  36. package/fesm2022/koobiq-components-clamped-text.mjs +13 -13
  37. package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -1
  38. package/fesm2022/koobiq-components-code-block.mjs +126 -51
  39. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  40. package/fesm2022/koobiq-components-content-panel.mjs +28 -28
  41. package/fesm2022/koobiq-components-core.mjs +249 -232
  42. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  43. package/fesm2022/koobiq-components-datepicker.mjs +37 -42
  44. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  45. package/fesm2022/koobiq-components-divider.mjs +7 -7
  46. package/fesm2022/koobiq-components-dl.mjs +13 -13
  47. package/fesm2022/koobiq-components-dropdown.mjs +69 -38
  48. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  49. package/fesm2022/koobiq-components-dynamic-translation.mjs +13 -13
  50. package/fesm2022/koobiq-components-ellipsis-center.mjs +7 -7
  51. package/fesm2022/koobiq-components-empty-state.mjs +19 -19
  52. package/fesm2022/koobiq-components-file-upload.mjs +39 -39
  53. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  54. package/fesm2022/koobiq-components-filter-bar.mjs +85 -85
  55. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  56. package/fesm2022/koobiq-components-form-field.mjs +83 -81
  57. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  58. package/fesm2022/koobiq-components-icon.mjs +343 -21
  59. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  60. package/fesm2022/koobiq-components-inline-edit.mjs +19 -17
  61. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
  62. package/fesm2022/koobiq-components-input.mjs +22 -22
  63. package/fesm2022/koobiq-components-link.mjs +7 -7
  64. package/fesm2022/koobiq-components-list.mjs +19 -19
  65. package/fesm2022/koobiq-components-loader-overlay.mjs +16 -16
  66. package/fesm2022/koobiq-components-markdown.mjs +10 -10
  67. package/fesm2022/koobiq-components-modal.mjs +34 -32
  68. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  69. package/fesm2022/koobiq-components-navbar-ic.mjs +40 -40
  70. package/fesm2022/koobiq-components-navbar-ic.mjs.map +1 -1
  71. package/fesm2022/koobiq-components-navbar.mjs +82 -56
  72. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  73. package/fesm2022/koobiq-components-notification-center.mjs +16 -16
  74. package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
  75. package/fesm2022/koobiq-components-overflow-items.mjs +16 -16
  76. package/fesm2022/koobiq-components-popover.mjs +18 -18
  77. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  78. package/fesm2022/koobiq-components-progress-bar.mjs +13 -13
  79. package/fesm2022/koobiq-components-progress-spinner.mjs +13 -13
  80. package/fesm2022/koobiq-components-radio.mjs +10 -10
  81. package/fesm2022/koobiq-components-resizer.mjs +10 -10
  82. package/fesm2022/koobiq-components-risk-level.mjs +7 -7
  83. package/fesm2022/koobiq-components-scrollbar.mjs +12 -12
  84. package/fesm2022/koobiq-components-scrollbar.mjs.map +1 -1
  85. package/fesm2022/koobiq-components-search-expandable.mjs +7 -7
  86. package/fesm2022/koobiq-components-select.mjs +155 -68
  87. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  88. package/fesm2022/koobiq-components-sidebar.mjs +13 -13
  89. package/fesm2022/koobiq-components-sidepanel.mjs +28 -28
  90. package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
  91. package/fesm2022/koobiq-components-skeleton.mjs +10 -10
  92. package/fesm2022/koobiq-components-split-button.mjs +7 -7
  93. package/fesm2022/koobiq-components-splitter.mjs +16 -16
  94. package/fesm2022/koobiq-components-table.mjs +10 -10
  95. package/fesm2022/koobiq-components-tabs.mjs +52 -52
  96. package/fesm2022/koobiq-components-tags.mjs +87 -65
  97. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  98. package/fesm2022/koobiq-components-textarea.mjs +7 -7
  99. package/fesm2022/koobiq-components-time-range.mjs +22 -22
  100. package/fesm2022/koobiq-components-timepicker.mjs +11 -26
  101. package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
  102. package/fesm2022/koobiq-components-timezone.mjs +62 -41
  103. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  104. package/fesm2022/koobiq-components-title.mjs +7 -7
  105. package/fesm2022/koobiq-components-toast.mjs +58 -39
  106. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  107. package/fesm2022/koobiq-components-toggle.mjs +7 -7
  108. package/fesm2022/koobiq-components-tooltip.mjs +17 -17
  109. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  110. package/fesm2022/koobiq-components-top-bar.mjs +17 -25
  111. package/fesm2022/koobiq-components-top-bar.mjs.map +1 -1
  112. package/fesm2022/koobiq-components-tree-select.mjs +16 -10
  113. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  114. package/fesm2022/koobiq-components-tree.mjs +75 -40
  115. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  116. package/fesm2022/koobiq-components-username.mjs +28 -28
  117. package/fesm2022/koobiq-components-username.mjs.map +1 -1
  118. package/file-upload/multiple-file-upload.component.scss +6 -0
  119. package/file-upload/single-file-upload.component.scss +6 -0
  120. package/form-field/_form-field-theme.scss +19 -6
  121. package/form-field/fieldset-tokens.scss +1 -0
  122. package/form-field/fieldset.scss +1 -0
  123. package/form-field/form-field-tokens.scss +2 -0
  124. package/form-field/form-field.scss +19 -0
  125. package/form-field/password-toggle.scss +1 -1
  126. package/icon/icon-button.scss +5 -0
  127. package/icon/icon-item.scss +5 -0
  128. package/icon/icon-registry-providers.d.ts +34 -0
  129. package/icon/icon-registry.d.ts +50 -0
  130. package/icon/icon.component.d.ts +16 -3
  131. package/icon/icon.scss +7 -0
  132. package/icon/public-api.d.ts +2 -0
  133. package/inline-edit/inline-edit.d.ts +3 -1
  134. package/inline-edit/inline-edit.scss +1 -11
  135. package/link/_link-theme.scss +9 -2
  136. package/navbar/_navbar-theme.scss +0 -4
  137. package/navbar/navbar-brand.component.d.ts +3 -1
  138. package/navbar/navbar-item.component.d.ts +1 -0
  139. package/navbar/navbar.component.d.ts +1 -0
  140. package/package.json +4 -4
  141. package/popover/popover.scss +3 -3
  142. package/prebuilt-themes/dark-theme.css +1 -1
  143. package/prebuilt-themes/light-theme.css +1 -1
  144. package/prebuilt-themes/theme.css +1 -1
  145. package/schematics/ng-add/index.js +4 -4
  146. package/scrollbar/scrollbar-tokens.scss +1 -1
  147. package/select/select-option.directive.d.ts +9 -10
  148. package/select/select-tokens.scss +2 -2
  149. package/select/select.component.d.ts +51 -3
  150. package/tags/tag-list.component.d.ts +15 -11
  151. package/tags/tag.component.d.ts +5 -2
  152. package/timepicker/timepicker.directive.d.ts +1 -0
  153. package/timezone/timezone-option-tokens.scss +0 -10
  154. package/timezone/timezone-option.directive.d.ts +12 -9
  155. package/toast/toast.service.d.ts +5 -3
  156. package/tooltip/_tooltip-theme.scss +5 -1
  157. package/top-bar/top-bar.d.ts +0 -7
  158. package/top-bar/top-bar.scss +3 -9
  159. package/tree/tree-selection.component.d.ts +7 -0
@@ -1,11 +1,11 @@
1
1
  import { Directionality } from '@angular/cdk/bidi';
2
2
  import { SelectionModel } from '@angular/cdk/collections';
3
3
  import { CdkConnectedOverlay, CdkOverlayOrigin, ConnectedPosition, OverlayContainer } from '@angular/cdk/overlay';
4
- import { CdkVirtualForOf } from '@angular/cdk/scrolling';
4
+ import { CdkVirtualForOf, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
5
5
  import { AfterContentInit, ChangeDetectorRef, DestroyRef, DoCheck, ElementRef, EventEmitter, InjectionToken, NgZone, OnDestroy, OnInit, Provider, QueryList, Renderer2, TemplateRef } from '@angular/core';
6
6
  import { ControlValueAccessor, FormGroupDirective, NgControl, NgForm } from '@angular/forms';
7
7
  import { ActiveDescendantKeyManager } from '@koobiq/cdk/a11y';
8
- import { CanUpdateErrorState, ErrorStateMatcher, KbqAbstractSelect, KbqComponentColors, KbqLocaleService, KbqOptgroup, KbqOption, KbqOptionBase, KbqOptionSelectionChange, KbqSelectMatcher, KbqSelectSearch, KbqSelectSearchEmptyResult, KbqSelectTrigger } from '@koobiq/components/core';
8
+ import { CanUpdateErrorState, ErrorStateMatcher, KbqAbstractSelect, KbqComponentColors, KbqLocaleService, KbqOptgroup, KbqOption, KbqOptionBase, KbqOptionSelectionChange, KbqSelectMatcher, KbqSelectSearch, KbqSelectSearchEmptyResult, KbqSelectTrigger, KbqVirtualOption } from '@koobiq/components/core';
9
9
  import { KbqCleaner, KbqFormField, KbqFormFieldControl } from '@koobiq/components/form-field';
10
10
  import { KbqTag } from '@koobiq/components/tags';
11
11
  import { Observable, Subject } from 'rxjs';
@@ -156,6 +156,8 @@ export declare class KbqSelect extends KbqAbstractSelect implements AfterContent
156
156
  footer?: ElementRef;
157
157
  /** Reference to the CDK virtual scroll directive for virtual scrolling support. */
158
158
  cdkVirtualForOf?: CdkVirtualForOf<any>;
159
+ /** Reference to the CDK virtual scroll viewport for tracking scroll position in virtual mode. */
160
+ virtualScrollViewport?: CdkVirtualScrollViewport;
159
161
  /** Query list of tags displayed in multiple selection mode. */
160
162
  tags: QueryList<KbqTag>;
161
163
  /** User-supplied override of the trigger element for custom rendering. */
@@ -176,6 +178,15 @@ export declare class KbqSelect extends KbqAbstractSelect implements AfterContent
176
178
  searchEmpty: KbqSelectSearchEmptyResult;
177
179
  /** Template string for hidden items text. Supports {{ number }} placeholder. */
178
180
  hiddenItemsText: string;
181
+ /** Determines whether preselected values are displayed. */
182
+ showPreselectedValues: boolean;
183
+ /**
184
+ * Specifies the maximum number of trigger values allowed.
185
+ * This constant limits the size of the trigger values array to ensure performance
186
+ * and prevent excessive memory usage.
187
+ * A value of `0` indicates that there is no limit.
188
+ */
189
+ triggerValuesLimit: number;
179
190
  /** Classes to be passed to the select panel. Supports the same syntax as `ngClass`. */
180
191
  panelClass: string | string[] | Set<string> | {
181
192
  [key: string]: any;
@@ -221,6 +232,13 @@ export declare class KbqSelect extends KbqAbstractSelect implements AfterContent
221
232
  * @docs-private
222
233
  */
223
234
  readonly valueChange: EventEmitter<any>;
235
+ /**
236
+ * Distance in pixels from the bottom of the options panel at which `scrolledToBottom` fires.
237
+ * Default `0` — emits only when the panel is fully scrolled to the bottom.
238
+ */
239
+ scrolledToBottomOffset: number;
240
+ /** Emits when the options panel is scrolled to (or within `scrolledToBottomOffset` of) the bottom. */
241
+ readonly scrolledToBottom: EventEmitter<void>;
224
242
  /**
225
243
  * Whether the overlay should have a backdrop.
226
244
  * When true, clicking the backdrop will close the select.
@@ -257,6 +275,20 @@ export declare class KbqSelect extends KbqAbstractSelect implements AfterContent
257
275
  */
258
276
  get compareWith(): (o1: any, o2: any) => boolean;
259
277
  set compareWith(fn: (o1: any, o2: any) => boolean);
278
+ /**
279
+ * Factory used to construct a `KbqVirtualOption` for selected values whose
280
+ * `KbqOption` is not currently rendered (e.g. virtual scroll out of viewport,
281
+ * programmatically set initial value, `showPreselectedValues`).
282
+ *
283
+ * Required when option values are objects so the trigger (and tags in
284
+ * multiple mode) can render a human-readable label. Also lets consumers
285
+ * customise per-value `disabled` state or any future `KbqVirtualOption`
286
+ * fields without adding new `@Input`s.
287
+ *
288
+ * Defaults to `new KbqVirtualOption(value, this.disabled)`, which is correct
289
+ * for primitive values where `value` itself is the display label.
290
+ */
291
+ virtualOptionFactory?: (value: any) => KbqVirtualOption;
260
292
  /**
261
293
  * Function for handling the Ctrl + A (select all) keyboard combination.
262
294
  * By default, the internal handler selects all options.
@@ -332,6 +364,8 @@ export declare class KbqSelect extends KbqAbstractSelect implements AfterContent
332
364
  get multiSelection(): boolean;
333
365
  /** Subscription to the close event of the overlay. */
334
366
  private closeSubscription;
367
+ /** Subscription to the options panel scroll event used by `scrolledToBottom`. */
368
+ private scrollSubscription;
335
369
  /** The scroll position of the overlay panel, calculated to center the selected option. */
336
370
  private scrollTop;
337
371
  /** Unique id for this input. Auto-incremented for each instance. */
@@ -498,6 +532,13 @@ export declare class KbqSelect extends KbqAbstractSelect implements AfterContent
498
532
  private getHeightOfOptionsContainer;
499
533
  /** Updates the keyboard manager scroll size based on options container height. */
500
534
  private updateScrollSize;
535
+ /**
536
+ * Subscribes to scroll events of the options panel and emits `scrolledToBottom`
537
+ * when the panel reaches `scrolledToBottomOffset` pixels from the bottom.
538
+ * Re-subscribes on every panel attach; auto-unsubscribes when the panel closes
539
+ * or the component is destroyed.
540
+ */
541
+ private subscribeToScrolledToBottom;
501
542
  /** Calculates the total width of all selected items in the matcher. */
502
543
  private getTotalItemsWidthInMatcher;
503
544
  /**
@@ -532,6 +573,12 @@ export declare class KbqSelect extends KbqAbstractSelect implements AfterContent
532
573
  * @returns Option that has the corresponding value.
533
574
  */
534
575
  private selectValue;
576
+ /**
577
+ * Single entry point for building a `KbqVirtualOption` from a raw value.
578
+ * Uses the consumer-provided `virtualOptionFactory` when set, otherwise
579
+ * wraps the raw value with the select's current `disabled` state.
580
+ */
581
+ private createVirtualOption;
535
582
  /** Sets up a key manager to listen to keyboard events on the overlay panel. */
536
583
  private initKeyManager;
537
584
  /** Drops current option subscriptions and IDs and resets from scratch. */
@@ -570,8 +617,9 @@ export declare class KbqSelect extends KbqAbstractSelect implements AfterContent
570
617
  /** Removes the dropdown class from the overlay container when select closes. */
571
618
  private removeClassFromOverlayContainer;
572
619
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqSelect, [null, null, null, null, null, null, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; host: true; }, { optional: true; self: true; }, null, { optional: true; }]>;
573
- static ɵcmp: i0.ɵɵComponentDeclaration<KbqSelect, "kbq-select", ["kbqSelect"], { "hiddenItemsText": { "alias": "hiddenItemsText"; "required": false; }; "panelClass": { "alias": "panelClass"; "required": false; }; "backdropClass": { "alias": "backdropClass"; "required": false; }; "errorStateMatcher": { "alias": "errorStateMatcher"; "required": false; }; "sortComparator": { "alias": "sortComparator"; "required": false; }; "multiline": { "alias": "multiline"; "required": false; }; "searchMinOptionsThreshold": { "alias": "searchMinOptionsThreshold"; "required": false; }; "hasBackdrop": { "alias": "hasBackdrop"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "required": { "alias": "required"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "compareWith": { "alias": "compareWith"; "required": false; }; "selectAllHandler": { "alias": "selectAllHandler"; "required": false; }; "panelWidth": { "alias": "panelWidth"; "required": false; }; "panelMinWidth": { "alias": "panelMinWidth"; "required": false; }; "value": { "alias": "value"; "required": false; }; "id": { "alias": "id"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "hiddenItemsTextFormatter": { "alias": "hiddenItemsTextFormatter"; "required": false; }; }, { "openedChange": "openedChange"; "beforeOpened": "beforeOpened"; "openedStream": "opened"; "closedStream": "closed"; "selectionChange": "selectionChange"; "valueChange": "valueChange"; }, ["footer", "cdkVirtualForOf", "customTrigger", "customMatcher", "customTagTemplateRef", "cleaner", "search", "searchEmpty", "options", "optionGroups"], ["kbq-select-matcher, [kbq-select-matcher]", "kbq-select-trigger, [kbq-select-trigger]", "kbq-cleaner", "[kbqSelectSearch]", "[kbq-select-search-empty-result]", "*", "kbq-select-footer,[kbq-select-footer]"], true, never>;
620
+ static ɵcmp: i0.ɵɵComponentDeclaration<KbqSelect, "kbq-select", ["kbqSelect"], { "hiddenItemsText": { "alias": "hiddenItemsText"; "required": false; }; "showPreselectedValues": { "alias": "showPreselectedValues"; "required": false; }; "triggerValuesLimit": { "alias": "triggerValuesLimit"; "required": false; }; "panelClass": { "alias": "panelClass"; "required": false; }; "backdropClass": { "alias": "backdropClass"; "required": false; }; "errorStateMatcher": { "alias": "errorStateMatcher"; "required": false; }; "sortComparator": { "alias": "sortComparator"; "required": false; }; "multiline": { "alias": "multiline"; "required": false; }; "searchMinOptionsThreshold": { "alias": "searchMinOptionsThreshold"; "required": false; }; "scrolledToBottomOffset": { "alias": "scrolledToBottomOffset"; "required": false; }; "hasBackdrop": { "alias": "hasBackdrop"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "required": { "alias": "required"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "compareWith": { "alias": "compareWith"; "required": false; }; "virtualOptionFactory": { "alias": "virtualOptionFactory"; "required": false; }; "selectAllHandler": { "alias": "selectAllHandler"; "required": false; }; "panelWidth": { "alias": "panelWidth"; "required": false; }; "panelMinWidth": { "alias": "panelMinWidth"; "required": false; }; "value": { "alias": "value"; "required": false; }; "id": { "alias": "id"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "hiddenItemsTextFormatter": { "alias": "hiddenItemsTextFormatter"; "required": false; }; }, { "openedChange": "openedChange"; "beforeOpened": "beforeOpened"; "openedStream": "opened"; "closedStream": "closed"; "selectionChange": "selectionChange"; "valueChange": "valueChange"; "scrolledToBottom": "scrolledToBottom"; }, ["footer", "cdkVirtualForOf", "virtualScrollViewport", "customTrigger", "customMatcher", "customTagTemplateRef", "cleaner", "search", "searchEmpty", "options", "optionGroups"], ["kbq-select-matcher, [kbq-select-matcher]", "kbq-select-trigger, [kbq-select-trigger]", "kbq-cleaner", "[kbqSelectSearch]", "[kbq-select-search-empty-result]", "*", "kbq-select-footer,[kbq-select-footer]"], true, never>;
574
621
  static ngAcceptInputType_multiline: unknown;
622
+ static ngAcceptInputType_scrolledToBottomOffset: unknown;
575
623
  static ngAcceptInputType_multiple: unknown;
576
624
  static ngAcceptInputType_panelMinWidth: unknown;
577
625
  static ngAcceptInputType_tabIndex: unknown;
@@ -63,11 +63,17 @@ export declare class KbqTagList implements KbqFormFieldControl<any>, ControlValu
63
63
  */
64
64
  get tagBlurChanges(): Observable<KbqTagEvent>;
65
65
  /**
66
- * Combined stream of all of the child tags' remove change events.
66
+ * Combined stream of all of the child tags' destroyed events.
67
67
  *
68
68
  * @docs-private
69
69
  */
70
70
  get tagRemoveChanges(): Observable<KbqTagEvent>;
71
+ /**
72
+ * Combined stream of all of the child tags' removal request events.
73
+ *
74
+ * @docs-private
75
+ */
76
+ protected get tagBeforeRemoveChanges(): Observable<KbqTagEvent>;
71
77
  /**
72
78
  * Combined stream of all of the child tags' edit change events.
73
79
  *
@@ -157,7 +163,8 @@ export declare class KbqTagList implements KbqFormFieldControl<any>, ControlValu
157
163
  editable: boolean;
158
164
  /**
159
165
  * Whether to emit change events when tags are added/removed.
160
- * Set to `false` to prevent the form control from being marked as dirty during programmatic updates.
166
+ *
167
+ * @deprecated No longer needed. Will be removed in the next major release.
161
168
  */
162
169
  emitOnTagChanges: boolean;
163
170
  /** Whether the tags in the list are removable. */
@@ -227,20 +234,16 @@ export declare class KbqTagList implements KbqFormFieldControl<any>, ControlValu
227
234
  errorState: boolean;
228
235
  /** The tag input to add more tags */
229
236
  private tagInput;
237
+ /** True when the next `tags.changes` emission is triggered by a UI action, not programmatic update. */
238
+ private pendingUIChange;
230
239
  /**
231
240
  * When a tag is destroyed, we store the index of the destroyed tag until the tags
232
241
  * query list notifies about the update. This is necessary because we cannot determine an
233
242
  * appropriate tag that should receive focus until the array of tags updated completely.
234
243
  */
235
244
  private lastDestroyedTagIndex;
236
- /** Subscription to focus changes in the tags. */
237
- private tagFocusSubscription;
238
- /** Subscription to blur changes in the tags. */
239
- private tagBlurSubscription;
240
- /** Subscription to remove changes in tags. */
241
- private tagRemoveSubscription;
242
- /** Subscription to edit changes in tags. */
243
- private tagEditSubscription;
245
+ /** Triggers unsubscription from all per-tags streams when tags are reset. */
246
+ private readonly tagsSubscriptions$;
244
247
  constructor(elementRef: ElementRef<HTMLElement>, changeDetectorRef: ChangeDetectorRef, defaultErrorStateMatcher: ErrorStateMatcher, dir: Directionality, parentForm: NgForm, parentFormGroup: FormGroupDirective, ngControl: NgControl);
245
248
  ngDoCheck(): void;
246
249
  ngAfterContentInit(): void;
@@ -252,6 +255,8 @@ export declare class KbqTagList implements KbqFormFieldControl<any>, ControlValu
252
255
  onTouched: () => void;
253
256
  /** @docs-private */
254
257
  onChange: (value: any) => void;
258
+ /** Notifies that the next `tags.changes` emission is UI-initiated. */
259
+ notifyPendingTagChange(): void;
255
260
  /**
256
261
  * Associates an HTML input element with this tag list.
257
262
  *
@@ -344,7 +349,6 @@ export declare class KbqTagList implements KbqFormFieldControl<any>, ControlValu
344
349
  removeSelected(): void;
345
350
  private propagateTagsChanges;
346
351
  private resetTags;
347
- private dropSubscriptions;
348
352
  /** Listens to user-generated selection events on each tag. */
349
353
  private listenToTagsFocus;
350
354
  private listenToTagsRemoved;
@@ -134,9 +134,12 @@ export declare class KbqTag extends KbqColorDirective implements IFocusableOptio
134
134
  removeIcon: KbqTagRemove;
135
135
  /** Emitted when the tag is selected or deselected. */
136
136
  readonly selectionChange: EventEmitter<KbqTagSelectionChange>;
137
- /** Emitted when the tag is destroyed. */
137
+ /** Emitted when the tag is destroyed and leaving the DOM. */
138
138
  readonly destroyed: EventEmitter<KbqTagEvent>;
139
- /** Emitted when a tag is to be removed. */
139
+ /**
140
+ * Emitted when a tag is to be removed.
141
+ * Fires on programmatic and UI removal (click or keyboard).
142
+ */
140
143
  readonly removed: EventEmitter<KbqTagEvent>;
141
144
  /** Whether the tag is selected. */
142
145
  get selected(): boolean;
@@ -86,6 +86,7 @@ export declare class KbqTimepicker<D> implements KbqFormFieldControl<D>, Control
86
86
  /** @docs-private */
87
87
  get errorState(): boolean;
88
88
  set errorState(value: boolean);
89
+ private readonly useLegacyValidation;
89
90
  private readonly uid;
90
91
  private readonly validator;
91
92
  private lastValueValid;
@@ -1,22 +1,12 @@
1
- @use '../list/list-tokens';
2
1
  @use '../core/option/option-tokens';
3
2
 
4
3
  .kbq-timezone-select__panel {
5
- --kbq-select-size-single-padding-left: var(--kbq-size-m);
6
- --kbq-select-size-single-padding-right: var(--kbq-size-xxs);
7
- --kbq-select-size-single-padding-vertical: var(--kbq-size-xs);
8
- --kbq-select-size-single-content-gap: var(--kbq-size-xxs);
9
- --kbq-select-size-multiple-padding-left: var(--kbq-size-xxs);
10
- --kbq-select-size-multiple-padding-right: var(--kbq-size-xxs);
11
- --kbq-select-size-multiple-content-gap: var(--kbq-size-xxs);
12
4
  --kbq-timezone-option-size-padding: var(--kbq-size-xxs) 10px;
13
5
  --kbq-timezone-option-size-column-gap: 16px;
14
6
  --kbq-timezone-option-size-height: auto;
15
7
  --kbq-timezone-option-size-max-height: 5em;
16
8
  --kbq-timezone-option-size-optgroup-label-padding: 12px 12px 4px 12px;
17
9
  /* THEME TOKENS */
18
- --kbq-select-panel-dropdown-background: var(--kbq-background-card);
19
- --kbq-select-panel-dropdown-shadow: var(--kbq-shadow-popup);
20
10
  --kbq-timezone-option-text: var(--kbq-foreground-contrast);
21
11
  --kbq-timezone-option-caption: var(--kbq-foreground-contrast-secondary);
22
12
  --kbq-timezone-option-optgroup-label: var(--kbq-foreground-contrast-secondary);
@@ -1,18 +1,21 @@
1
- import { AfterViewInit, ChangeDetectorRef, OnDestroy } from '@angular/core';
1
+ import { AfterViewInit, OnDestroy } from '@angular/core';
2
2
  import { KbqTooltipTrigger } from '@koobiq/components/tooltip';
3
- import { KbqTimezoneOption } from './timezone-option.component';
4
3
  import * as i0 from "@angular/core";
5
4
  export declare const TOOLTIP_VISIBLE_ROWS_COUNT = 3;
6
5
  export declare class KbqTimezoneOptionTooltip extends KbqTooltipTrigger implements AfterViewInit, OnDestroy {
7
- private changeDetectorRef;
8
- private option;
9
- private resizeObserver;
10
- private resizeObserverSubscription;
11
- constructor(changeDetectorRef: ChangeDetectorRef, option: KbqTimezoneOption);
6
+ private readonly option;
7
+ private readonly changeDetectorRef;
8
+ private readonly resizeObserver;
9
+ private readonly contentObserver;
10
+ private readonly debounceInterval;
11
+ private resizeSubscription;
12
+ private contentObserverSubscription;
13
+ private focusMonitorSubscription;
14
+ constructor();
12
15
  ngAfterViewInit(): void;
13
16
  ngOnDestroy(): void;
14
- onMouseEnter(): void;
15
- onMouseLeave(): void;
17
+ handleElementEnter(): void;
18
+ handleElementLeave(): void;
16
19
  private checkTooltipDisabled;
17
20
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqTimezoneOptionTooltip, never>;
18
21
  static ɵdir: i0.ɵɵDirectiveDeclaration<KbqTimezoneOptionTooltip, "kbq-timezone-option", never, {}, {}, never, never, true, never>;
@@ -6,6 +6,7 @@ import { KbqToastComponent } from './toast.component';
6
6
  import { KbqToastConfig, KbqToastData } from './toast.type';
7
7
  import * as i0 from "@angular/core";
8
8
  export declare const KBQ_TOAST_FACTORY: InjectionToken<typeof KbqToastComponent>;
9
+ /** Generic `T` is a type hint only; the runtime component comes from `KBQ_TOAST_FACTORY`. */
9
10
  export declare class KbqToastService<T extends KbqToastComponent = KbqToastComponent> implements OnDestroy {
10
11
  private overlay;
11
12
  private injector;
@@ -20,10 +21,11 @@ export declare class KbqToastService<T extends KbqToastComponent = KbqToastCompo
20
21
  readonly focused: BehaviorSubject<boolean>;
21
22
  readonly animation: BehaviorSubject<AnimationEvent | null>;
22
23
  timer: import("rxjs").Observable<number>;
23
- private containerInstance;
24
- private overlayRef;
25
- private portal;
24
+ private containerInstance?;
25
+ private overlayRef?;
26
+ private portal?;
26
27
  private timerSubscription;
28
+ private currentPosition?;
27
29
  private toastsDict;
28
30
  private templatesDict;
29
31
  constructor(overlay: Overlay, injector: Injector, overlayContainer: OverlayContainer, ngZone: NgZone, toastFactory: any, toastConfig: KbqToastConfig);
@@ -4,7 +4,11 @@
4
4
  & .kbq-tooltip__inner {
5
5
  color: var(--kbq-tooltip-#{$style-name}-text);
6
6
 
7
- background-color: var(--kbq-tooltip-#{$style-name}-background);
7
+ background-image: linear-gradient(
8
+ var(--kbq-tooltip-#{$style-name}-background),
9
+ var(--kbq-tooltip-#{$style-name}-background)
10
+ );
11
+ background-color: var(--kbq-background-bg);
8
12
  }
9
13
 
10
14
  & .kbq-tooltip__arrow {
@@ -1,4 +1,3 @@
1
- import { KbqOverflowItems } from '@koobiq/components/overflow-items';
2
1
  import * as i0 from "@angular/core";
3
2
  export declare class KbqTopBarSpacer {
4
3
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqTopBarSpacer, never>;
@@ -12,12 +11,6 @@ export declare class KbqTopBarContainer {
12
11
  * Conditionally applies a CSS class based on the value
13
12
  */
14
13
  readonly placement: import("@angular/core").InputSignal<"start" | "end">;
15
- /**
16
- * Track if container has `KbqOverflowItems` directive assigned.
17
- * Used to replace `gap` with `margin` so `KbqOverflowItems` will calculate correct width on resize.
18
- * @docs-private
19
- */
20
- protected readonly overflowItems: KbqOverflowItems | null;
21
14
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqTopBarContainer, never>;
22
15
  static ɵdir: i0.ɵɵDirectiveDeclaration<KbqTopBarContainer, "[kbqTopBarContainer]", never, { "placement": { "alias": "placement"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
23
16
  }
@@ -45,7 +45,7 @@
45
45
  }
46
46
 
47
47
  .kbq-top-bar-container {
48
- &:has(> .kbq-overflow-items) {
48
+ &:has(.kbq-overflow-items) {
49
49
  gap: unset;
50
50
  overflow: hidden;
51
51
  // reduce height added by overflow-items' padding
@@ -53,10 +53,6 @@
53
53
  margin-bottom: calc(-1 * var(--kbq-size-border-width));
54
54
  }
55
55
 
56
- .kbq-overflow-items {
57
- @include _overflow-items-margins;
58
- }
59
-
60
56
  &.kbq-top-bar-container__start {
61
57
  display: flex;
62
58
  gap: var(--kbq-top-bar-container-start-gap);
@@ -71,10 +67,8 @@
71
67
  justify-content: end;
72
68
  }
73
69
 
74
- &.kbq-top-bar-container__with-overflow-items {
75
- gap: unset;
76
- justify-content: unset;
77
-
70
+ &.kbq-overflow-items,
71
+ > .kbq-overflow-items {
78
72
  @include _overflow-items-margins;
79
73
  }
80
74
  }
@@ -69,6 +69,7 @@ export declare class KbqTreeSelection extends KbqTreeBase<any> implements Contro
69
69
  readonly onSelectAll: EventEmitter<KbqTreeSelectAllEvent<KbqTreeOption>>;
70
70
  readonly onCopy: EventEmitter<KbqTreeCopyEvent<KbqTreeOption>>;
71
71
  private sortedNodes;
72
+ private lastSyncedDataNodes;
72
73
  get autoSelect(): boolean;
73
74
  set autoSelect(value: boolean);
74
75
  private _autoSelect;
@@ -119,6 +120,12 @@ export declare class KbqTreeSelection extends KbqTreeBase<any> implements Contro
119
120
  */
120
121
  setDisabledState(isDisabled: boolean): void;
121
122
  setOptionsFromValues(values: any[]): void;
123
+ /**
124
+ * Rebinds orphan node references in selectionModel to current treeControl.dataNodes by value.
125
+ * Needed after dataSource.data is replaced — selectionModel holds references to old node
126
+ * objects, but options render with new ones, so toggle()/isSelected() break on identity.
127
+ */
128
+ private syncSelectionModelToDataNodes;
122
129
  getSelectedValues(): any[];
123
130
  getItemHeight(): number;
124
131
  setStateChildren(option: KbqTreeOption, state: boolean): void;