@koobiq/components 19.0.0 → 19.1.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 (80) hide show
  1. package/app-switcher/app-switcher.d.ts +4 -3
  2. package/checkbox/checkbox.scss +5 -21
  3. package/core/locales/en-US.d.ts +8 -0
  4. package/core/locales/es-LA.d.ts +8 -0
  5. package/core/locales/locale-service.d.ts +40 -0
  6. package/core/locales/pt-BR.d.ts +8 -0
  7. package/core/locales/ru-RU.d.ts +8 -0
  8. package/core/locales/tk-TM.d.ts +8 -0
  9. package/core/locales/types.d.ts +21 -0
  10. package/core/option/option.d.ts +1 -0
  11. package/core/styles/common/_visually-hidden.scss +1 -0
  12. package/core/styles/theming/_scrollbar-theme.scss +1 -0
  13. package/datepicker/datepicker-input.directive.d.ts +1 -1
  14. package/fesm2022/koobiq-components-app-switcher.mjs +19 -16
  15. package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
  16. package/fesm2022/koobiq-components-checkbox.mjs +2 -2
  17. package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
  18. package/fesm2022/koobiq-components-content-panel.mjs.map +1 -1
  19. package/fesm2022/koobiq-components-core.mjs +54 -12
  20. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  21. package/fesm2022/koobiq-components-datepicker.mjs +0 -1
  22. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  23. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  24. package/fesm2022/koobiq-components-file-upload.mjs +106 -64
  25. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  26. package/fesm2022/koobiq-components-filter-bar.mjs +75 -38
  27. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  28. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
  29. package/fesm2022/koobiq-components-loader-overlay.mjs +2 -2
  30. package/fesm2022/koobiq-components-loader-overlay.mjs.map +1 -1
  31. package/fesm2022/koobiq-components-modal.mjs +2 -2
  32. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  33. package/fesm2022/koobiq-components-navbar-ic.mjs.map +1 -1
  34. package/fesm2022/koobiq-components-popover.mjs +4 -4
  35. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  36. package/fesm2022/koobiq-components-progress-spinner.mjs +3 -2
  37. package/fesm2022/koobiq-components-progress-spinner.mjs.map +1 -1
  38. package/fesm2022/koobiq-components-risk-level.mjs +6 -0
  39. package/fesm2022/koobiq-components-risk-level.mjs.map +1 -1
  40. package/fesm2022/koobiq-components-scrollbar.mjs.map +1 -1
  41. package/fesm2022/koobiq-components-select.mjs +4 -2
  42. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  43. package/fesm2022/koobiq-components-sidebar.mjs.map +1 -1
  44. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  45. package/fesm2022/koobiq-components-timepicker.mjs +3 -4
  46. package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
  47. package/fesm2022/koobiq-components-title.mjs +15 -2
  48. package/fesm2022/koobiq-components-title.mjs.map +1 -1
  49. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  50. package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
  51. package/fesm2022/koobiq-components-tooltip.mjs +2 -2
  52. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  53. package/fesm2022/koobiq-components-tree.mjs +2 -2
  54. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  55. package/file-upload/file-upload.d.ts +22 -3
  56. package/file-upload/multiple-file-upload.component.d.ts +15 -27
  57. package/file-upload/single-file-upload.component.d.ts +16 -12
  58. package/filter-bar/pipes/pipe-multi-select.d.ts +4 -1
  59. package/filter-bar/pipes/pipe-multi-tree-select.d.ts +5 -0
  60. package/loader-overlay/loader-overlay.scss +22 -31
  61. package/modal/modal.scss +1 -1
  62. package/package.json +6 -6
  63. package/popover/_popover-theme.scss +2 -2
  64. package/progress-spinner/_progress-spinner-theme.scss +14 -4
  65. package/progress-spinner/progress-spinner-tokens.scss +2 -0
  66. package/progress-spinner/progress-spinner.scss +1 -1
  67. package/risk-level/risk-level.component.d.ts +3 -0
  68. package/risk-level/risk-level.module.d.ts +3 -0
  69. package/schematics/migrations/new-icons-pack/README.md +52 -4
  70. package/schematics/migrations/new-icons-pack/data.js +1142 -1142
  71. package/schematics/migrations/new-icons-pack/index.js +18 -7
  72. package/schematics/migrations/new-icons-pack/migration.json +4570 -0
  73. package/schematics/migrations/new-icons-pack/replacement.json +18 -0
  74. package/schematics/migrations/new-icons-pack/schema.json +13 -0
  75. package/schematics/ng-add/index.js +4 -4
  76. package/timepicker/timepicker.directive.d.ts +2 -2
  77. package/title/title.directive.d.ts +3 -0
  78. package/tooltip/_tooltip-theme.scss +5 -6
  79. package/tooltip/tooltip.scss +1 -0
  80. package/tree/tree-option.scss +1 -1
@@ -116,8 +116,7 @@ export declare class KbqAppSwitcherTrigger extends KbqPopUpTrigger<KbqAppSwitche
116
116
  /** Whether the sites are used or not
117
117
  * @docs-private */
118
118
  get sitesMode(): boolean;
119
- /** Whether the sites are used or not
120
- * @docs-private */
119
+ /** @docs-private */
121
120
  get currentApps(): KbqAppSwitcherApp[];
122
121
  /** Selected application */
123
122
  selectedApp: KbqAppSwitcherApp;
@@ -131,7 +130,9 @@ export declare class KbqAppSwitcherTrigger extends KbqPopUpTrigger<KbqAppSwitche
131
130
  get sites(): KbqAppSwitcherSite[];
132
131
  set sites(value: KbqAppSwitcherSite[]);
133
132
  private _parsedSites;
134
- /** Array of applications */
133
+ /**
134
+ * @deprecated Will be removed in next major release, use `sites` with one element instead.
135
+ */
135
136
  get apps(): KbqAppSwitcherApp[];
136
137
  set apps(apps: KbqAppSwitcherApp[]);
137
138
  private makeGroupsForApps;
@@ -1,4 +1,3 @@
1
- @use '../core/styles/common/tokens' as *;
2
1
  @use './checkbox-theme' as *;
3
2
 
4
3
  .kbq-checkbox-checkmark,
@@ -27,10 +26,7 @@
27
26
  }
28
27
 
29
28
  .kbq-checkbox__layout {
30
- $padding-left: kbq-sum-series-css-variables(
31
- [checkbox-size-normal-width,
32
- checkbox-size-normal-horizontal-content-padding]
33
- );
29
+ --padding: calc(var(--kbq-checkbox-size-normal-width) + var(--kbq-checkbox-size-normal-horizontal-content-padding));
34
30
 
35
31
  box-sizing: initial;
36
32
 
@@ -39,7 +35,7 @@
39
35
 
40
36
  display: inline-flex;
41
37
 
42
- max-width: calc(100% - $padding-left);
38
+ max-width: calc(100% - var(--padding));
43
39
 
44
40
  // `cursor: inherit` ensures that the wrapper element gets the same cursor as the kbq-checkbox
45
41
  // (e.g. pointer by default, regular when disabled), instead of the browser default.
@@ -49,7 +45,7 @@
49
45
 
50
46
  padding-bottom: var(--kbq-checkbox-size-normal-padding-bottom);
51
47
 
52
- padding-left: $padding-left;
48
+ padding-left: var(--padding);
53
49
 
54
50
  vertical-align: top;
55
51
  }
@@ -104,16 +100,7 @@
104
100
  }
105
101
 
