@koobiq/components 20.4.0 → 20.4.2

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 (32) hide show
  1. package/core/index.d.ts +0 -1
  2. package/core/styles/common/_select.scss +4 -1
  3. package/fesm2022/koobiq-components-app-switcher.mjs +3 -2
  4. package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
  5. package/fesm2022/koobiq-components-core.mjs +5 -9
  6. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  7. package/fesm2022/koobiq-components-navbar.mjs +42 -12
  8. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  9. package/fesm2022/koobiq-components-notification-center.mjs +5 -4
  10. package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
  11. package/fesm2022/koobiq-components-popover.mjs +4 -1
  12. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  13. package/fesm2022/koobiq-components-search-expandable.mjs +2 -1
  14. package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
  15. package/fesm2022/koobiq-components-select.mjs +21 -7
  16. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  17. package/fesm2022/koobiq-components-timezone.mjs +2 -2
  18. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  19. package/fesm2022/koobiq-components-toast.mjs +29 -28
  20. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  21. package/fesm2022/koobiq-components-tooltip.mjs +29 -4
  22. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  23. package/fesm2022/koobiq-components-tree-select.mjs +2 -2
  24. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  25. package/navbar/index.d.ts +19 -1
  26. package/navbar/navbar-brand.scss +12 -5
  27. package/notification-center/notification-item.scss +4 -1
  28. package/package.json +3 -3
  29. package/schematics/ng-add/index.js +1 -1
  30. package/select/index.d.ts +7 -0
  31. package/toast/index.d.ts +10 -19
  32. package/tooltip/index.d.ts +13 -1
@@ -22,7 +22,7 @@
22
22
  border-radius: var(--kbq-navbar-item-size-content-border-radius);
23
23
  }
24
24
 
25
- & .kbq-navbar-title {
25
+ &:not(.kbq-disabled) .kbq-navbar-title {
26
26
  cursor: pointer;
27
27
  }
28
28
  }