106
102
  .kbq-checkbox.kbq-checkbox_big {
107
- & .kbq-checkbox__layout {
108
- $padding-left: kbq-sum-series-css-variables(
109
- [ checkbox-size-normal-width,
110
- checkbox-size-normal-horizontal-content-padding]
111
- );
112
-
113
- max-width: calc(100% - $padding-left);
114
-
115
- padding-left: $padding-left;
116
- }
103
+ --padding: calc(var(--kbq-checkbox-size-big-width) + var(--kbq-checkbox-size-big-horizontal-content-padding));
117
104
 
118
105
  & .kbq-checkbox__inner-container {
119
106
  top: var(--kbq-checkbox-size-big-top);
@@ -152,10 +139,7 @@
152
139
  .kbq-checkbox_label-before {
153
140
  .kbq-checkbox__layout {
154
141
  padding-left: 0;
155
- padding-right: kbq-sum-series-css-variables(
156
- [ checkbox-size-normal-width,
157
- checkbox-size-normal-horizontal-content-padding]
158
- );
142
+ padding-right: var(--padding);
159
143
  }
160
144
 
161
145
  .kbq-checkbox__inner-container {
@@ -15,13 +15,21 @@ export declare const enUSLocaleData: {
15
15
  fileUpload: {
16
16
  single: {
17
17
  captionText: string;
18
+ captionTextOnlyFolder: string;
19
+ captionTextWithFolder: string;
18
20
  browseLink: string;
21
+ browseLinkFolder: string;
22
+ browseLinkFolderMixed: string;
19
23
  };
20
24
  multiple: {
21
25
  captionText: string;
26
+ captionTextOnlyFolder: string;
27
+ captionTextWithFolder: string;
22
28
  captionTextWhenSelected: string;
23
29
  captionTextForCompactSize: string;
24
30
  browseLink: string;
31
+ browseLinkFolder: string;
32
+ browseLinkFolderMixed: string;
25
33
  title: string;
26
34
  gridHeaders: {
27
35
  file: string;
@@ -14,13 +14,21 @@ export declare const esLALocaleData: {
14
14
  fileUpload: {
15
15
  single: {
16
16
  captionText: string;
17
+ captionTextOnlyFolder: string;
18
+ captionTextWithFolder: string;
17
19
  browseLink: string;
20
+ browseLinkFolder: string;
21
+ browseLinkFolderMixed: string;
18
22
  };
19
23
  multiple: {
20
24
  captionText: string;
25
+ captionTextOnlyFolder: string;
26
+ captionTextWithFolder: string;
21
27
  captionTextWhenSelected: string;
22
28
  captionTextForCompactSize: string;
23
29
  browseLink: string;
30
+ browseLinkFolder: string;
31
+ browseLinkFolderMixed: string;
24
32
  title: string;
25
33
  gridHeaders: {
26
34
  file: string;
@@ -60,13 +60,21 @@ export declare function KBQ_DEFAULT_LOCALE_DATA_FACTORY(): {
60
60
  fileUpload: {
61
61
  single: {
62
62
  captionText: string;
63
+ captionTextOnlyFolder: string;
64
+ captionTextWithFolder: string;
63
65
  browseLink: string;
66
+ browseLinkFolder: string;
67
+ browseLinkFolderMixed: string;
64
68
  };
65
69
  multiple: {
66
70
  captionText: string;
71
+ captionTextOnlyFolder: string;
72
+ captionTextWithFolder: string;
67
73
  captionTextWhenSelected: string;
68
74
  captionTextForCompactSize: string;
69
75
  browseLink: string;
76
+ browseLinkFolder: string;
77
+ browseLinkFolderMixed: string;
70
78
  title: string;
71
79
  gridHeaders: {
72
80
  file: string;
@@ -266,13 +274,21 @@ export declare function KBQ_DEFAULT_LOCALE_DATA_FACTORY(): {
266
274
  fileUpload: {
267
275
  single: {
268
276
  captionText: string;
277
+ captionTextOnlyFolder: string;
278
+ captionTextWithFolder: string;
269
279
  browseLink: string;
280
+ browseLinkFolder: string;
281
+ browseLinkFolderMixed: string;
270
282
  };
271
283
  multiple: {
272
284
  captionText: string;
285
+ captionTextOnlyFolder: string;
286
+ captionTextWithFolder: string;
273
287
  captionTextWhenSelected: string;
274
288
  captionTextForCompactSize: string;
275
289
  browseLink: string;
290
+ browseLinkFolder: string;
291
+ browseLinkFolderMixed: string;
276
292
  title: string;
277
293
  gridHeaders: {
278
294
  file: string;
@@ -468,13 +484,21 @@ export declare function KBQ_DEFAULT_LOCALE_DATA_FACTORY(): {
468
484
  fileUpload: {
469
485
  single: {
470
486
  captionText: string;
487
+ captionTextOnlyFolder: string;
488
+ captionTextWithFolder: string;
471
489
  browseLink: string;
490
+ browseLinkFolder: string;
491
+ browseLinkFolderMixed: string;
472
492
  };
473
493
  multiple: {
474
494
  captionText: string;
495
+ captionTextOnlyFolder: string;
496
+ captionTextWithFolder: string;
475
497
  captionTextWhenSelected: string;
476
498
  captionTextForCompactSize: string;
477
499
  browseLink: string;
500
+ browseLinkFolder: string;
501
+ browseLinkFolderMixed: string;
478
502
  title: string;
479
503
  gridHeaders: {
480
504
  file: string;
@@ -676,13 +700,21 @@ export declare function KBQ_DEFAULT_LOCALE_DATA_FACTORY(): {
676
700
  fileUpload: {
677
701
  single: {
678
702
  captionText: string;
703
+ captionTextOnlyFolder: string;
704
+ captionTextWithFolder: string;
679
705
  browseLink: string;
706
+ browseLinkFolder: string;
707
+ browseLinkFolderMixed: string;
680
708
  };
681
709
  multiple: {
682
710
  captionText: string;
711
+ captionTextOnlyFolder: string;
712
+ captionTextWithFolder: string;
683
713
  captionTextWhenSelected: string;
684
714
  captionTextForCompactSize: string;
685
715
  browseLink: string;
716
+ browseLinkFolder: string;
717
+ browseLinkFolderMixed: string;
686
718
  title: string;
687
719
  gridHeaders: {
688
720
  file: string;
@@ -880,13 +912,21 @@ export declare function KBQ_DEFAULT_LOCALE_DATA_FACTORY(): {
880
912
  fileUpload: {
881
913
  single: {
882
914
  captionText: string;
915
+ captionTextOnlyFolder: string;
916
+ captionTextWithFolder: string;
883
917
  browseLink: string;
918
+ browseLinkFolder: string;
919
+ browseLinkFolderMixed: string;
884
920
  };
885
921
  multiple: {
886
922
  captionText: string;
923
+ captionTextOnlyFolder: string;
924
+ captionTextWithFolder: string;
887
925
  captionTextWhenSelected: string;
888
926
  captionTextForCompactSize: string;
889
927
  browseLink: string;
928
+ browseLinkFolder: string;
929
+ browseLinkFolderMixed: string;
890
930
  title: string;
891
931
  gridHeaders: {
892
932
  file: string;
@@ -14,13 +14,21 @@ export declare const ptBRLocaleData: {
14
14
  fileUpload: {
15
15
  single: {
16
16
  captionText: string;
17
+ captionTextOnlyFolder: string;
18
+ captionTextWithFolder: string;
17
19
  browseLink: string;
20
+ browseLinkFolder: string;
21
+ browseLinkFolderMixed: string;
18
22
  };
19
23
  multiple: {
20
24
  captionText: string;
25
+ captionTextOnlyFolder: string;
26
+ captionTextWithFolder: string;
21
27
  captionTextWhenSelected: string;
22
28
  captionTextForCompactSize: string;
23
29
  browseLink: string;
30
+ browseLinkFolder: string;
31
+ browseLinkFolderMixed: string;
24
32
  title: string;
25
33
  gridHeaders: {
26
34
  file: string;
@@ -15,13 +15,21 @@ export declare const ruRULocaleData: {
15
15
  fileUpload: {
16
16
  single: {
17
17
  captionText: string;
18
+ captionTextOnlyFolder: string;
19
+ captionTextWithFolder: string;
18
20
  browseLink: string;
21
+ browseLinkFolder: string;
22
+ browseLinkFolderMixed: string;
19
23
  };
20
24
  multiple: {
21
25
  captionText: string;
26
+ captionTextOnlyFolder: string;
27
+ captionTextWithFolder: string;
22
28
  captionTextWhenSelected: string;
23
29
  captionTextForCompactSize: string;
24
30
  browseLink: string;
31
+ browseLinkFolder: string;
32
+ browseLinkFolderMixed: string;
25
33
  title: string;
26
34
  gridHeaders: {
27
35
  file: string;
@@ -15,13 +15,21 @@ export declare const tkTMLocaleData: {
15
15
  fileUpload: {
16
16
  single: {
17
17
  captionText: string;
18
+ captionTextOnlyFolder: string;
19
+ captionTextWithFolder: string;
18
20
  browseLink: string;
21
+ browseLinkFolder: string;
22
+ browseLinkFolderMixed: string;
19
23
  };
20
24
  multiple: {
21
25
  captionText: string;
26
+ captionTextOnlyFolder: string;
27
+ captionTextWithFolder: string;
22
28
  captionTextWhenSelected: string;
23
29
  captionTextForCompactSize: string;
24
30
  browseLink: string;
31
+ browseLinkFolder: string;
32
+ browseLinkFolderMixed: string;
25
33
  title: string;
26
34
  gridHeaders: {
27
35
  file: string;
@@ -56,3 +56,24 @@ export type KbqTimeRangeLocaleConfig = {
56
56
  option: FormatterDurationTemplate;
57
57
  };
58
58
  };
59
+ export interface KbqBaseFileUploadLocaleConfig {
60
+ captionText: string;
61
+ captionTextOnlyFolder: string;
62
+ captionTextWithFolder: string;
63
+ browseLink: string;
64
+ browseLinkFolder: string;
65
+ browseLinkFolderMixed?: string;
66
+ }
67
+ export interface KbqMultipleFileUploadLocaleConfig extends KbqBaseFileUploadLocaleConfig {
68
+ captionTextWhenSelected: string;
69
+ captionTextForCompactSize: string;
70
+ title: string;
71
+ gridHeaders: {
72
+ file: string;
73
+ size: string;
74
+ };
75
+ }
76
+ export type KbqFileUploadLocaleConfig = {
77
+ single: KbqBaseFileUploadLocaleConfig;
78
+ multiple: KbqMultipleFileUploadLocaleConfig;
79
+ };
@@ -17,6 +17,7 @@ export declare class KbqOptionSelectionChange<T = KbqOption> {
17
17
  export interface KbqOptionParentComponent {
18
18
  multiple?: boolean;
19
19
  multiSelection?: boolean;
20
+ withVirtualScroll?: boolean;
20
21
  setSelectedOptionsByClick: (option: KbqOption) => void;
21
22
  }
22
23
  /**
@@ -3,6 +3,7 @@
3
3
  @mixin a11y-visually-hidden() {
4
4
  .cdk-visually-hidden {
5
5
  border: 0;
6
+ /* stylelint-disable-next-line property-no-deprecated */
6
7
  clip: rect(0 0 0 0);
7
8
  height: 1px;
8
9
  margin: -1px;
@@ -20,6 +20,7 @@
20
20
  @mixin _kbq-scrollbar() {
21
21
  // For Firefox compatibility
22
22
  @supports not selector(::-webkit-scrollbar) {
23
+ /* stylelint-disable-next-line no-invalid-position-declaration */
23
24
  scrollbar-width: auto;
24
25
  }
25
26
 
@@ -2,7 +2,7 @@ import { AfterContentInit, DoCheck, ElementRef, EventEmitter, InjectionToken, On
2
2
  import { AbstractControl, ControlValueAccessor, ValidationErrors, Validator } from '@angular/forms';
3
3
  import { DateAdapter, ErrorStateMatcher, KbqDateFormats } from '@koobiq/components/core';
4
4
  import { KbqFormFieldControl } from '@koobiq/components/form-field';
5
- import { KbqWarningTooltipTrigger } from '@koobiq/components/tooltip';
5
+ import type { KbqWarningTooltipTrigger } from '@koobiq/components/tooltip';
6
6
  import { Subject } from 'rxjs';
7
7
  import { KbqCalendar } from './calendar.component';
8
8
  import { KbqDatepicker } from './datepicker.component';
@@ -355,7 +355,7 @@ class KbqAppSwitcherComponent extends KbqPopUp {
355
355
  this.configuration = KBQ_APP_SWITCHER_DEFAULT_CONFIGURATION;
356
356
  }
357
357
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: KbqAppSwitcherComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
358
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.17", type: KbqAppSwitcherComponent, isStandalone: true, selector: "kbq-app-switcher", inputs: { trigger: "trigger" }, host: { classAttribute: "kbq-app-switcher" }, viewQueries: [{ propertyName: "input", first: true, predicate: KbqInput, descendants: true }, { propertyName: "otherSites", first: true, predicate: ["otherSites"], descendants: true }], usesInheritance: true, ngImport: i0, template: "@if (trigger.withSearch) {\n <div class=\"kbq-app-switcher__search-container\" (mouseenter)=\"otherSites?.close()\">\n <kbq-form-field noBorders>\n <i kbq-icon=\"kbq-magnifying-glass_16\" kbqPrefix></i>\n <input\n placeholder=\"{{ localeData.searchPlaceholder }}\"\n autocomplete=\"off\"\n kbqInput\n [formControl]=\"searchControl\"\n (keydown.escape)=\"escapeHandler()\"\n />\n <kbq-cleaner />\n </kbq-form-field>\n </div>\n\n <kbq-divider />\n}\n\n<div kbq-scrollbar>\n @if (!searchControl.getRawValue()) {\n <div class=\"kbq-app-switcher__app-container\" (mouseenter)=\"otherSites?.close()\">\n @if (trigger.sitesMode) {\n <div class=\"kbq-app-switcher-group-header\">\n <div class=\"kbq-app-switcher-group-header__text\">{{ trigger.selectedSite?.name }}</div>\n @if (trigger.selectedSite?.status) {\n <kbq-badge class=\"kbq-app-switcher-group-header__badge\" [compact]=\"true\">\n {{ trigger.selectedSite.status }}\n </kbq-badge>\n }\n </div>\n }\n\n <kbq-dropdown [class]=\"'kbq-app-switcher-sites'\">\n <div kbqDropdownStaticContent class=\"kbq-app-switcher-site\">\n @for (app of trigger.currentApps; track app) {\n @if (!app.aliases) {\n <a\n href=\"{{ app.link }}\"\n kbq-app-switcher-list-item\n [class.kbq-selected]=\"app.id === trigger.selectedApp?.id\"\n [app]=\"app\"\n [toggle]=\"!!app.aliases\"\n ></a>\n } @else {\n <div\n #appSwitcherApp=\"kbqAppSwitcherApp\"\n kbq-app-switcher-list-item\n [app]=\"app\"\n [toggle]=\"!!app.aliases\"\n ></div>\n\n @if (!appSwitcherApp.collapsed) {\n @for (alias of app.aliases; track alias) {\n <a\n href=\"{{ alias.link }}\"\n class=\"kbq-app-switcher-site_nested\"\n kbq-app-switcher-list-item\n [class.kbq-selected]=\"alias.id === trigger.selectedApp?.id\"\n [app]=\"alias\"\n ></a>\n }\n }\n }\n }\n </div>\n </kbq-dropdown>\n </div>\n\n @if (trigger.sitesMode) {\n <kbq-divider />\n\n <div class=\"kbq-app-switcher__sites-container\">\n <div class=\"kbq-app-switcher-group-header\">\n <div class=\"kbq-app-switcher-group-header__text\">{{ localeData.sitesHeader }}</div>\n </div>\n\n <kbq-dropdown #otherSites=\"kbqDropdown\">\n <div kbqDropdownStaticContent class=\"kbq-app-switcher-sites\">\n @for (site of trigger.sites; track site) {\n @if (site.id !== trigger.selectedSite?.id) {\n <div\n [kbq-app-switcher-dropdown-site]=\"site\"\n [kbqDropdownTriggerFor]=\"dropdownWithSelectedSite\"\n [offsetX]=\"0\"\n (mouseenter)=\"activeSite = site\"\n ></div>\n }\n }\n </div>\n </kbq-dropdown>\n </div>\n\n <kbq-dropdown #dropdownWithSelectedSite=\"kbqDropdown\" [class]=\"'kbq-app-switcher-sites'\">\n @for (app of activeSite?.apps; track app) {\n @if (app.aliases) {\n <div\n #dropdownWithGroupedAppsTrigger=\"kbqDropdownTrigger\"\n [kbq-app-switcher-dropdown-app]=\"app\"\n [kbqDropdownTriggerFor]=\"dropdownWithGroupedApps\"\n [offsetX]=\"0\"\n [class.kbq-pressed]=\"dropdownWithGroupedAppsTrigger.opened\"\n (mouseenter)=\"activeApp = app\"\n ></div>\n } @else {\n <a\n href=\"{{ app.link }}\"\n [kbq-app-switcher-dropdown-app]=\"app\"\n (click)=\"selectAppInSite(activeSite, app)\"\n ></a>\n }\n }\n </kbq-dropdown>\n\n <kbq-dropdown #dropdownWithGroupedApps=\"kbqDropdown\" [class]=\"'kbq-app-switcher-sites'\">\n @for (alias of activeApp?.aliases; track alias) {\n <a\n href=\"{{ alias.link }}\"\n [kbq-app-switcher-dropdown-app]=\"alias\"\n (click)=\"selectAppInSite(activeSite, alias)\"\n ></a>\n }\n </kbq-dropdown>\n }\n } @else {\n <div class=\"kbq-app-switcher__search-result\">\n <kbq-dropdown [class]=\"'kbq-app-switcher-sites'\">\n <div kbqDropdownStaticContent class=\"kbq-app-switcher-site\">\n @for (site of filteredSites; track site) {\n @if (site.apps) {\n <kbq-optgroup label=\"{{ site.name }}\" />\n }\n\n @for (app of site.apps; track app) {\n <a href=\"{{ app.link }}\" kbq-app-switcher-list-item [app]=\"app\"></a>\n }\n } @empty {\n <div class=\"kbq-app-switcher__empty-search-result\">{{ localeData.searchEmptyResult }}</div>\n }\n </div>\n </kbq-dropdown>\n </div>\n }\n</div>\n", styles: [".kbq-app-switcher{position:relative;display:flex;flex-direction:column;margin-top:var(--kbq-size-xxs);margin-bottom:var(--kbq-size-xxs);width:320px;border-radius:var(--kbq-size-xs);box-shadow:var(--kbq-shadow-popup);box-sizing:border-box;z-index:1}.kbq-app-switcher__search-container{padding-top:var(--kbq-size-xxs)}.kbq-app-switcher__search-result{max-width:320px;min-height:0;padding:var(--kbq-size-s) var(--kbq-size-xxs)}.kbq-app-switcher__empty-search-result{display:flex;justify-content:center;align-items:center;height:96px}.kbq-app-switcher__app-container{display:flex;flex-direction:column;min-height:0;padding:var(--kbq-size-s) var(--kbq-size-xxs)}.kbq-app-switcher-group-header{padding:var(--kbq-size-s) var(--kbq-size-m);display:flex;flex-direction:row;justify-content:space-between}.kbq-app-switcher__sites-container{padding:var(--kbq-size-xxs)}.kbq-app-switcher{background:var(--kbq-background-card)}.kbq-app-switcher .kbq-app-switcher-group-header,.kbq-app-switcher__empty-search-result{color:var(--kbq-foreground-contrast-secondary)}.kbq-app-switcher,.kbq-app-switcher__empty-search-result{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}.kbq-app-switcher-group-header__text{font-size:var(--kbq-typography-caps-compact-strong-font-size);font-style:var(--kbq-typography-caps-compact-strong-font-style);font-weight:var(--kbq-typography-caps-compact-strong-font-weight);line-height:var(--kbq-typography-caps-compact-strong-line-height);font-family:var(--kbq-typography-caps-compact-strong-font-family);text-transform:var(--kbq-typography-caps-compact-strong-text-transform);font-feature-settings:var(--kbq-typography-caps-compact-strong-font-feature-settings);letter-spacing:var(--kbq-typography-caps-compact-strong-letter-spacing)}.kbq-app-switcher-group-header__badge{font-size:var(--kbq-typography-text-compact-medium-font-size);font-style:var(--kbq-typography-text-compact-medium-font-style);font-weight:var(--kbq-typography-text-compact-medium-font-weight);line-height:var(--kbq-typography-text-compact-medium-line-height);font-family:var(--kbq-typography-text-compact-medium-font-family);text-transform:var(--kbq-typography-text-compact-medium-text-transform);font-feature-settings:var(--kbq-typography-text-compact-medium-font-feature-settings);letter-spacing:var(--kbq-typography-text-compact-medium-letter-spacing)}.kbq-app-switch-tree-option__text{font-size:var(--kbq-typography-text-normal-medium-font-size);font-style:var(--kbq-typography-text-normal-medium-font-style);font-weight:var(--kbq-typography-text-normal-medium-font-weight);line-height:var(--kbq-typography-text-normal-medium-line-height);font-family:var(--kbq-typography-text-normal-medium-font-family);text-transform:var(--kbq-typography-text-normal-medium-text-transform);font-feature-settings:var(--kbq-typography-text-normal-medium-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-medium-letter-spacing)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: KbqFormFieldModule }, { kind: "component", type: i2.KbqCleaner, selector: "kbq-cleaner", exportAs: ["kbqCleaner"] }, { kind: "component", type: i2.KbqFormField, selector: "kbq-form-field", inputs: ["noBorders"], exportAs: ["kbqFormField"] }, { kind: "directive", type: i2.KbqPrefix, selector: "[kbqPrefix]", exportAs: ["kbqPrefix"] }, { kind: "directive", type: i2.KbqValidateDirective, selector: " input[kbqInput], input[kbqNumberInput], input[kbqInputPassword], input[kbqTimepicker], input[kbqDatepicker], textarea[kbqTextarea], kbq-select, kbq-tree-select, kbq-tag-list ", exportAs: ["KbqValidate"] }, { kind: "directive", type: i2.KbqTrim, selector: "[kbqInput], [kbqTextarea]", exportAs: ["KbqTrim"] }, { kind: "ngmodule", type: KbqInputModule }, { kind: "directive", type: i3.KbqInput, selector: "input[kbqInput],input[kbqNumberInput]", inputs: ["errorStateMatcher", "placeholder", "disabled", "id", "required", "type", "value"], exportAs: ["kbqInput"] }, { kind: "ngmodule", type: KbqIconModule }, { kind: "component", type: i4.KbqIcon, selector: "[kbq-icon]", inputs: ["small", "autoColor", "kbq-icon"] }, { kind: "ngmodule", type: KbqDividerModule }, { kind: "component", type: i5.KbqDivider, selector: "kbq-divider", inputs: ["vertical", "inset", "paddings"] }, { kind: "ngmodule", type: KbqBadgeModule }, { kind: "component", type: i1.KbqBadge, selector: "kbq-badge", inputs: ["compact", "outline", "badgeColor"] }, { kind: "directive", type: i1.KbqBadgeCssStyler, selector: "kbq-badge" }, { kind: "ngmodule", type: KbqDropdownModule }, { kind: "component", type: i7.KbqDropdown, selector: "kbq-dropdown", inputs: ["navigationWithWrap", "xPosition", "yPosition", "overlapTriggerY", "overlapTriggerX", "hasBackdrop", "class", "backdropClass"], outputs: ["closed"], exportAs: ["kbqDropdown"] }, { kind: "directive", type: i7.KbqDropdownTrigger, selector: "[kbqDropdownTriggerFor]", inputs: ["offsetX", "offsetY", "kbqDropdownTriggerData", "openByArrowDown", "kbqDropdownTriggerRestoreFocus", "kbqDropdownTriggerFor"], outputs: ["dropdownOpened", "dropdownClosed"], exportAs: ["kbqDropdownTrigger"] }, { kind: "directive", type: i7.KbqDropdownStaticContent, selector: "[kbqDropdownStaticContent]" }, { kind: "ngmodule", type: KbqScrollbarModule }, { kind: "component", type: i8.KbqScrollbar, selector: "kbq-scrollbar, [kbq-scrollbar]", inputs: ["initializationTarget", "options", "events", "defer"], outputs: ["onInitialize", "onUpdate", "onDestroy", "onScroll"], exportAs: ["kbqScrollbar"] }, { kind: "ngmodule", type: KbqOptionModule }, { kind: "component", type: i9.KbqOptgroup, selector: "kbq-optgroup", inputs: ["label", "disabled"], exportAs: ["kbqOptgroup"] }, { kind: "component", type: KbqAppSwitcherDropdownApp, selector: "[kbq-app-switcher-dropdown-app]", inputs: ["kbq-app-switcher-dropdown-app"], exportAs: ["kbqAppSwitcherDropdownApp"] }, { kind: "component", type: KbqAppSwitcherDropdownSite, selector: "[kbq-app-switcher-dropdown-site]", inputs: ["kbq-app-switcher-dropdown-site"], exportAs: ["kbqAppSwitcherDropdownSite"] }, { kind: "component", type: KbqAppSwitcherListItem, selector: "[kbq-app-switcher-list-item]", inputs: ["app", "toggle", "collapsed"], exportAs: ["kbqAppSwitcherApp"] }], animations: [kbqAppSwitcherAnimations.state], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
358
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.17", type: KbqAppSwitcherComponent, isStandalone: true, selector: "kbq-app-switcher", inputs: { trigger: "trigger" }, host: { classAttribute: "kbq-app-switcher" }, viewQueries: [{ propertyName: "input", first: true, predicate: KbqInput, descendants: true }, { propertyName: "otherSites", first: true, predicate: ["otherSites"], descendants: true }], usesInheritance: true, ngImport: i0, template: "@if (trigger.withSearch) {\n <div class=\"kbq-app-switcher__search-container\" (mouseenter)=\"otherSites?.close()\">\n <kbq-form-field noBorders>\n <i kbq-icon=\"kbq-magnifying-glass_16\" kbqPrefix></i>\n <input\n placeholder=\"{{ localeData.searchPlaceholder }}\"\n autocomplete=\"off\"\n kbqInput\n [formControl]=\"searchControl\"\n (keydown.escape)=\"escapeHandler()\"\n />\n <kbq-cleaner />\n </kbq-form-field>\n </div>\n\n <kbq-divider />\n}\n\n<div kbq-scrollbar>\n @if (!searchControl.getRawValue()) {\n <div class=\"kbq-app-switcher__app-container\" (mouseenter)=\"otherSites?.close()\">\n @if (trigger.sitesMode) {\n <div class=\"kbq-app-switcher-group-header\">\n <div class=\"kbq-app-switcher-group-header__text\">{{ trigger.selectedSite?.name }}</div>\n @if (trigger.selectedSite?.status) {\n <kbq-badge class=\"kbq-app-switcher-group-header__badge\" [compact]=\"true\">\n {{ trigger.selectedSite.status }}\n </kbq-badge>\n }\n </div>\n }\n\n <kbq-dropdown [class]=\"'kbq-app-switcher-sites'\">\n <div kbqDropdownStaticContent class=\"kbq-app-switcher-site\">\n @for (app of trigger.currentApps; track app) {\n @if (!app.aliases) {\n <a\n href=\"{{ app.link }}\"\n kbq-app-switcher-list-item\n [class.kbq-selected]=\"app.id === trigger.selectedApp?.id\"\n [app]=\"app\"\n [toggle]=\"!!app.aliases\"\n ></a>\n } @else {\n <div\n #appSwitcherApp=\"kbqAppSwitcherApp\"\n kbq-app-switcher-list-item\n [app]=\"app\"\n [toggle]=\"!!app.aliases\"\n ></div>\n\n @if (!appSwitcherApp.collapsed) {\n @for (alias of app.aliases; track alias) {\n <a\n href=\"{{ alias.link }}\"\n class=\"kbq-app-switcher-site_nested\"\n kbq-app-switcher-list-item\n [class.kbq-selected]=\"alias.id === trigger.selectedApp?.id\"\n [app]=\"alias\"\n ></a>\n }\n }\n }\n }\n </div>\n </kbq-dropdown>\n </div>\n\n @if (trigger.sitesMode) {\n <kbq-divider />\n\n <div class=\"kbq-app-switcher__sites-container\">\n <div class=\"kbq-app-switcher-group-header\">\n <div class=\"kbq-app-switcher-group-header__text\">{{ localeData.sitesHeader }}</div>\n </div>\n\n <kbq-dropdown #otherSites=\"kbqDropdown\">\n <div kbqDropdownStaticContent class=\"kbq-app-switcher-sites\">\n @for (site of trigger.sites; track site) {\n @if (site.id !== trigger.selectedSite?.id) {\n <div\n [kbq-app-switcher-dropdown-site]=\"site\"\n [kbqDropdownTriggerFor]=\"dropdownWithSelectedSite\"\n [offsetX]=\"0\"\n (mouseenter)=\"activeSite = site\"\n ></div>\n }\n }\n </div>\n </kbq-dropdown>\n </div>\n\n <kbq-dropdown #dropdownWithSelectedSite=\"kbqDropdown\" [class]=\"'kbq-app-switcher-sites'\">\n @for (app of activeSite?.apps; track app) {\n @if (app.aliases) {\n <div\n #dropdownWithGroupedAppsTrigger=\"kbqDropdownTrigger\"\n [kbq-app-switcher-dropdown-app]=\"app\"\n [kbqDropdownTriggerFor]=\"dropdownWithGroupedApps\"\n [offsetX]=\"0\"\n [class.kbq-pressed]=\"dropdownWithGroupedAppsTrigger.opened\"\n (mouseenter)=\"activeApp = app\"\n ></div>\n } @else {\n <a\n href=\"{{ app.link }}\"\n [kbq-app-switcher-dropdown-app]=\"app\"\n (click)=\"selectAppInSite(activeSite, app)\"\n ></a>\n }\n }\n </kbq-dropdown>\n\n <kbq-dropdown #dropdownWithGroupedApps=\"kbqDropdown\" [class]=\"'kbq-app-switcher-sites'\">\n @for (alias of activeApp?.aliases; track alias) {\n <a\n href=\"{{ alias.link }}\"\n [kbq-app-switcher-dropdown-app]=\"alias\"\n (click)=\"selectAppInSite(activeSite, alias)\"\n ></a>\n }\n </kbq-dropdown>\n }\n } @else {\n <div class=\"kbq-app-switcher__search-result\">\n <kbq-dropdown [class]=\"'kbq-app-switcher-sites'\">\n <div kbqDropdownStaticContent class=\"kbq-app-switcher-site\">\n @for (site of filteredSites; track site) {\n @if (trigger.sitesMode && site.apps) {\n <kbq-optgroup label=\"{{ site.name }}\" />\n }\n\n @for (app of site.apps; track app) {\n <a href=\"{{ app.link }}\" kbq-app-switcher-list-item [app]=\"app\"></a>\n }\n } @empty {\n <div class=\"kbq-app-switcher__empty-search-result\">{{ localeData.searchEmptyResult }}</div>\n }\n </div>\n </kbq-dropdown>\n </div>\n }\n</div>\n", styles: [".kbq-app-switcher{position:relative;display:flex;flex-direction:column;margin-top:var(--kbq-size-xxs);margin-bottom:var(--kbq-size-xxs);width:320px;border-radius:var(--kbq-size-xs);box-shadow:var(--kbq-shadow-popup);box-sizing:border-box;z-index:1}.kbq-app-switcher__search-container{padding-top:var(--kbq-size-xxs)}.kbq-app-switcher__search-result{max-width:320px;min-height:0;padding:var(--kbq-size-s) var(--kbq-size-xxs)}.kbq-app-switcher__empty-search-result{display:flex;justify-content:center;align-items:center;height:96px}.kbq-app-switcher__app-container{display:flex;flex-direction:column;min-height:0;padding:var(--kbq-size-s) var(--kbq-size-xxs)}.kbq-app-switcher-group-header{padding:var(--kbq-size-s) var(--kbq-size-m);display:flex;flex-direction:row;justify-content:space-between}.kbq-app-switcher__sites-container{padding:var(--kbq-size-xxs)}.kbq-app-switcher{background:var(--kbq-background-card)}.kbq-app-switcher .kbq-app-switcher-group-header,.kbq-app-switcher__empty-search-result{color:var(--kbq-foreground-contrast-secondary)}.kbq-app-switcher,.kbq-app-switcher__empty-search-result{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}.kbq-app-switcher-group-header__text{font-size:var(--kbq-typography-caps-compact-strong-font-size);font-style:var(--kbq-typography-caps-compact-strong-font-style);font-weight:var(--kbq-typography-caps-compact-strong-font-weight);line-height:var(--kbq-typography-caps-compact-strong-line-height);font-family:var(--kbq-typography-caps-compact-strong-font-family);text-transform:var(--kbq-typography-caps-compact-strong-text-transform);font-feature-settings:var(--kbq-typography-caps-compact-strong-font-feature-settings);letter-spacing:var(--kbq-typography-caps-compact-strong-letter-spacing)}.kbq-app-switcher-group-header__badge{font-size:var(--kbq-typography-text-compact-medium-font-size);font-style:var(--kbq-typography-text-compact-medium-font-style);font-weight:var(--kbq-typography-text-compact-medium-font-weight);line-height:var(--kbq-typography-text-compact-medium-line-height);font-family:var(--kbq-typography-text-compact-medium-font-family);text-transform:var(--kbq-typography-text-compact-medium-text-transform);font-feature-settings:var(--kbq-typography-text-compact-medium-font-feature-settings);letter-spacing:var(--kbq-typography-text-compact-medium-letter-spacing)}.kbq-app-switch-tree-option__text{font-size:var(--kbq-typography-text-normal-medium-font-size);font-style:var(--kbq-typography-text-normal-medium-font-style);font-weight:var(--kbq-typography-text-normal-medium-font-weight);line-height:var(--kbq-typography-text-normal-medium-line-height);font-family:var(--kbq-typography-text-normal-medium-font-family);text-transform:var(--kbq-typography-text-normal-medium-text-transform);font-feature-settings:var(--kbq-typography-text-normal-medium-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-medium-letter-spacing)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: KbqFormFieldModule }, { kind: "component", type: i2.KbqCleaner, selector: "kbq-cleaner", exportAs: ["kbqCleaner"] }, { kind: "component", type: i2.KbqFormField, selector: "kbq-form-field", inputs: ["noBorders"], exportAs: ["kbqFormField"] }, { kind: "directive", type: i2.KbqPrefix, selector: "[kbqPrefix]", exportAs: ["kbqPrefix"] }, { kind: "directive", type: i2.KbqValidateDirective, selector: " input[kbqInput], input[kbqNumberInput], input[kbqInputPassword], input[kbqTimepicker], input[kbqDatepicker], textarea[kbqTextarea], kbq-select, kbq-tree-select, kbq-tag-list ", exportAs: ["KbqValidate"] }, { kind: "directive", type: i2.KbqTrim, selector: "[kbqInput], [kbqTextarea]", exportAs: ["KbqTrim"] }, { kind: "ngmodule", type: KbqInputModule }, { kind: "directive", type: i3.KbqInput, selector: "input[kbqInput],input[kbqNumberInput]", inputs: ["errorStateMatcher", "placeholder", "disabled", "id", "required", "type", "value"], exportAs: ["kbqInput"] }, { kind: "ngmodule", type: KbqIconModule }, { kind: "component", type: i4.KbqIcon, selector: "[kbq-icon]", inputs: ["small", "autoColor", "kbq-icon"] }, { kind: "ngmodule", type: KbqDividerModule }, { kind: "component", type: i5.KbqDivider, selector: "kbq-divider", inputs: ["vertical", "inset", "paddings"] }, { kind: "ngmodule", type: KbqBadgeModule }, { kind: "component", type: i1.KbqBadge, selector: "kbq-badge", inputs: ["compact", "outline", "badgeColor"] }, { kind: "directive", type: i1.KbqBadgeCssStyler, selector: "kbq-badge" }, { kind: "ngmodule", type: KbqDropdownModule }, { kind: "component", type: i7.KbqDropdown, selector: "kbq-dropdown", inputs: ["navigationWithWrap", "xPosition", "yPosition", "overlapTriggerY", "overlapTriggerX", "hasBackdrop", "class", "backdropClass"], outputs: ["closed"], exportAs: ["kbqDropdown"] }, { kind: "directive", type: i7.KbqDropdownTrigger, selector: "[kbqDropdownTriggerFor]", inputs: ["offsetX", "offsetY", "kbqDropdownTriggerData", "openByArrowDown", "kbqDropdownTriggerRestoreFocus", "kbqDropdownTriggerFor"], outputs: ["dropdownOpened", "dropdownClosed"], exportAs: ["kbqDropdownTrigger"] }, { kind: "directive", type: i7.KbqDropdownStaticContent, selector: "[kbqDropdownStaticContent]" }, { kind: "ngmodule", type: KbqScrollbarModule }, { kind: "component", type: i8.KbqScrollbar, selector: "kbq-scrollbar, [kbq-scrollbar]", inputs: ["initializationTarget", "options", "events", "defer"], outputs: ["onInitialize", "onUpdate", "onDestroy", "onScroll"], exportAs: ["kbqScrollbar"] }, { kind: "ngmodule", type: KbqOptionModule }, { kind: "component", type: i9.KbqOptgroup, selector: "kbq-optgroup", inputs: ["label", "disabled"], exportAs: ["kbqOptgroup"] }, { kind: "component", type: KbqAppSwitcherDropdownApp, selector: "[kbq-app-switcher-dropdown-app]", inputs: ["kbq-app-switcher-dropdown-app"], exportAs: ["kbqAppSwitcherDropdownApp"] }, { kind: "component", type: KbqAppSwitcherDropdownSite, selector: "[kbq-app-switcher-dropdown-site]", inputs: ["kbq-app-switcher-dropdown-site"], exportAs: ["kbqAppSwitcherDropdownSite"] }, { kind: "component", type: KbqAppSwitcherListItem, selector: "[kbq-app-switcher-list-item]", inputs: ["app", "toggle", "collapsed"], exportAs: ["kbqAppSwitcherApp"] }], animations: [kbqAppSwitcherAnimations.state], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
359
359
  }
360
360
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: KbqAppSwitcherComponent, decorators: [{
361
361
  type: Component,
@@ -375,7 +375,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
375
375
  KbqAppSwitcherListItem
376
376
  ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, host: {
377
377
  class: 'kbq-app-switcher'
378
- }, animations: [kbqAppSwitcherAnimations.state], template: "@if (trigger.withSearch) {\n <div class=\"kbq-app-switcher__search-container\" (mouseenter)=\"otherSites?.close()\">\n <kbq-form-field noBorders>\n <i kbq-icon=\"kbq-magnifying-glass_16\" kbqPrefix></i>\n <input\n placeholder=\"{{ localeData.searchPlaceholder }}\"\n autocomplete=\"off\"\n kbqInput\n [formControl]=\"searchControl\"\n (keydown.escape)=\"escapeHandler()\"\n />\n <kbq-cleaner />\n </kbq-form-field>\n </div>\n\n <kbq-divider />\n}\n\n<div kbq-scrollbar>\n @if (!searchControl.getRawValue()) {\n <div class=\"kbq-app-switcher__app-container\" (mouseenter)=\"otherSites?.close()\">\n @if (trigger.sitesMode) {\n <div class=\"kbq-app-switcher-group-header\">\n <div class=\"kbq-app-switcher-group-header__text\">{{ trigger.selectedSite?.name }}</div>\n @if (trigger.selectedSite?.status) {\n <kbq-badge class=\"kbq-app-switcher-group-header__badge\" [compact]=\"true\">\n {{ trigger.selectedSite.status }}\n </kbq-badge>\n }\n </div>\n }\n\n <kbq-dropdown [class]=\"'kbq-app-switcher-sites'\">\n <div kbqDropdownStaticContent class=\"kbq-app-switcher-site\">\n @for (app of trigger.currentApps; track app) {\n @if (!app.aliases) {\n <a\n href=\"{{ app.link }}\"\n kbq-app-switcher-list-item\n [class.kbq-selected]=\"app.id === trigger.selectedApp?.id\"\n [app]=\"app\"\n [toggle]=\"!!app.aliases\"\n ></a>\n } @else {\n <div\n #appSwitcherApp=\"kbqAppSwitcherApp\"\n kbq-app-switcher-list-item\n [app]=\"app\"\n [toggle]=\"!!app.aliases\"\n ></div>\n\n @if (!appSwitcherApp.collapsed) {\n @for (alias of app.aliases; track alias) {\n <a\n href=\"{{ alias.link }}\"\n class=\"kbq-app-switcher-site_nested\"\n kbq-app-switcher-list-item\n [class.kbq-selected]=\"alias.id === trigger.selectedApp?.id\"\n [app]=\"alias\"\n ></a>\n }\n }\n }\n }\n </div>\n </kbq-dropdown>\n </div>\n\n @if (trigger.sitesMode) {\n <kbq-divider />\n\n <div class=\"kbq-app-switcher__sites-container\">\n <div class=\"kbq-app-switcher-group-header\">\n <div class=\"kbq-app-switcher-group-header__text\">{{ localeData.sitesHeader }}</div>\n </div>\n\n <kbq-dropdown #otherSites=\"kbqDropdown\">\n <div kbqDropdownStaticContent class=\"kbq-app-switcher-sites\">\n @for (site of trigger.sites; track site) {\n @if (site.id !== trigger.selectedSite?.id) {\n <div\n [kbq-app-switcher-dropdown-site]=\"site\"\n [kbqDropdownTriggerFor]=\"dropdownWithSelectedSite\"\n [offsetX]=\"0\"\n (mouseenter)=\"activeSite = site\"\n ></div>\n }\n }\n </div>\n </kbq-dropdown>\n </div>\n\n <kbq-dropdown #dropdownWithSelectedSite=\"kbqDropdown\" [class]=\"'kbq-app-switcher-sites'\">\n @for (app of activeSite?.apps; track app) {\n @if (app.aliases) {\n <div\n #dropdownWithGroupedAppsTrigger=\"kbqDropdownTrigger\"\n [kbq-app-switcher-dropdown-app]=\"app\"\n [kbqDropdownTriggerFor]=\"dropdownWithGroupedApps\"\n [offsetX]=\"0\"\n [class.kbq-pressed]=\"dropdownWithGroupedAppsTrigger.opened\"\n (mouseenter)=\"activeApp = app\"\n ></div>\n } @else {\n <a\n href=\"{{ app.link }}\"\n [kbq-app-switcher-dropdown-app]=\"app\"\n (click)=\"selectAppInSite(activeSite, app)\"\n ></a>\n }\n }\n </kbq-dropdown>\n\n <kbq-dropdown #dropdownWithGroupedApps=\"kbqDropdown\" [class]=\"'kbq-app-switcher-sites'\">\n @for (alias of activeApp?.aliases; track alias) {\n <a\n href=\"{{ alias.link }}\"\n [kbq-app-switcher-dropdown-app]=\"alias\"\n (click)=\"selectAppInSite(activeSite, alias)\"\n ></a>\n }\n </kbq-dropdown>\n }\n } @else {\n <div class=\"kbq-app-switcher__search-result\">\n <kbq-dropdown [class]=\"'kbq-app-switcher-sites'\">\n <div kbqDropdownStaticContent class=\"kbq-app-switcher-site\">\n @for (site of filteredSites; track site) {\n @if (site.apps) {\n <kbq-optgroup label=\"{{ site.name }}\" />\n }\n\n @for (app of site.apps; track app) {\n <a href=\"{{ app.link }}\" kbq-app-switcher-list-item [app]=\"app\"></a>\n }\n } @empty {\n <div class=\"kbq-app-switcher__empty-search-result\">{{ localeData.searchEmptyResult }}</div>\n }\n </div>\n </kbq-dropdown>\n </div>\n }\n</div>\n", styles: [".kbq-app-switcher{position:relative;display:flex;flex-direction:column;margin-top:var(--kbq-size-xxs);margin-bottom:var(--kbq-size-xxs);width:320px;border-radius:var(--kbq-size-xs);box-shadow:var(--kbq-shadow-popup);box-sizing:border-box;z-index:1}.kbq-app-switcher__search-container{padding-top:var(--kbq-size-xxs)}.kbq-app-switcher__search-result{max-width:320px;min-height:0;padding:var(--kbq-size-s) var(--kbq-size-xxs)}.kbq-app-switcher__empty-search-result{display:flex;justify-content:center;align-items:center;height:96px}.kbq-app-switcher__app-container{display:flex;flex-direction:column;min-height:0;padding:var(--kbq-size-s) var(--kbq-size-xxs)}.kbq-app-switcher-group-header{padding:var(--kbq-size-s) var(--kbq-size-m);display:flex;flex-direction:row;justify-content:space-between}.kbq-app-switcher__sites-container{padding:var(--kbq-size-xxs)}.kbq-app-switcher{background:var(--kbq-background-card)}.kbq-app-switcher .kbq-app-switcher-group-header,.kbq-app-switcher__empty-search-result{color:var(--kbq-foreground-contrast-secondary)}.kbq-app-switcher,.kbq-app-switcher__empty-search-result{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}.kbq-app-switcher-group-header__text{font-size:var(--kbq-typography-caps-compact-strong-font-size);font-style:var(--kbq-typography-caps-compact-strong-font-style);font-weight:var(--kbq-typography-caps-compact-strong-font-weight);line-height:var(--kbq-typography-caps-compact-strong-line-height);font-family:var(--kbq-typography-caps-compact-strong-font-family);text-transform:var(--kbq-typography-caps-compact-strong-text-transform);font-feature-settings:var(--kbq-typography-caps-compact-strong-font-feature-settings);letter-spacing:var(--kbq-typography-caps-compact-strong-letter-spacing)}.kbq-app-switcher-group-header__badge{font-size:var(--kbq-typography-text-compact-medium-font-size);font-style:var(--kbq-typography-text-compact-medium-font-style);font-weight:var(--kbq-typography-text-compact-medium-font-weight);line-height:var(--kbq-typography-text-compact-medium-line-height);font-family:var(--kbq-typography-text-compact-medium-font-family);text-transform:var(--kbq-typography-text-compact-medium-text-transform);font-feature-settings:var(--kbq-typography-text-compact-medium-font-feature-settings);letter-spacing:var(--kbq-typography-text-compact-medium-letter-spacing)}.kbq-app-switch-tree-option__text{font-size:var(--kbq-typography-text-normal-medium-font-size);font-style:var(--kbq-typography-text-normal-medium-font-style);font-weight:var(--kbq-typography-text-normal-medium-font-weight);line-height:var(--kbq-typography-text-normal-medium-line-height);font-family:var(--kbq-typography-text-normal-medium-font-family);text-transform:var(--kbq-typography-text-normal-medium-text-transform);font-feature-settings:var(--kbq-typography-text-normal-medium-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-medium-letter-spacing)}\n"] }]
378
+ }, animations: [kbqAppSwitcherAnimations.state], template: "@if (trigger.withSearch) {\n <div class=\"kbq-app-switcher__search-container\" (mouseenter)=\"otherSites?.close()\">\n <kbq-form-field noBorders>\n <i kbq-icon=\"kbq-magnifying-glass_16\" kbqPrefix></i>\n <input\n placeholder=\"{{ localeData.searchPlaceholder }}\"\n autocomplete=\"off\"\n kbqInput\n [formControl]=\"searchControl\"\n (keydown.escape)=\"escapeHandler()\"\n />\n <kbq-cleaner />\n </kbq-form-field>\n </div>\n\n <kbq-divider />\n}\n\n<div kbq-scrollbar>\n @if (!searchControl.getRawValue()) {\n <div class=\"kbq-app-switcher__app-container\" (mouseenter)=\"otherSites?.close()\">\n @if (trigger.sitesMode) {\n <div class=\"kbq-app-switcher-group-header\">\n <div class=\"kbq-app-switcher-group-header__text\">{{ trigger.selectedSite?.name }}</div>\n @if (trigger.selectedSite?.status) {\n <kbq-badge class=\"kbq-app-switcher-group-header__badge\" [compact]=\"true\">\n {{ trigger.selectedSite.status }}\n </kbq-badge>\n }\n </div>\n }\n\n <kbq-dropdown [class]=\"'kbq-app-switcher-sites'\">\n <div kbqDropdownStaticContent class=\"kbq-app-switcher-site\">\n @for (app of trigger.currentApps; track app) {\n @if (!app.aliases) {\n <a\n href=\"{{ app.link }}\"\n kbq-app-switcher-list-item\n [class.kbq-selected]=\"app.id === trigger.selectedApp?.id\"\n [app]=\"app\"\n [toggle]=\"!!app.aliases\"\n ></a>\n } @else {\n <div\n #appSwitcherApp=\"kbqAppSwitcherApp\"\n kbq-app-switcher-list-item\n [app]=\"app\"\n [toggle]=\"!!app.aliases\"\n ></div>\n\n @if (!appSwitcherApp.collapsed) {\n @for (alias of app.aliases; track alias) {\n <a\n href=\"{{ alias.link }}\"\n class=\"kbq-app-switcher-site_nested\"\n kbq-app-switcher-list-item\n [class.kbq-selected]=\"alias.id === trigger.selectedApp?.id\"\n [app]=\"alias\"\n ></a>\n }\n }\n }\n }\n </div>\n </kbq-dropdown>\n </div>\n\n @if (trigger.sitesMode) {\n <kbq-divider />\n\n <div class=\"kbq-app-switcher__sites-container\">\n <div class=\"kbq-app-switcher-group-header\">\n <div class=\"kbq-app-switcher-group-header__text\">{{ localeData.sitesHeader }}</div>\n </div>\n\n <kbq-dropdown #otherSites=\"kbqDropdown\">\n <div kbqDropdownStaticContent class=\"kbq-app-switcher-sites\">\n @for (site of trigger.sites; track site) {\n @if (site.id !== trigger.selectedSite?.id) {\n <div\n [kbq-app-switcher-dropdown-site]=\"site\"\n [kbqDropdownTriggerFor]=\"dropdownWithSelectedSite\"\n [offsetX]=\"0\"\n (mouseenter)=\"activeSite = site\"\n ></div>\n }\n }\n </div>\n </kbq-dropdown>\n </div>\n\n <kbq-dropdown #dropdownWithSelectedSite=\"kbqDropdown\" [class]=\"'kbq-app-switcher-sites'\">\n @for (app of activeSite?.apps; track app) {\n @if (app.aliases) {\n <div\n #dropdownWithGroupedAppsTrigger=\"kbqDropdownTrigger\"\n [kbq-app-switcher-dropdown-app]=\"app\"\n [kbqDropdownTriggerFor]=\"dropdownWithGroupedApps\"\n [offsetX]=\"0\"\n [class.kbq-pressed]=\"dropdownWithGroupedAppsTrigger.opened\"\n (mouseenter)=\"activeApp = app\"\n ></div>\n } @else {\n <a\n href=\"{{ app.link }}\"\n [kbq-app-switcher-dropdown-app]=\"app\"\n (click)=\"selectAppInSite(activeSite, app)\"\n ></a>\n }\n }\n </kbq-dropdown>\n\n <kbq-dropdown #dropdownWithGroupedApps=\"kbqDropdown\" [class]=\"'kbq-app-switcher-sites'\">\n @for (alias of activeApp?.aliases; track alias) {\n <a\n href=\"{{ alias.link }}\"\n [kbq-app-switcher-dropdown-app]=\"alias\"\n (click)=\"selectAppInSite(activeSite, alias)\"\n ></a>\n }\n </kbq-dropdown>\n }\n } @else {\n <div class=\"kbq-app-switcher__search-result\">\n <kbq-dropdown [class]=\"'kbq-app-switcher-sites'\">\n <div kbqDropdownStaticContent class=\"kbq-app-switcher-site\">\n @for (site of filteredSites; track site) {\n @if (trigger.sitesMode && site.apps) {\n <kbq-optgroup label=\"{{ site.name }}\" />\n }\n\n @for (app of site.apps; track app) {\n <a href=\"{{ app.link }}\" kbq-app-switcher-list-item [app]=\"app\"></a>\n }\n } @empty {\n <div class=\"kbq-app-switcher__empty-search-result\">{{ localeData.searchEmptyResult }}</div>\n }\n </div>\n </kbq-dropdown>\n </div>\n }\n</div>\n", styles: [".kbq-app-switcher{position:relative;display:flex;flex-direction:column;margin-top:var(--kbq-size-xxs);margin-bottom:var(--kbq-size-xxs);width:320px;border-radius:var(--kbq-size-xs);box-shadow:var(--kbq-shadow-popup);box-sizing:border-box;z-index:1}.kbq-app-switcher__search-container{padding-top:var(--kbq-size-xxs)}.kbq-app-switcher__search-result{max-width:320px;min-height:0;padding:var(--kbq-size-s) var(--kbq-size-xxs)}.kbq-app-switcher__empty-search-result{display:flex;justify-content:center;align-items:center;height:96px}.kbq-app-switcher__app-container{display:flex;flex-direction:column;min-height:0;padding:var(--kbq-size-s) var(--kbq-size-xxs)}.kbq-app-switcher-group-header{padding:var(--kbq-size-s) var(--kbq-size-m);display:flex;flex-direction:row;justify-content:space-between}.kbq-app-switcher__sites-container{padding:var(--kbq-size-xxs)}.kbq-app-switcher{background:var(--kbq-background-card)}.kbq-app-switcher .kbq-app-switcher-group-header,.kbq-app-switcher__empty-search-result{color:var(--kbq-foreground-contrast-secondary)}.kbq-app-switcher,.kbq-app-switcher__empty-search-result{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}.kbq-app-switcher-group-header__text{font-size:var(--kbq-typography-caps-compact-strong-font-size);font-style:var(--kbq-typography-caps-compact-strong-font-style);font-weight:var(--kbq-typography-caps-compact-strong-font-weight);line-height:var(--kbq-typography-caps-compact-strong-line-height);font-family:var(--kbq-typography-caps-compact-strong-font-family);text-transform:var(--kbq-typography-caps-compact-strong-text-transform);font-feature-settings:var(--kbq-typography-caps-compact-strong-font-feature-settings);letter-spacing:var(--kbq-typography-caps-compact-strong-letter-spacing)}.kbq-app-switcher-group-header__badge{font-size:var(--kbq-typography-text-compact-medium-font-size);font-style:var(--kbq-typography-text-compact-medium-font-style);font-weight:var(--kbq-typography-text-compact-medium-font-weight);line-height:var(--kbq-typography-text-compact-medium-line-height);font-family:var(--kbq-typography-text-compact-medium-font-family);text-transform:var(--kbq-typography-text-compact-medium-text-transform);font-feature-settings:var(--kbq-typography-text-compact-medium-font-feature-settings);letter-spacing:var(--kbq-typography-text-compact-medium-letter-spacing)}.kbq-app-switch-tree-option__text{font-size:var(--kbq-typography-text-normal-medium-font-size);font-style:var(--kbq-typography-text-normal-medium-font-style);font-weight:var(--kbq-typography-text-normal-medium-font-weight);line-height:var(--kbq-typography-text-normal-medium-line-height);font-family:var(--kbq-typography-text-normal-medium-font-family);text-transform:var(--kbq-typography-text-normal-medium-text-transform);font-feature-settings:var(--kbq-typography-text-normal-medium-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-medium-letter-spacing)}\n"] }]
379
379
  }], ctorParameters: () => [], propDecorators: { trigger: [{
380
380
  type: Input
381
381
  }], input: [{
@@ -436,18 +436,14 @@ class KbqAppSwitcherTrigger extends KbqPopUpTrigger {
436
436
  /** Number of applications to choose from
437
437
  * @docs-private */
438
438
  get appsCount() {
439
- if (this.sitesMode) {
440
- return this.originalSites.reduce((acc, site) => acc + site.apps.length, 0);
441
- }
442
- return this.originalApps.length;
439
+ return this.originalSites.reduce((acc, site) => acc + site.apps.length, 0);
443
440
  }
444
441
  /** Whether the sites are used or not
445
442
  * @docs-private */
446
443
  get sitesMode() {
447
- return this.originalSites?.length > 0;
444
+ return this.originalSites.length > 1;
448
445
  }
449
- /** Whether the sites are used or not
450
- * @docs-private */
446
+ /** @docs-private */
451
447
  get currentApps() {
452
448
  return this.sitesMode ? this.selectedSite.apps : this._parsedApps;
453
449
  }
@@ -457,14 +453,21 @@ class KbqAppSwitcherTrigger extends KbqPopUpTrigger {
457
453
  }
458
454
  set sites(value) {
459
455
  this.originalSites = value;
460
- this._parsedSites = [];
461
- value.forEach((site) => {
462
- const newSite = { ...site, apps: [] };
463
- newSite.apps = this.makeGroupsForApps(site.apps, KBQ_MIN_NUMBER_OF_APPS_TO_ENABLE_GROUPING);
464
- this._parsedSites.push(newSite);
465
- });
456
+ if (this.originalSites.length === 1) {
457
+ this._parsedApps = this.makeGroupsForApps(this.originalSites[0].apps, KBQ_MIN_NUMBER_OF_APPS_TO_ENABLE_GROUPING);
458
+ }
459
+ else {
460
+ this._parsedSites = [];
461
+ value.forEach((site) => {
462
+ const newSite = { ...site, apps: [] };
463
+ newSite.apps = this.makeGroupsForApps(site.apps, KBQ_MIN_NUMBER_OF_APPS_TO_ENABLE_GROUPING);
464
+ this._parsedSites.push(newSite);
465
+ });
466
+ }
466
467
  }
467
- /** Array of applications */
468
+ /**
469
+ * @deprecated Will be removed in next major release, use `sites` with one element instead.
470
+ */
468
471
  get apps() {
469
472
  return this._parsedApps;
470
473
  }