@@ -112,14 +112,21 @@ a.kbq-navbar-brand {
112
112
  .kbq-navbar-brand {
113
113
  @include navbar-theme.kbq-navbar-item(default);
114
114
 
115
+ // Explicit, or the text of an `<a>` without `href` falls back to the I-beam.
116
+ &.kbq-disabled {
117
+ cursor: default;
118
+ }
119
+
115
120
  &.kbq-navbar-brand_link {
116
- cursor: pointer;
121
+ &:not(.kbq-disabled) {
122
+ cursor: pointer;
123
+ }
117
124
 
118
125
  &:hover:not(.kbq-disabled) {
119
126
  @include navbar-theme.kbq-navbar-item(states-hover);
120
127
  }
121
128
 
122
- &.cdk-focused.cdk-keyboard-focused {
129
+ &.cdk-focused.cdk-keyboard-focused:not(.kbq-disabled) {
123
130
  outline: none;
124
131
 
125
132
  &:after {
@@ -133,13 +140,13 @@ a.kbq-navbar-brand {
133
140
  @include navbar-theme.kbq-navbar-item(states-selected);
134
141
  }
135
142
 
136
- &.kbq-vertical:hover {
143
+ &.kbq-vertical:hover:not(.kbq-disabled) {
137
144
  .kbq-navbar-logo {
138
145
  transform: scale(1.06);
139
146
  }
140
147
  }
141
148
 
142
- &.kbq-horizontal:hover {
149
+ &.kbq-horizontal:hover:not(.kbq-disabled) {
143
150
  .kbq-navbar-logo {
144
151
  z-index: 1;
145
152
  }
@@ -93,8 +93,11 @@
93
93
  margin-right: var(--kbq-size-3xs);
94
94
  }
95
95
 
96
+ // The dot keeps its width once read, or the title gains that width and rewraps under the pointer.
97
+ // Placed before the time, so the time keeps the position it had before the dot was hidden.
96
98
  &.kbq-notification-item-time_read .kbq-notification-item-time__state {
97
- display: none;
99
+ visibility: hidden;
100
+ order: -1;
98
101
  }
99
102
  }
100
103
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@koobiq/components",
3
- "version": "20.4.0",
3
+ "version": "20.4.2",
4
4
  "description": "koobiq",
5
5
  "repository": {
6
6
  "type": "git",
@@ -25,8 +25,8 @@
25
25
  "@angular/cdk": ">=20.0.0",
26
26
  "@angular/core": ">=20.0.0",
27
27
  "@angular/forms": ">=20.0.0",
28
- "@koobiq/angular-moment-adapter": "20.4.0",
29
- "@koobiq/angular-luxon-adapter": "20.4.0",
28
+ "@koobiq/angular-moment-adapter": "20.4.2",
29
+ "@koobiq/angular-luxon-adapter": "20.4.2",
30
30
  "@koobiq/date-formatter": "^3.2.3",
31
31
  "@koobiq/icons": "^11.1.3",
32
32
  "@koobiq/design-tokens": "^3.14.0"
@@ -27,7 +27,7 @@ function ngAdd(options) {
27
27
  }
28
28
  // Installing dependencies
29
29
  utils_packageConfig.addPackageToPackageJson(tree, '@angular/cdk', "^20.2.14");
30
- utils_packageConfig.addPackageToPackageJson(tree, '@koobiq/angular-luxon-adapter', "^20.4.0");
30
+ utils_packageConfig.addPackageToPackageJson(tree, '@koobiq/angular-luxon-adapter', "^20.4.2");
31
31
  utils_packageConfig.addPackageToPackageJson(tree, '@koobiq/date-formatter', "^3.5.1");
32
32
  utils_packageConfig.addPackageToPackageJson(tree, '@koobiq/date-adapter', "^3.5.1");
33
33
  utils_packageConfig.addPackageToPackageJson(tree, '@koobiq/icons', "^12.2.0");
package/select/index.d.ts CHANGED
@@ -558,6 +558,12 @@ declare class KbqSelect extends KbqAbstractSelect implements AfterContentInit, O
558
558
  get firstSelected(): KbqOptionBase | null;
559
559
  /** Whether the first selected option is filtered (not visible in the list). */
560
560
  get firstFiltered(): boolean;
561
+ /**
562
+ * Whether the legacy `KbqValidateDirective` marks this control. The class it writes never changes
563
+ * after the host is created, so it is probed once instead of on every change detection pass.
564
+ */
565
+ private hasLegacyValidateDirective;
566
+ private readonly invalidState;
561
567
  /** @docs-private */
562
568
  get colorForState(): KbqComponentColors;
563
569
  /** Whether multiple choice is enabled. True if multiple or multiline mode is active. */
@@ -590,6 +596,7 @@ declare class KbqSelect extends KbqAbstractSelect implements AfterContentInit, O
590
596
  ngOnDestroy(): void;
591
597
  /** Updates the error state based on the error state matcher. */
592
598
  updateErrorState(): void;
599
+ private syncInvalidState;
593
600
  /**
594
601
  * Formats the hidden items text with the number of hidden items.
595
602
  * @param hiddenItemsText Template string with {{ number }} placeholder.
package/toast/index.d.ts CHANGED
@@ -2,7 +2,7 @@ import * as i0 from '@angular/core';
2
2
  import { InjectionToken, TemplateRef, Provider, OnDestroy, ElementRef, ComponentRef, EmbeddedViewRef, ViewContainerRef, ViewRef, Injector } from '@angular/core';
3
3
  import { CdkScrollable } from '@angular/cdk/overlay';
4
4
  import * as rxjs from 'rxjs';
5
- import { BehaviorSubject, Observable } from 'rxjs';
5
+ import { BehaviorSubject } from 'rxjs';
6
6
  import { AnimationEvent } from '@angular/animations';
7
7
  import * as i1 from '@koobiq/components/core';
8
8
  import { KbqReadStateDirective, ThemePalette } from '@koobiq/components/core';
@@ -144,33 +144,24 @@ declare class KbqToastContainerComponent extends CdkScrollable {
144
144
  private changeDetectorRef;
145
145
  readonly service: KbqToastService<any>;
146
146
  readonly viewContainer: i0.Signal<ViewContainerRef>;
147
- /**
148
- * Emits while the stack re-lays-out. Toasts are ordinary flow children, so removing one slides the
149
- * rest for as long as its height animates — and an overlay opened from inside a toast is anchored to
150
- * a trigger that is moving. CDK only re-measures the origin on a scroll or a viewport resize, so the
151
- * stack has to say when it moved.
152
- *
153
- * The container's own box tracks the reflow exactly: continuously while a leaving toast animates its
154
- * height away, and once for a removal that is not animated at all, such as a template toast.
155
- */
156
- private readonly reflowed;
157
- /**
158
- * `ScrollDispatcher` subscribes to this method when the container registers itself, so merging the
159
- * reflow signal in re-broadcasts it to every overlay that repositions on scroll — which is what
160
- * `kbq-select` and the dropdown trigger do by default.
161
- */
162
- elementScrolled(): Observable<Event>;
147
+ private readonly overlayKeyboardDispatcher;
148
+ constructor();
163
149
  createToast<C>(data: KbqToastData, componentType: any, onTop: boolean): ComponentRef<C>;
164
150
  createTemplate<C>(data: KbqToastData, template: TemplateRef<any>, onTop: boolean): EmbeddedViewRef<C>;
165
151
  remove(viewRef: ViewRef): void;
166
152
  getInjector(data: KbqToastData): Injector;
153
+ /**
154
+ * Re-applies the position of every overlay anchored to an element; one whose origin has not moved stays where it
155
+ * is. CDK keeps no public registry of attached overlays, but its keyboard dispatcher tracks each of them.
156
+ */
157
+ private repositionConnectedOverlays;
167
158
  /**
168
159
  * Fakes a scroll on the container so that overlays anchored inside a toast are repositioned by their
169
160
  * `RepositionScrollStrategy` when the stack shifts.
170
161
  *
171
- * @deprecated The container reports its own reflow through `elementScrolled()`, so nothing calls this.
162
+ * @deprecated The container repositions the overlays anchored inside it on its own, so nothing calls this.
172
163
  * It is kept only for callers that already hold a container reference — the instance created by
173
- * `KbqToastService` is not exposed.
164
+ * `KbqToastService` is not exposed. The fake scroll also closes every close-on-scroll overlay of the app.
174
165
  */
175
166
  dispatchScrollEvent: () => void;
176
167
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqToastContainerComponent, never>;
@@ -235,9 +235,16 @@ declare class KbqTooltipTrigger extends KbqPopUpTrigger<KbqTooltipComponent> imp
235
235
  * Set when that pop-up opens and released only once the pointer or the focus genuinely leaves the host,
236
236
  * never on the pop-up closing. Both matter: a pop-up restores focus to its trigger when it closes (see
237
237
  * `KbqPopoverComponent.onEscape`), and removing its backdrop replays `mouseenter` on the trigger without
238
- * the pointer having moved — either would otherwise pop the tooltip up out of nowhere.
238
+ * the pointer having moved — either would otherwise pop the tooltip up out of nowhere. A pointer that left
239
+ * the host while the pop-up was open (see `pointerLeftWhileMuted`) releases it by coming back once the
240
+ * pop-up is closed.
239
241
  */
240
242
  private mutedBySiblingPopup;
243
+ /**
244
+ * Whether the pointer left the host while muted. A backdrop inserted under the resting pointer fires
245
+ * `mouseleave` as well, but with the pointer still within the host — that one does not count.
246
+ */
247
+ private pointerLeftWhileMuted;
241
248
  /**
242
249
  * Sets up an effect that mirrors a `forDisabledComponent`'s disabled signal: when that component is disabled it
243
250
  * makes the host focusable (so the tooltip can still be triggered) and enables the tooltip, otherwise disables it.
@@ -273,6 +280,11 @@ declare class KbqTooltipTrigger extends KbqPopUpTrigger<KbqTooltipComponent> imp
273
280
  * not be mistaken for the user leaving.
274
281
  */
275
282
  hide(delay?: number): void;
283
+ /**
284
+ * Records whether the pointer left the host while muted, see `pointerLeftWhileMuted`.
285
+ * @docs-private
286
+ */
287
+ protected trackPointerLeave(event: MouseEvent): void;
276
288
  /**
277
289
  * Hides the tooltip because something else took its place — another tooltip became visible, or a pop-up
278
290
  * anchored to the same element opened.