@koobiq/components 19.2.0 → 19.4.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 (128) hide show
  1. package/autocomplete/autocomplete-trigger.directive.d.ts +5 -0
  2. package/core/animation/animation.d.ts +3 -1
  3. package/core/highlight/highlight.pipe.d.ts +2 -0
  4. package/core/option/action.d.ts +5 -6
  5. package/core/utils/utils.d.ts +4 -0
  6. package/datepicker/datepicker-input.directive.d.ts +6 -1
  7. package/fesm2022/koobiq-components-accordion.mjs +34 -34
  8. package/fesm2022/koobiq-components-actions-panel.mjs +10 -10
  9. package/fesm2022/koobiq-components-alert.mjs +16 -16
  10. package/fesm2022/koobiq-components-app-switcher.mjs +19 -19
  11. package/fesm2022/koobiq-components-autocomplete.mjs +21 -14
  12. package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
  13. package/fesm2022/koobiq-components-badge.mjs +13 -13
  14. package/fesm2022/koobiq-components-breadcrumbs.mjs +25 -25
  15. package/fesm2022/koobiq-components-button-toggle.mjs +10 -10
  16. package/fesm2022/koobiq-components-button.mjs +13 -13
  17. package/fesm2022/koobiq-components-checkbox.mjs +10 -10
  18. package/fesm2022/koobiq-components-clamped-text.mjs +7 -7
  19. package/fesm2022/koobiq-components-code-block.mjs +10 -10
  20. package/fesm2022/koobiq-components-content-panel.mjs +28 -28
  21. package/fesm2022/koobiq-components-core.mjs +268 -243
  22. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  23. package/fesm2022/koobiq-components-datepicker.mjs +49 -42
  24. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  25. package/fesm2022/koobiq-components-divider.mjs +7 -7
  26. package/fesm2022/koobiq-components-dl.mjs +13 -13
  27. package/fesm2022/koobiq-components-dropdown.mjs +21 -20
  28. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  29. package/fesm2022/koobiq-components-dynamic-translation.mjs +13 -13
  30. package/fesm2022/koobiq-components-ellipsis-center.mjs +7 -7
  31. package/fesm2022/koobiq-components-empty-state.mjs +19 -19
  32. package/fesm2022/koobiq-components-file-upload.mjs +495 -60
  33. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  34. package/fesm2022/koobiq-components-filter-bar.mjs +69 -69
  35. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  36. package/fesm2022/koobiq-components-form-field.mjs +62 -62
  37. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  38. package/fesm2022/koobiq-components-icon.mjs +14 -14
  39. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  40. package/fesm2022/koobiq-components-inline-edit.mjs +19 -28
  41. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
  42. package/fesm2022/koobiq-components-input.mjs +22 -22
  43. package/fesm2022/koobiq-components-link.mjs +7 -7
  44. package/fesm2022/koobiq-components-list.mjs +30 -20
  45. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  46. package/fesm2022/koobiq-components-loader-overlay.mjs +16 -16
  47. package/fesm2022/koobiq-components-markdown.mjs +10 -10
  48. package/fesm2022/koobiq-components-modal.mjs +28 -28
  49. package/fesm2022/koobiq-components-navbar-ic.mjs +34 -34
  50. package/fesm2022/koobiq-components-navbar.mjs +43 -43
  51. package/fesm2022/koobiq-components-notification-center.mjs +16 -16
  52. package/fesm2022/koobiq-components-overflow-items.mjs +16 -16
  53. package/fesm2022/koobiq-components-popover.mjs +18 -18
  54. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  55. package/fesm2022/koobiq-components-progress-bar.mjs +13 -13
  56. package/fesm2022/koobiq-components-progress-spinner.mjs +13 -13
  57. package/fesm2022/koobiq-components-radio.mjs +10 -10
  58. package/fesm2022/koobiq-components-resizer.mjs +10 -10
  59. package/fesm2022/koobiq-components-risk-level.mjs +7 -7
  60. package/fesm2022/koobiq-components-scrollbar.mjs +10 -10
  61. package/fesm2022/koobiq-components-search-expandable.mjs +55 -28
  62. package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
  63. package/fesm2022/koobiq-components-select.mjs +16 -14
  64. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  65. package/fesm2022/koobiq-components-sidebar.mjs +13 -13
  66. package/fesm2022/koobiq-components-sidepanel.mjs +166 -61
  67. package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
  68. package/fesm2022/koobiq-components-skeleton.mjs +37 -0
  69. package/fesm2022/koobiq-components-skeleton.mjs.map +1 -0
  70. package/fesm2022/koobiq-components-split-button.mjs +7 -7
  71. package/fesm2022/koobiq-components-splitter.mjs +16 -16
  72. package/fesm2022/koobiq-components-table.mjs +10 -10
  73. package/fesm2022/koobiq-components-tabs.mjs +52 -52
  74. package/fesm2022/koobiq-components-tags.mjs +50 -35
  75. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  76. package/fesm2022/koobiq-components-textarea.mjs +7 -7
  77. package/fesm2022/koobiq-components-time-range.mjs +22 -22
  78. package/fesm2022/koobiq-components-timepicker.mjs +10 -10
  79. package/fesm2022/koobiq-components-timezone.mjs +22 -22
  80. package/fesm2022/koobiq-components-title.mjs +7 -7
  81. package/fesm2022/koobiq-components-toast.mjs +16 -16
  82. package/fesm2022/koobiq-components-toggle.mjs +7 -7
  83. package/fesm2022/koobiq-components-tooltip.mjs +24 -16
  84. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  85. package/fesm2022/koobiq-components-top-bar.mjs +13 -13
  86. package/fesm2022/koobiq-components-tree-select.mjs +11 -26
  87. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  88. package/fesm2022/koobiq-components-tree.mjs +53 -43
  89. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  90. package/fesm2022/koobiq-components-username.mjs +27 -27
  91. package/file-upload/dropzone.d.ts +147 -0
  92. package/file-upload/dropzone.scss +57 -0
  93. package/file-upload/file-upload.d.ts +3 -0
  94. package/file-upload/multiple-file-upload.component.d.ts +11 -1
  95. package/file-upload/multiple-file-upload.component.scss +1 -1
  96. package/file-upload/primitives/file-drop.d.ts +23 -4
  97. package/file-upload/public-api.d.ts +1 -0
  98. package/file-upload/single-file-upload.component.d.ts +11 -1
  99. package/form-field/_form-field-theme.scss +2 -2
  100. package/form-field/form-field-control.d.ts +2 -0
  101. package/form-field/form-field.scss +0 -1
  102. package/icon/icon-button.scss +5 -4
  103. package/inline-edit/inline-edit-tokens.scss +1 -1
  104. package/inline-edit/inline-edit.d.ts +2 -2
  105. package/inline-edit/inline-edit.scss +1 -1
  106. package/list/list-selection.component.d.ts +1 -0
  107. package/package.json +9 -4
  108. package/popover/_popover-theme.scss +1 -1
  109. package/schematics/ng-add/index.js +2 -2
  110. package/search-expandable/search-expandable.d.ts +19 -4
  111. package/select/select.component.d.ts +2 -1
  112. package/sidepanel/_sidepanel-theme.scss +10 -0
  113. package/sidepanel/sidepanel-animations.d.ts +7 -1
  114. package/sidepanel/sidepanel-container.component.d.ts +12 -2
  115. package/sidepanel/sidepanel-directives.d.ts +8 -0
  116. package/sidepanel/sidepanel-ref.d.ts +12 -0
  117. package/sidepanel/sidepanel-tokens.scss +5 -3
  118. package/sidepanel/sidepanel.scss +78 -18
  119. package/sidepanel/sidepanel.service.d.ts +2 -0
  120. package/skeleton/index.d.ts +2 -0
  121. package/skeleton/module.d.ts +7 -0
  122. package/skeleton/skeleton.d.ts +8 -0
  123. package/skeleton/skeleton.scss +41 -0
  124. package/tags/tag-list.component.d.ts +7 -1
  125. package/tags/tag.component.d.ts +2 -0
  126. package/tooltip/tooltip.component.d.ts +8 -0
  127. package/tree/tree-selection.component.d.ts +2 -1
  128. package/tree-select/tree-select.component.d.ts +2 -1
@@ -34,10 +34,11 @@ const kbqTreeSelectOptionsProvider = (options) => {
34
34
  };
35
35
  /** Change event object that is emitted when the select value has changed. */
36
36
  class KbqTreeSelectChange {
37
- constructor(source, value, isUserInput = false) {
37
+ constructor(source, value, isUserInput = false, values) {
38
38
  this.source = source;
39
39
  this.value = value;
40
40
  this.isUserInput = isUserInput;
41
+ this.values = values;
41
42
  }
42
43
  }
43
44
  class KbqTreeSelect extends KbqAbstractSelect {
@@ -127,22 +128,7 @@ class KbqTreeSelect extends KbqAbstractSelect {
127
128
  /** Function for handling the combination Ctrl + A (select all). By default, the internal handler is used. */
128
129
  _selectAllHandler(event, select) {
129
130
  event.preventDefault();
130
- const options = select.options.filter(({ disabled }) => !disabled);
131
- const hasUnselectedOptions = options.some((option) => !option.selected);
132
- const toUnselect = [];
133
- const toSelect = [];
134
- options.forEach((option) => {
135
- if (hasUnselectedOptions) {
136
- option.select(false);
137
- toSelect.push(option.data);
138
- }
139
- else {
140
- option.deselect();
141
- toUnselect.push(option.data);
142
- }
143
- });
144
- this.selectionModel.deselect(...toUnselect);
145
- this.selectionModel.select(...toSelect);
131
+ select.tree.selectAllOptions();
146
132
  }
147
133
  /** Whether the select is focused. */
148
134
  get focused() {
@@ -427,8 +413,7 @@ class KbqTreeSelect extends KbqAbstractSelect {
427
413
  }
428
414
  });
429
415
  this.tree.selectionChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {
430
- this.onChange(this.selectedValues);
431
- this.selectionChange.emit(new KbqTreeSelectChange(this, event.option));
416
+ this.selectionChange.emit(new KbqTreeSelectChange(this, event.option, false, event.options));
432
417
  if (this.search) {
433
418
  this.search.focus();
434
419
  }
@@ -894,8 +879,8 @@ class KbqTreeSelect extends KbqAbstractSelect {
894
879
  this.changeDetectorRef.markForCheck();
895
880
  });
896
881
  }
897
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: KbqTreeSelect, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i1.ErrorStateMatcher }, { token: KBQ_SELECT_SCROLL_STRATEGY }, { token: i2.Directionality, optional: true }, { token: i3.NgForm, optional: true }, { token: i3.FormGroupDirective, optional: true }, { token: i4.KbqFormField, host: true, optional: true }, { token: i3.NgControl, optional: true, self: true }, { token: KBQ_LOCALE_SERVICE, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
898
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.17", type: KbqTreeSelect, isStandalone: true, selector: "kbq-tree-select", inputs: { hiddenItemsText: "hiddenItemsText", panelClass: "panelClass", backdropClass: "backdropClass", errorStateMatcher: "errorStateMatcher", sortComparator: "sortComparator", multiline: ["multiline", "multiline", booleanAttribute], placeholder: "placeholder", required: "required", multiple: ["multiple", "multiple", booleanAttribute], autoSelect: "autoSelect", id: "id", hasBackdrop: "hasBackdrop", tabIndex: "tabIndex", disabled: ["disabled", "disabled", booleanAttribute], selectAllHandler: "selectAllHandler", panelMinWidth: ["panelMinWidth", "panelMinWidth", numberAttribute], panelWidth: "panelWidth", searchMinOptionsThreshold: "searchMinOptionsThreshold", hiddenItemsTextFormatter: "hiddenItemsTextFormatter" }, outputs: { openedChange: "openedChange", openedStream: "opened", closedStream: "closed", selectionChange: "selectionChange", valueChange: "valueChange" }, host: { listeners: { "click": "handleClick()", "keydown": "handleKeydown($event)", "focus": "onFocus()", "blur": "onBlur()" }, properties: { "class.kbq-select_multiple": "multiple", "class.kbq-select_multiline": "multiline", "class.kbq-disabled": "disabled", "class.kbq-invalid": "errorState", "attr.tabindex": "tabIndex", "attr.disabled": "disabled || null" }, classAttribute: "kbq-tree-select" }, providers: [
882
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqTreeSelect, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i1.ErrorStateMatcher }, { token: KBQ_SELECT_SCROLL_STRATEGY }, { token: i2.Directionality, optional: true }, { token: i3.NgForm, optional: true }, { token: i3.FormGroupDirective, optional: true }, { token: i4.KbqFormField, host: true, optional: true }, { token: i3.NgControl, optional: true, self: true }, { token: KBQ_LOCALE_SERVICE, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
883
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.18", type: KbqTreeSelect, isStandalone: true, selector: "kbq-tree-select", inputs: { hiddenItemsText: "hiddenItemsText", panelClass: "panelClass", backdropClass: "backdropClass", errorStateMatcher: "errorStateMatcher", sortComparator: "sortComparator", multiline: ["multiline", "multiline", booleanAttribute], placeholder: "placeholder", required: "required", multiple: ["multiple", "multiple", booleanAttribute], autoSelect: "autoSelect", id: "id", hasBackdrop: "hasBackdrop", tabIndex: "tabIndex", disabled: ["disabled", "disabled", booleanAttribute], selectAllHandler: "selectAllHandler", panelMinWidth: ["panelMinWidth", "panelMinWidth", numberAttribute], panelWidth: "panelWidth", searchMinOptionsThreshold: "searchMinOptionsThreshold", hiddenItemsTextFormatter: "hiddenItemsTextFormatter" }, outputs: { openedChange: "openedChange", openedStream: "opened", closedStream: "closed", selectionChange: "selectionChange", valueChange: "valueChange" }, host: { listeners: { "click": "handleClick()", "keydown": "handleKeydown($event)", "focus": "onFocus()", "blur": "onBlur()" }, properties: { "class.kbq-select_multiple": "multiple", "class.kbq-select_multiline": "multiline", "class.kbq-disabled": "disabled", "class.kbq-invalid": "errorState", "attr.tabindex": "tabIndex", "attr.disabled": "disabled || null" }, classAttribute: "kbq-tree-select" }, providers: [
899
884
  { provide: KbqFormFieldControl, useExisting: KbqTreeSelect },
900
885
  { provide: KbqTree, useExisting: KbqTreeSelect },
901
886
  { provide: KBQ_PARENT_POPUP, useExisting: KbqTreeSelect }
@@ -904,7 +889,7 @@ class KbqTreeSelect extends KbqAbstractSelect {
904
889
  kbqSelectAnimations.fadeInContent
905
890
  ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
906
891
  }
907
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: KbqTreeSelect, decorators: [{
892
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqTreeSelect, decorators: [{
908
893
  type: Component,
909
894
  args: [{ selector: 'kbq-tree-select', imports: [
910
895
  CdkOverlayOrigin,
@@ -1044,8 +1029,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
1044
1029
  }] } });
1045
1030
 
1046
1031
  class KbqTreeSelectModule {
1047
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: KbqTreeSelectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1048
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.17", ngImport: i0, type: KbqTreeSelectModule, imports: [OverlayModule,
1032
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqTreeSelectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1033
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.18", ngImport: i0, type: KbqTreeSelectModule, imports: [OverlayModule,
1049
1034
  KbqTreeModule,
1050
1035
  KbqIconModule,
1051
1036
  KbqTagsModule,
@@ -1065,7 +1050,7 @@ class KbqTreeSelectModule {
1065
1050
  KbqSelectTrigger,
1066
1051
  KbqSelectSearchEmptyResult,
1067
1052
  KbqFormFieldModule] }); }
1068
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: KbqTreeSelectModule, providers: [KBQ_SELECT_SCROLL_STRATEGY_PROVIDER], imports: [OverlayModule,
1053
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqTreeSelectModule, providers: [KBQ_SELECT_SCROLL_STRATEGY_PROVIDER], imports: [OverlayModule,
1069
1054
  KbqTreeModule,
1070
1055
  KbqIconModule,
1071
1056
  KbqTagsModule,
@@ -1073,7 +1058,7 @@ class KbqTreeSelectModule {
1073
1058
  A11yModule,
1074
1059
  KbqTreeSelect, KbqFormFieldModule] }); }
1075
1060
  }
1076
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: KbqTreeSelectModule, decorators: [{
1061
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: KbqTreeSelectModule, decorators: [{
1077
1062
  type: NgModule,
1078
1063
  args: [{
1079
1064
  imports: [
@@ -1 +1 @@
1
- {"version":3,"file":"koobiq-components-tree-select.mjs","sources":["../../../packages/components/tree-select/tree-select.component.ts","../../../packages/components/tree-select/tree-select.html","../../../packages/components/tree-select/tree-select.module.ts","../../../packages/components/tree-select/koobiq-components-tree-select.ts"],"sourcesContent":["import { CdkMonitorFocus } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { CdkConnectedOverlay, CdkOverlayOrigin, ConnectedPosition } from '@angular/cdk/overlay';\nimport { Platform, _getEventTarget } from '@angular/cdk/platform';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n DestroyRef,\n DoCheck,\n ElementRef,\n EventEmitter,\n Host,\n Inject,\n InjectionToken,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Provider,\n QueryList,\n Renderer2,\n Self,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewEncapsulation,\n afterNextRender,\n booleanAttribute,\n inject,\n numberAttribute\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormGroupDirective, NgControl, NgForm, UntypedFormControl } from '@angular/forms';\nimport {\n DOWN_ARROW,\n END,\n ENTER,\n ESCAPE,\n HOME,\n LEFT_ARROW,\n PAGE_DOWN,\n PAGE_UP,\n RIGHT_ARROW,\n SPACE,\n TAB,\n UP_ARROW,\n hasModifierKey,\n isSelectAll\n} from '@koobiq/cdk/keycodes';\nimport {\n CanUpdateErrorState,\n ErrorStateMatcher,\n KBQ_LOCALE_SERVICE,\n KBQ_PARENT_POPUP,\n KBQ_SELECT_SCROLL_STRATEGY,\n KBQ_WINDOW,\n KbqAbstractSelect,\n KbqComponentColors,\n KbqLocaleService,\n KbqSelectMatcher,\n KbqSelectSearch,\n KbqSelectTrigger,\n MultipleMode,\n defaultOffsetY,\n getKbqSelectDynamicMultipleError,\n getKbqSelectNonArrayValueError,\n isUndefined,\n kbqSelectAnimations\n} from '@koobiq/components/core';\nimport { KbqCleaner, KbqFormField, KbqFormFieldControl } from '@koobiq/components/form-field';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqTag, KbqTagRemove } from '@koobiq/components/tags';\nimport { KbqTree, KbqTreeOption, KbqTreeSelection } from '@koobiq/components/tree';\nimport { SizeXxs as SelectSizeMultipleContentGap } from '@koobiq/design-tokens';\nimport { Observable, Subject, Subscription, audit, defer, fromEvent, merge } from 'rxjs';\nimport { debounceTime, delay, distinctUntilChanged, filter, map, startWith, switchMap, take } from 'rxjs/operators';\n\nlet nextUniqueId = 0;\n\n/** Tree select trigger value type. */\nexport type KbqTreeSelectTriggerValue = {\n disabled: boolean;\n value: string;\n viewValue: string;\n};\n\n/** Tree select panel width type. */\nexport type KbqTreeSelectPanelWidth = 'auto' | number | null;\n\n/** Options for the `kbq-tree-select` that can be configured using the `KBQ_TREE_SELECT_OPTIONS` injection token. */\nexport type KbqTreeSelectOptions = Partial<{\n /**\n * Width of the panel. If set to `auto`, the panel will match the trigger width.\n * If set to null or an empty string, the panel will grow to match the longest option's text.\n */\n panelWidth: KbqTreeSelectPanelWidth;\n /**\n * Minimum width of the panel. If minWidth is larger than window width or property set to null, it will be ignored.\n */\n panelMinWidth: Exclude<KbqTreeSelectPanelWidth, 'auto'>;\n /**\n * Whether to enable hiding search by default if options is less than minimum.\n *\n * - `'auto'` uses `KBQ_SELECT_SEARCH_MIN_OPTIONS_THRESHOLD` as min value.\n * - number - will enables search hiding and uses value as min.\n * @see KBQ_SELECT_SEARCH_MIN_OPTIONS_THRESHOLD\n */\n searchMinOptionsThreshold: 'auto' | number;\n}>;\n\n/** Injection token that can be used to provide the default options for the `kbq-tree-select`. */\nexport const KBQ_TREE_SELECT_OPTIONS = new InjectionToken<KbqTreeSelectOptions>('KBQ_TREE_SELECT_OPTIONS');\n\n/** Utility provider for `KBQ_TREE_SELECT_OPTIONS`. */\nexport const kbqTreeSelectOptionsProvider = (options: KbqTreeSelectOptions): Provider => {\n return {\n provide: KBQ_TREE_SELECT_OPTIONS,\n useValue: options\n };\n};\n\n/** Change event object that is emitted when the select value has changed. */\nexport class KbqTreeSelectChange {\n constructor(\n public source: KbqTreeSelect,\n public value: any,\n public isUserInput = false\n ) {}\n}\n\n@Component({\n selector: 'kbq-tree-select',\n imports: [\n CdkOverlayOrigin,\n KbqIconModule,\n KbqTagRemove,\n CdkConnectedOverlay,\n CdkMonitorFocus,\n NgClass,\n KbqTag,\n NgTemplateOutlet\n ],\n templateUrl: 'tree-select.html',\n styleUrls: ['./tree-select.scss', './tree-select-tokens.scss', '../select/select-tokens.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'kbqTreeSelect',\n host: {\n class: 'kbq-tree-select',\n '[class.kbq-select_multiple]': 'multiple',\n '[class.kbq-select_multiline]': 'multiline',\n '[class.kbq-disabled]': 'disabled',\n '[class.kbq-invalid]': 'errorState',\n '[attr.tabindex]': 'tabIndex',\n '[attr.disabled]': 'disabled || null',\n '(click)': 'handleClick()',\n '(keydown)': 'handleKeydown($event)',\n '(focus)': 'onFocus()',\n '(blur)': 'onBlur()'\n },\n animations: [\n kbqSelectAnimations.transformPanel,\n kbqSelectAnimations.fadeInContent\n ],\n providers: [\n { provide: KbqFormFieldControl, useExisting: KbqTreeSelect },\n { provide: KbqTree, useExisting: KbqTreeSelect },\n { provide: KBQ_PARENT_POPUP, useExisting: KbqTreeSelect }\n ]\n})\nexport class KbqTreeSelect\n extends KbqAbstractSelect\n implements\n AfterContentInit,\n AfterViewInit,\n OnDestroy,\n OnInit,\n DoCheck,\n ControlValueAccessor,\n KbqFormFieldControl<KbqTreeOption>,\n CanUpdateErrorState\n{\n protected readonly isBrowser = inject(Platform).isBrowser;\n\n private readonly defaultOptions = inject(KBQ_TREE_SELECT_OPTIONS, { optional: true });\n\n /** Whether the component is in an error state. */\n errorState: boolean = false;\n /**\n * Emits whenever the component state changes and should cause the parent\n * form-field to update. Implemented as part of `KbqFormFieldControl`.\n * @docs-private\n */\n readonly stateChanges = new Subject<void>();\n\n /** A name for this control that can be used by `kbq-form-field`. */\n controlType = 'select';\n\n hiddenItems: number = 0;\n\n /** The last measured value for the trigger's client bounding rect. */\n triggerRect: DOMRect;\n\n /** The cached font-size of the trigger element. */\n triggerFontSize = 0;\n\n /** Deals with the selection logic. */\n selectionModel: SelectionModel<any>;\n\n /** The value of the select panel's transform-origin property. */\n transformOrigin: string = 'top';\n\n /** Emits when the panel element is finished transforming in. */\n panelDoneAnimatingStream = new Subject<string>();\n\n /** Strategy that will be used to handle scrolling while the select panel is open. */\n scrollStrategy = this.scrollStrategyFactory();\n\n /**\n * The y-offset of the overlay panel in relation to the trigger's top start corner.\n * This must be adjusted to align the selected option text over the trigger text.\n * when the panel opens. Will change based on the y-position of the selected option.\n */\n offsetY = defaultOffsetY;\n\n /**\n * This position config ensures that the top \"start\" corner of the overlay\n * is aligned with with the top \"start\" of the origin by default (overlapping\n * the trigger completely). If the panel cannot fit below the trigger, it\n * will fall back to a position above the trigger.\n */\n positions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: this.offsetY\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -this.offsetY\n }\n ];\n\n options: QueryList<KbqTreeOption>;\n\n /**\n * Trigger - is a clickable field to open select dropdown panel\n */\n @ViewChild('trigger', { static: false }) trigger: ElementRef;\n\n @ViewChild('panel', { static: false }) panel: ElementRef;\n\n @ViewChild(CdkConnectedOverlay, { static: false }) overlayDir: CdkConnectedOverlay;\n\n @ViewChildren(KbqTag) tags: QueryList<KbqTag>;\n\n @ContentChild('kbqSelectCleaner', { static: true }) cleaner: KbqCleaner;\n\n /** User-supplied override of the trigger element. */\n @ContentChild(KbqSelectTrigger, { static: false }) customTrigger: KbqSelectTrigger;\n\n @ContentChild(KbqSelectMatcher, { static: false }) customMatcher: KbqSelectMatcher;\n\n @ContentChild('kbqSelectTagContent', { static: false, read: TemplateRef }) customTagTemplateRef: TemplateRef<any>;\n\n @ContentChild(KbqTreeSelection, { static: false }) tree: KbqTreeSelection;\n\n @ContentChild(KbqSelectSearch, { static: false }) search: KbqSelectSearch;\n\n @Input() hiddenItemsText: string = '+{{ number }}';\n\n /** Event emitted when the select panel has been toggled. */\n @Output() readonly openedChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** Event emitted when the select has been opened. */\n @Output('opened') readonly openedStream: Observable<void> = this.openedChange.pipe(\n filter((o) => o),\n map(() => {})\n );\n\n /** Event emitted when the select has been closed. */\n @Output('closed') readonly closedStream: Observable<void> = this.openedChange.pipe(\n filter((o) => !o),\n map(() => {})\n );\n\n /** Event emitted when the selected value has been changed by the user. */\n @Output() readonly selectionChange = new EventEmitter<KbqTreeSelectChange>();\n\n /**\n * Event that emits whenever the raw value of the select changes. This is here primarily\n * to facilitate the two-way binding for the `value` input.\n * @docs-private\n */\n @Output() readonly valueChange: EventEmitter<any> = new EventEmitter<any>();\n\n /** Classes to be passed to the select panel. Supports the same syntax as `ngClass`. */\n @Input() panelClass: string | string[] | Set<string> | { [key: string]: any };\n\n @Input() backdropClass: string = 'cdk-overlay-transparent-backdrop';\n\n /** Object used to control when error messages are shown. */\n @Input() errorStateMatcher: ErrorStateMatcher;\n\n /**\n * Function used to sort the values in a select in multiple mode.\n * Follows the same logic as `Array.prototype.sort`.\n */\n @Input() sortComparator: (a: KbqTreeOption, b: KbqTreeOption, options: KbqTreeOption[]) => number;\n\n /**\n * Whether to use a multiline matcher or not. Default is false\n */\n @Input({ transform: booleanAttribute }) multiline: boolean = false;\n\n /** Combined stream of all of the child options' change events. */\n readonly optionSelectionChanges: Observable<KbqTreeSelectChange> = defer(() => {\n if (this.options) {\n return this.options.changes.pipe(\n startWith(this.options),\n switchMap(() => merge(...this.options.map((option) => option.onSelectionChange)))\n );\n }\n\n return this.ngZone.onStable.asObservable().pipe(\n take(1),\n switchMap(() => this.optionSelectionChanges)\n );\n }) as Observable<KbqTreeSelectChange>;\n\n /** Combined stream of all of the child options userInteraction events. */\n readonly userInteractionChanges: Observable<void> = defer(() => {\n if (this.options) {\n return this.options.changes.pipe(\n startWith(this.options),\n switchMap(() => merge(...this.options.map((option) => option.userInteraction)))\n );\n }\n\n return this.ngZone.onStable.asObservable().pipe(\n take(1),\n switchMap(() => this.userInteractionChanges)\n );\n });\n\n @Input()\n get placeholder(): string {\n return this._placeholder;\n }\n\n set placeholder(value: string) {\n this._placeholder = value;\n\n this.stateChanges.next();\n }\n\n private _placeholder: string;\n\n @Input()\n get required(): boolean {\n return this._required;\n }\n\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n\n this.stateChanges.next();\n }\n\n private _required: boolean = false;\n\n @Input({ transform: booleanAttribute })\n get multiple(): boolean {\n return this._multiple;\n }\n\n set multiple(value: boolean) {\n if (this.selectionModel) {\n throw getKbqSelectDynamicMultipleError();\n }\n\n this._multiple = coerceBooleanProperty(value);\n }\n\n private _multiple: boolean = false;\n\n @Input()\n get autoSelect(): boolean {\n if (this.multiSelection) {\n return false;\n }\n\n return this._autoSelect;\n }\n\n set autoSelect(value: boolean) {\n this._autoSelect = coerceBooleanProperty(value);\n }\n\n private _autoSelect: boolean = true;\n\n get value(): any {\n return this.tree.getSelectedValues();\n }\n\n @Input()\n get id(): string {\n return this._id;\n }\n\n set id(value: string) {\n this._id = value || this.uid;\n this.stateChanges.next();\n }\n\n private _id: string;\n\n @Input()\n get hasBackdrop(): boolean {\n return this._hasBackdrop;\n }\n\n set hasBackdrop(value: boolean) {\n this._hasBackdrop = coerceBooleanProperty(value);\n }\n\n private _hasBackdrop: boolean = false;\n\n @Input()\n get tabIndex(): number | null {\n return this.disabled ? -1 : this._tabIndex;\n }\n\n set tabIndex(value: number | null) {\n if (Number.isInteger(value) || value === null) {\n this._tabIndex = value;\n }\n }\n\n private _tabIndex: number | null = 0;\n\n @Input({ transform: booleanAttribute })\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(value: boolean) {\n if (value !== this.disabled) {\n this._disabled = value;\n\n if (this.parentFormField) {\n Promise.resolve().then(() => {\n this._disabled ? this.parentFormField.stopFocusMonitor() : this.parentFormField.runFocusMonitor();\n });\n }\n\n // Let the parent form field know to run change detection when the disabled state changes.\n this.stateChanges.next();\n }\n }\n\n private _disabled: boolean = false;\n\n /**\n * Function for handling the combination Ctrl + A (select all). By default, the internal handler is used.\n */\n @Input()\n get selectAllHandler() {\n return this._selectAllHandler;\n }\n\n set selectAllHandler(fn: (event: KeyboardEvent, select: KbqTreeSelect) => void) {\n if (typeof fn !== 'function') {\n throw Error('`selectAllHandler` must be a function.');\n }\n\n this._selectAllHandler = fn;\n }\n\n /** Function for handling the combination Ctrl + A (select all). By default, the internal handler is used. */\n private _selectAllHandler(event: KeyboardEvent, select: KbqTreeSelect): void {\n event.preventDefault();\n\n const options = select.options.filter(({ disabled }) => !disabled);\n const hasUnselectedOptions = options.some((option) => !option.selected);\n\n const toUnselect: unknown[] = [];\n const toSelect: unknown[] = [];\n\n options.forEach((option) => {\n if (hasUnselectedOptions) {\n option.select(false);\n toSelect.push(option.data);\n } else {\n option.deselect();\n toUnselect.push(option.data);\n }\n });\n\n this.selectionModel.deselect(...toUnselect);\n this.selectionModel.select(...toSelect);\n }\n\n /** Whether the select is focused. */\n get focused(): boolean {\n return this._focused || this._panelOpen;\n }\n\n set focused(value: boolean) {\n this._focused = value;\n }\n\n /** Whether multiple choice is enabled or not. True if multiple or multiline */\n get multiSelection(): boolean {\n return this.multiple || this.multiline;\n }\n\n private _focused = false;\n\n /** Width of the overlay panel. */\n protected overlayWidth: string | number;\n\n /** Min width of the overlay panel. */\n protected overlayMinWidth: string | number;\n\n /**\n * Minimum width of the panel.\n * If minWidth is larger than window width, it will be ignored.\n */\n @Input({ transform: numberAttribute }) panelMinWidth: Exclude<KbqTreeSelectPanelWidth, 'auto'> =\n this.defaultOptions?.panelMinWidth ?? 200;\n\n /** Origin for the overlay panel. */\n protected overlayOrigin?: CdkOverlayOrigin | ElementRef;\n\n /**\n * Width of the panel. If set to `auto`, the panel will match the trigger width.\n * If set to null or an empty string, the panel will grow to match the longest option's text.\n */\n @Input() panelWidth: KbqTreeSelectPanelWidth = this.defaultOptions?.panelWidth || null;\n /**\n * Controls when the search functionality is displayed based on the number of available options.\n *\n * Automatically enables search hiding if value provided, even if `defaultOptions.searchMinOptionsThreshold` is provided.\n * @default undefined\n */\n @Input() set searchMinOptionsThreshold(value: 'auto' | number | undefined) {\n this._searchMinOptionsThreshold =\n this.resolveSearchMinOptionsThreshold(value) ??\n this.resolveSearchMinOptionsThreshold(this.defaultOptions?.searchMinOptionsThreshold);\n }\n\n get searchMinOptionsThreshold(): number | undefined {\n return this._searchMinOptionsThreshold;\n }\n\n private _searchMinOptionsThreshold = this.resolveSearchMinOptionsThreshold();\n\n get panelOpen(): boolean {\n return this._panelOpen;\n }\n\n get canShowCleaner(): boolean {\n return !this.disabled && this.cleaner && this.selectionModel.hasValue();\n }\n\n /** @docs-private */\n get colorForState(): KbqComponentColors {\n const hasLegacyValidateDirective = this.elementRef.nativeElement.classList.contains(\n 'kbq-control_has-validate-directive'\n );\n\n return (hasLegacyValidateDirective && this.ngControl?.invalid) || this.errorState\n ? KbqComponentColors.Error\n : KbqComponentColors.ContrastFade;\n }\n\n isEmptySearchResult: boolean;\n\n triggerValues: KbqTreeSelectTriggerValue[] = [];\n\n private closeSubscription = Subscription.EMPTY;\n\n private _panelOpen = false;\n\n private originalOnKeyDown: (event: KeyboardEvent) => void;\n\n /** The scroll position of the overlay panel, calculated to center the selected option. */\n private scrollTop = 0;\n\n /** Unique id for this input. */\n private readonly uid = `kbq-tree-select-${nextUniqueId++}`;\n\n // Used for storing the values that were assigned before the options were initialized.\n private tempValues: string | string[] | null;\n\n private readonly destroyRef = inject(DestroyRef);\n private readonly window = inject(KBQ_WINDOW);\n\n constructor(\n public elementRef: ElementRef<HTMLElement>,\n readonly changeDetectorRef: ChangeDetectorRef,\n private readonly ngZone: NgZone,\n private readonly renderer: Renderer2,\n public defaultErrorStateMatcher: ErrorStateMatcher,\n @Inject(KBQ_SELECT_SCROLL_STRATEGY) private readonly scrollStrategyFactory,\n @Optional() private readonly dir: Directionality,\n @Optional() public parentForm: NgForm,\n @Optional() public parentFormGroup: FormGroupDirective,\n @Host() @Optional() private readonly parentFormField: KbqFormField,\n @Optional() @Self() public ngControl: NgControl,\n @Optional() @Inject(KBQ_LOCALE_SERVICE) private localeService?: KbqLocaleService\n ) {\n super();\n\n this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe(this.updateLocaleParams);\n\n if (this.ngControl) {\n // Note: we provide the value accessor through here, instead of\n // the `providers` to avoid running into a circular import.\n this.ngControl.valueAccessor = this;\n }\n\n // Force setter to be called in case id was not specified.\n this.id = this.id;\n\n afterNextRender(() => {\n if (this.multiple && !this.multiline) {\n merge(fromEvent(this.window, 'resize'), this.tags.changes)\n .pipe(delay(0), debounceTime(50), takeUntilDestroyed(this.destroyRef))\n .subscribe(this.calculateHiddenItems);\n }\n });\n }\n\n ngOnInit() {\n this.stateChanges.next();\n\n // We need `distinctUntilChanged` here, because some browsers will\n // fire the animation end event twice for the same animation. See:\n // https://github.com/angular/angular/issues/24084\n this.panelDoneAnimatingStream\n .pipe(distinctUntilChanged(), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n if (this.panelOpen) {\n this.scrollTop = 0;\n\n setTimeout(() => {\n this.highlightCorrectOption();\n\n if (this.search) {\n this.search.focus();\n }\n });\n\n this.openedChange.emit(true);\n } else {\n this.openedChange.emit(false);\n this.overlayDir.offsetX = 0;\n this.changeDetectorRef.markForCheck();\n }\n });\n }\n\n ngDoCheck() {\n if (this.ngControl) {\n this.updateErrorState();\n }\n }\n\n ngAfterContentInit() {\n if (!this.tree) return;\n\n this.tree.resetFocusedItemOnBlur = false;\n this.tree.optionShouldHoldFocusOnBlur = !!this.search;\n\n this.selectionModel = this.tree.selectionModel = new SelectionModel<any>(this.multiSelection);\n\n this.selectionModel.changed.subscribe(() => {\n this.onChange(this.selectedValues);\n\n if (this.multiSelection) {\n this.refreshTriggerValues();\n }\n });\n\n this.selectionModel.changed.pipe(delay(0)).subscribe(() => this.setOverlayPosition());\n\n // eslint-disable-next-line @angular-eslint/no-lifecycle-call\n this.tree.ngAfterContentInit();\n\n this.initKeyManager();\n\n this.options = this.tree.renderedOptions;\n this.tree.autoSelect = this.autoSelect;\n\n if (this.tree.multipleMode === null) {\n // setTimeout need for prevent an error \"NG0100: ExpressionChangedAfterItHasBeenCheckedError\"\n setTimeout(() => (this.tree.multipleMode = this.multiSelection ? MultipleMode.CHECKBOX : null));\n }\n\n if (this.multiSelection) {\n this.tree.noUnselectLast = false;\n }\n\n if (this.tempValues) {\n this.setSelectionByValue(this.tempValues);\n this.tempValues = null;\n }\n\n this.userInteractionChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n if (!this.multiSelection && this.panelOpen) {\n this.close();\n\n Promise.resolve().then(() => this.focus());\n }\n });\n\n this.tree.selectionChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n this.onChange(this.selectedValues);\n\n this.selectionChange.emit(new KbqTreeSelectChange(this, event.option));\n\n if (this.search) {\n this.search.focus();\n }\n });\n\n if (!this.multiSelection) {\n this.selectionModel.changed\n .pipe(\n filter(({ added }) => !!added.length),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(({ added }) => {\n this.tree.keyManager.setFocusOrigin('program');\n this.tree.keyManager.setActiveItem(this.options.find(({ data }) => data === added[0]) as any);\n });\n }\n\n this.subscribeOnSearchChanges();\n }\n\n ngAfterViewInit() {\n if (!this.tree) return;\n\n this.tree.treeControl.expansionModel.changed\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.setOverlayPosition());\n }\n\n ngOnDestroy() {\n this.stateChanges.complete();\n this.closeSubscription.unsubscribe();\n }\n\n updateErrorState() {\n const oldState = this.errorState;\n const parent = this.parentFormGroup || this.parentForm;\n const matcher = this.errorStateMatcher || this.defaultErrorStateMatcher;\n const control = this.ngControl ? (this.ngControl.control as UntypedFormControl) : null;\n const newState = matcher.isErrorState(control, parent);\n\n if (newState !== oldState) {\n this.errorState = newState;\n this.stateChanges.next();\n }\n }\n\n @Input()\n hiddenItemsTextFormatter(hiddenItemsText: string, hiddenItems: number): string {\n return hiddenItemsText.replace('{{ number }}', hiddenItems.toString());\n }\n\n clearValue($event): void {\n // need to prevent opening\n $event.stopPropagation();\n // need to prevent scrolling\n $event.preventDefault();\n\n this.selectionModel.clear();\n this.tree.keyManager.setActiveItem(-1);\n\n this.setSelectionByValue([]);\n\n this.onChange(this.selectedValues);\n\n this.selectionChange.emit(new KbqTreeSelectChange(this, this.selectedValues));\n\n this.focus();\n }\n\n /** `View -> model callback called when value changes` */\n onChange: (value: any) => void = () => {};\n\n /** `View -> model callback called when select has been touched` */\n onTouched = () => {};\n\n handleClick() {\n if (this.customMatcher && !this.customMatcher.useDefaultHandlers) return;\n\n this.toggle();\n }\n\n toggle(): void {\n if (this.panelOpen) {\n this.close();\n } else {\n this.open();\n }\n }\n\n open(): void {\n if (this.disabled || !this.options || !this.options.length || this._panelOpen) return;\n\n // add check for form-field bounding rectangles, since it adds extra padding around the trigger\n this.triggerRect = (\n this.parentFormField?.getConnectedOverlayOrigin().nativeElement || this.trigger.nativeElement\n ).getBoundingClientRect();\n\n // Note: The computed font-size will be a string pixel value (e.g. \"16px\").\n // `parseInt` ignores the trailing 'px' and converts this to a number.\n this.triggerFontSize = parseInt(this.window.getComputedStyle(this.trigger.nativeElement)['font-size']);\n\n // It's important that we read this as late as possible, because doing so earlier will\n // return a different element since it's based on queries in the form field which may\n // not have run yet. Also this needs to be assigned before we measure the overlay width.\n if (this.parentFormField) {\n this.overlayOrigin = this.parentFormField.getConnectedOverlayOrigin();\n }\n\n this.overlayWidth = this.getOverlayWidth(this.overlayOrigin);\n // set overlayMinWidth to the largest of `panelMinWidth` and `triggerRect.width`\n // only if `overlayWidth` falsy and `panelMinWidth` not provided.\n // This ensures panel isn't narrow.\n this.overlayMinWidth =\n this.panelMinWidth !== null && !this.overlayWidth\n ? Math.max(this.panelMinWidth, this.triggerRect.width)\n : '';\n\n this._panelOpen = true;\n\n this.changeDetectorRef.markForCheck();\n\n // Set the font size on the panel element once it exists.\n this.ngZone.onStable\n .asObservable()\n .pipe(take(1))\n .subscribe(() => {\n if (this.triggerFontSize && this.overlayDir.overlayRef && this.overlayDir.overlayRef.overlayElement) {\n this.overlayDir.overlayRef.overlayElement.style.fontSize = `${this.triggerFontSize}px`;\n }\n });\n }\n\n /** Closes the overlay panel and focuses the host element. */\n close(): void {\n if (!this._panelOpen) {\n return;\n }\n\n this._panelOpen = false;\n\n this.changeDetectorRef.markForCheck();\n this.onTouched();\n\n if (this.search) {\n this.search.reset();\n }\n }\n\n /**\n * Sets the select's value. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param value New value to be written to the model.\n */\n writeValue(value: any): void {\n if (this.tree) {\n this.setSelectionByValue(value);\n } else {\n this.tempValues = value;\n }\n }\n\n /**\n * Saves a callback function to be invoked when the select's value\n * changes from user input. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the value changes.\n */\n registerOnChange(fn: (value: any) => void) {\n this.onChange = fn;\n }\n\n /**\n * Saves a callback function to be invoked when the select is blurred\n * by the user. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the component has been touched.\n */\n // eslint-disable-next-line @typescript-eslint/ban-types\n registerOnTouched(fn: () => {}) {\n this.onTouched = fn;\n }\n\n /**\n * Disables the select. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param isDisabled Sets whether the component is disabled.\n */\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n this.changeDetectorRef.markForCheck();\n this.stateChanges.next();\n }\n\n get selected(): any {\n return this.multiSelection ? this.selectionModel?.selected : this.selectionModel?.selected[0];\n }\n\n get selectedValues(): any {\n const selectedValues = this.selectionModel.selected.map((value) => this.tree.treeControl.getValue(value));\n\n return this.multiSelection ? selectedValues : selectedValues[0];\n }\n\n get triggerValue(): string {\n if (this.empty) {\n return '';\n }\n\n return this.tree.treeControl.getViewValue(this.selected);\n }\n\n get empty(): boolean {\n return !this.selectionModel || this.selectionModel.isEmpty();\n }\n\n isRtl(): boolean {\n return this.dir ? this.dir.value === 'rtl' : false;\n }\n\n get firstSelected() {\n return this.selectionModel.selected.filter((node) => !this.tree.treeControl.isDisabled(node))[0];\n }\n\n handleKeydown(event: KeyboardEvent) {\n if (this.customMatcher && !this.customMatcher.useDefaultHandlers) return;\n\n if (!this.disabled) {\n if (this.panelOpen) {\n this.panelKeydownHandler(event);\n } else {\n this.triggerKeydownHandler(event);\n }\n }\n }\n\n onFocus() {\n if (this.customMatcher && !this.customMatcher.useDefaultHandlers) return;\n\n if (!this.disabled) {\n this._focused = true;\n\n this.stateChanges.next();\n }\n }\n\n /**\n * Calls the touched callback only if the panel is closed. Otherwise, the trigger will\n * \"blur\" to the panel when it opens, causing a false positive.\n */\n onBlur() {\n if (this.customMatcher && !this.customMatcher.useDefaultHandlers) return;\n\n this._focused = false;\n\n if (!this.disabled && !this.panelOpen) {\n this.onTouched();\n this.changeDetectorRef.markForCheck();\n this.stateChanges.next();\n\n if (this.ngControl?.control) {\n const control = this.ngControl.control;\n\n control.updateValueAndValidity({ emitEvent: false });\n (control.statusChanges as EventEmitter<string>).emit(control.status);\n }\n }\n }\n\n /** Callback that is invoked when the overlay panel has been attached. */\n onAttached() {\n this.overlayDir.positionChange.pipe(take(1)).subscribe(() => {\n this.changeDetectorRef.detectChanges();\n this.setOverlayPosition();\n this.panel.nativeElement.scrollTop = this.scrollTop;\n\n this.tree.updateScrollSize();\n });\n\n this.closeSubscription = this.closingActions().subscribe(() => this.close());\n }\n\n /** Returns the theme to be used on the panel. */\n getPanelTheme(): string {\n return this.parentFormField ? `kbq-${this.parentFormField.color}` : '';\n }\n\n focus() {\n this.elementRef.nativeElement.focus();\n }\n\n /**\n * Implemented as part of KbqFormFieldControl.\n * @docs-private\n */\n onContainerClick() {\n this.focus();\n }\n\n /** Invoked when an option is clicked. */\n onRemoveSelectedOption(selectedOption: any, $event) {\n $event.stopPropagation();\n\n this.selectionModel.deselect(\n this.selected.find((value) => this.tree.treeControl.getValue(value) === selectedOption.value)\n );\n\n this.selectionChange.emit(\n new KbqTreeSelectChange(\n this,\n this.options.find((option) => option.value === selectedOption.value) || selectedOption.value\n )\n );\n\n this.onChange(this.selectedValues);\n }\n\n calculateHiddenItems = () => {\n if (\n !this.isBrowser ||\n this.customTrigger ||\n this.customMatcher ||\n this.empty ||\n !this.multiple ||\n this.multiline\n )\n return;\n\n const totalItemsWidth = this.getTotalItemsWidthInMatcher();\n const [totalVisibleItemsWidth, visibleItems] = this.getTotalVisibleItems();\n\n this.hiddenItems = this.selectionModel.selected.length - visibleItems;\n this.changeDetectorRef.detectChanges();\n\n if (this.hiddenItems) {\n const itemsCounter = this.trigger.nativeElement.querySelector('.kbq-select__match-hidden-text');\n const matcherList = this.trigger.nativeElement.querySelector('.kbq-select__match-list');\n\n const itemsCounterShowed = itemsCounter.offsetTop < itemsCounter.offsetHeight;\n const itemsCounterWidth: number = Math.floor(itemsCounter.getBoundingClientRect().width);\n\n const matcherListWidth: number = Math.floor(matcherList.getBoundingClientRect().width);\n const matcherWidth: number = matcherListWidth + (itemsCounterShowed ? itemsCounterWidth : 0);\n\n if (itemsCounterShowed && totalItemsWidth < matcherWidth) {\n this.hiddenItems = 0;\n this.changeDetectorRef.detectChanges();\n }\n\n if (\n totalVisibleItemsWidth === matcherListWidth ||\n totalVisibleItemsWidth + itemsCounterWidth < matcherListWidth\n ) {\n this.changeDetectorRef.markForCheck();\n\n return;\n }\n }\n\n this.changeDetectorRef.markForCheck();\n };\n\n triggerKeydownHandler(event: KeyboardEvent) {\n const keyCode = event.keyCode;\n const isArrowKey =\n keyCode === DOWN_ARROW || keyCode === UP_ARROW || keyCode === LEFT_ARROW || keyCode === RIGHT_ARROW;\n const isOpenKey = keyCode === ENTER || keyCode === SPACE;\n\n // Open the select on ALT + arrow key to match the native <select>\n if (isOpenKey || ((this.multiSelection || event.altKey) && isArrowKey)) {\n // prevents the page from scrolling down when pressing space\n event.preventDefault();\n\n this.open();\n } else if (!this.multiSelection && this.tree.keyManager && this.tree.keyManager.onKeydown) {\n this.tree.keyManager.onKeydown(event);\n }\n }\n\n panelKeydownHandler(event: KeyboardEvent) {\n const keyCode = event.keyCode;\n const isArrowKey = keyCode === DOWN_ARROW || keyCode === UP_ARROW;\n\n if ((isArrowKey && event.altKey) || keyCode === ESCAPE || keyCode === TAB) {\n // Close the select on ALT + arrow key to match the native <select>\n event.preventDefault();\n this.close();\n this.focus();\n } else if (keyCode === LEFT_ARROW || keyCode === RIGHT_ARROW) {\n return this.originalOnKeyDown.call(this.tree, event);\n } else if (keyCode === HOME) {\n event.preventDefault();\n\n this.tree.keyManager.setFirstItemActive();\n } else if (keyCode === END) {\n event.preventDefault();\n\n this.tree.keyManager.setLastItemActive();\n } else if (keyCode === PAGE_UP) {\n event.preventDefault();\n\n this.tree.keyManager.setPreviousPageItemActive();\n } else if (keyCode === PAGE_DOWN) {\n event.preventDefault();\n\n this.tree.keyManager.setNextPageItemActive();\n } else if ((keyCode === ENTER || keyCode === SPACE) && this.tree.keyManager.activeItem) {\n event.preventDefault();\n\n if (!this.autoSelect) {\n this.originalOnKeyDown.call(this.tree, event);\n } else {\n this.close();\n this.focus();\n }\n } else if (this.multiSelection && isSelectAll(event)) {\n this.selectAllHandler(event, this);\n } else {\n const previouslyFocusedIndex = this.tree.keyManager.activeItemIndex;\n\n this.tree.keyManager.setFocusOrigin('keyboard');\n this.tree.keyManager.onKeydown(event);\n\n if (\n this.multiSelection &&\n isArrowKey &&\n event.shiftKey &&\n this.tree.keyManager.activeItem &&\n this.tree.keyManager.activeItemIndex !== previouslyFocusedIndex\n ) {\n this.tree.keyManager.activeItem.selectViaInteraction(event);\n }\n\n if (this.autoSelect && this.tree.keyManager.activeItem) {\n this.tree.setSelectedOptionsByKey(\n this.tree.keyManager.activeItem,\n hasModifierKey(event, 'shiftKey'),\n // ctrlKey is for Windows, metaKey is for MacOS\n hasModifierKey(event, 'ctrlKey', 'metaKey')\n );\n }\n\n if (this.search) {\n this.search.focus();\n }\n }\n }\n\n /** @docs-private */\n protected shouldShowSearch(): boolean {\n return isUndefined(this.searchMinOptionsThreshold) || this.options.length >= this.searchMinOptionsThreshold;\n }\n\n private updateLocaleParams = () => {\n this.hiddenItemsText = this.localeService?.getParams('select').hiddenItemsText;\n\n this.changeDetectorRef.markForCheck();\n };\n\n private closingActions() {\n const backdrop = this.overlayDir.overlayRef!.backdropClick();\n const outsidePointerEvents = this.overlayDir\n .overlayRef!.outsidePointerEvents()\n .pipe(filter((event) => !this.elementRef.nativeElement.contains(_getEventTarget(event))));\n const detachments = this.overlayDir.overlayRef!.detachments();\n\n return merge(backdrop, outsidePointerEvents, detachments);\n }\n\n private getTotalItemsWidthInMatcher(): number {\n const triggerClone = this.buildTriggerClone();\n\n triggerClone.querySelector('.kbq-select__match-hidden-text')?.remove();\n this.renderer.appendChild(this.trigger.nativeElement, triggerClone);\n\n let totalItemsWidth: number = 0;\n const selectedItemsViewValueContainers = triggerClone.querySelectorAll<HTMLElement>('kbq-tag');\n\n selectedItemsViewValueContainers.forEach((item) => (totalItemsWidth += this.getItemWidth(item)));\n\n triggerClone.remove();\n\n return totalItemsWidth;\n }\n\n private getTotalVisibleItems(): [number, number] {\n const triggerClone = this.buildTriggerClone();\n\n this.renderer.setStyle(triggerClone.querySelector('.kbq-select__match-hidden-text'), 'display', 'block');\n this.renderer.appendChild(this.trigger.nativeElement, triggerClone);\n\n let visibleItemsCount: number = 0;\n let totalVisibleItemsWidth: number = 0;\n\n (triggerClone.querySelectorAll('kbq-tag') as NodeListOf<HTMLElement>).forEach((item) => {\n if (item.offsetTop < item.offsetHeight) {\n totalVisibleItemsWidth += this.getItemWidth(item);\n visibleItemsCount++;\n }\n });\n\n triggerClone.remove();\n\n return [totalVisibleItemsWidth, visibleItemsCount];\n }\n\n /** Gets how wide the overlay panel should be. */\n private getOverlayWidth(origin?: ElementRef | CdkOverlayOrigin): string | number {\n if (this.panelWidth === 'auto') {\n const elementRef = origin instanceof CdkOverlayOrigin ? origin.elementRef : origin || this.elementRef;\n\n return elementRef.nativeElement.getBoundingClientRect().width;\n }\n\n return this.panelWidth ?? '';\n }\n\n private buildTriggerClone(): HTMLDivElement {\n const triggerClone = this.trigger.nativeElement.cloneNode(true);\n\n this.renderer.setStyle(triggerClone, 'position', 'absolute');\n this.renderer.setStyle(triggerClone, 'visibility', 'hidden');\n this.renderer.setStyle(triggerClone, 'top', '-100%');\n this.renderer.setStyle(triggerClone, 'left', '0');\n\n return triggerClone;\n }\n\n private getItemWidth(element: HTMLElement): number {\n const computedStyle = this.window.getComputedStyle(element);\n\n const width: number = parseInt(computedStyle.width as string);\n const marginLeft: number = parseInt(computedStyle.marginLeft as string);\n const marginRight: number = parseInt(computedStyle.marginRight as string);\n\n return width + marginLeft + marginRight + parseInt(SelectSizeMultipleContentGap);\n }\n\n private refreshTriggerValues(): void {\n this.triggerValues = this.selectionModel.selected.map((node) => ({\n value: this.tree.treeControl.getValue(node),\n viewValue: this.tree.treeControl.getViewValue(node),\n disabled: this.tree.treeControl.isDisabled(node)\n }));\n\n this.changeDetectorRef.detectChanges();\n }\n\n /**\n * Sets the selected option based on a value. If no option can be\n * found with the designated value, the select trigger is cleared.\n */\n private setSelectionByValue(value: any | any[]) {\n if (this.multiSelection && value) {\n if (!Array.isArray(value)) {\n throw getKbqSelectNonArrayValueError();\n }\n\n this.tree.setOptionsFromValues(value);\n\n this.sortValues();\n } else {\n this.tree.setOptionsFromValues([value]);\n }\n\n this.changeDetectorRef.detectChanges();\n }\n\n private initKeyManager() {\n this.originalOnKeyDown = this.tree.onKeyDown;\n\n this.tree.onKeyDown = () => {};\n\n this.tree.keyManager.change.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n if (this._panelOpen && this.panel) {\n this.scrollActiveOptionIntoView();\n } else if (!this._panelOpen && !this.multiSelection && this.tree.keyManager.activeItem) {\n this.tree.keyManager.activeItem.selectViaInteraction();\n }\n });\n }\n\n /** Sorts the selected values in the selected based on their order in the panel. */\n private sortValues() {\n if (this.multiSelection) {\n const options = this.options.toArray();\n\n this.selectionModel.sort((a, b) => {\n return this.sortComparator\n ? this.sortComparator(a, b, options)\n : options.indexOf(a) - options.indexOf(b);\n });\n\n this.stateChanges.next();\n }\n }\n\n /**\n * Highlights the selected item. If no option is selected, it will highlight\n * the first item instead.\n */\n private highlightCorrectOption() {\n if (!this.tree.keyManager) {\n return;\n }\n\n const selectedOption = this.options.find((option) => (option.data as any) === this.firstSelected);\n\n this.tree.keyManager.setFocusOrigin('keyboard');\n\n if (selectedOption) {\n this.tree.keyManager.setActiveItem(selectedOption);\n } else {\n this.tree.keyManager.setFirstItemActive();\n\n if (this.tree.keyManager.activeItem?.disabled) {\n this.tree.keyManager.setActiveItem(-1);\n }\n }\n }\n\n /** Scrolls the active option into view. */\n private scrollActiveOptionIntoView() {\n this.tree.keyManager.activeItem?.focus();\n }\n\n private subscribeOnSearchChanges() {\n if (!this.search?.ngControl.valueChanges) return;\n\n this.search.ngControl.valueChanges.pipe(audit(() => this.tree.unorderedOptions.changes)).subscribe((value) => {\n this.isEmptySearchResult = !!value && this.tree.isEmpty;\n this.changeDetectorRef.markForCheck();\n });\n }\n}\n","<div\n #fallbackOverlayOrigin=\"cdkOverlayOrigin\"\n #trigger\n cdkOverlayOrigin\n class=\"kbq-select__trigger\"\n [class.kbq-select__trigger_empty]=\"empty\"\n [class.kbq-select__trigger_multiline]=\"multiline\"\n [class.kbq-select__trigger_multiple]=\"multiple\"\n [class.kbq-select__trigger_single]=\"!multiple\"\n>\n @if (!!customMatcher) {\n <ng-content select=\"kbq-select-matcher, [kbq-select-matcher]\" />\n } @else {\n <div class=\"kbq-select__matcher\">\n @if (empty) {\n <span class=\"kbq-select__placeholder\">\n {{ placeholder || '\\u00A0' }}\n </span>\n } @else {\n @if (!!customTrigger) {\n <ng-content select=\"kbq-select-trigger, [kbq-select-trigger]\" />\n } @else {\n <div class=\"kbq-select__match-container\">\n @if (multiSelection) {\n <div\n [class.kbq-select__match-list]=\"!multiline\"\n [class.kbq-select__multiline-match-list]=\"multiline\"\n >\n @if (!customTagTemplateRef) {\n @for (option of triggerValues; track option) {\n <kbq-tag\n [color]=\"colorForState\"\n [disabled]=\"option.disabled || disabled\"\n [selectable]=\"false\"\n >\n {{ option.viewValue }}\n @if (!option.disabled && !disabled) {\n <i\n kbq-icon=\"kbq-xmark-s_16\"\n kbqTagRemove\n (click)=\"onRemoveSelectedOption(option, $event)\"\n ></i>\n }\n </kbq-tag>\n }\n }\n @if (customTagTemplateRef) {\n @for (option of triggerValues; track option) {\n <ng-container\n [ngTemplateOutlet]=\"customTagTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: option, select: this }\"\n />\n }\n }\n </div>\n } @else {\n <span class=\"kbq-select__matcher-text\">\n {{ triggerValue }}\n </span>\n }\n @if (!multiline) {\n <div\n class=\"kbq-select__match-hidden-text\"\n [style.display]=\"hiddenItems > 0 ? 'block' : 'none'\"\n >\n {{ hiddenItemsTextFormatter(hiddenItemsText, hiddenItems) }}\n </div>\n }\n </div>\n }\n }\n\n @if (canShowCleaner) {\n <div\n class=\"kbq-select__cleaner\"\n (click)=\"clearValue($event)\"\n (keydown.enter)=\"clearValue($event)\"\n (keydown.space)=\"clearValue($event)\"\n >\n <ng-content select=\"kbq-cleaner\" />\n </div>\n }\n\n <div class=\"kbq-select__arrow-wrapper\">\n <i kbq-icon=\"kbq-chevron-down-s_16\" class=\"kbq-select__arrow\" [color]=\"colorForState\"></i>\n </div>\n </div>\n }\n</div>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayLockPosition\n [cdkConnectedOverlayBackdropClass]=\"backdropClass\"\n [cdkConnectedOverlayHasBackdrop]=\"hasBackdrop\"\n [cdkConnectedOverlayMinWidth]=\"overlayMinWidth\"\n [cdkConnectedOverlayOffsetY]=\"offsetY\"\n [cdkConnectedOverlayOpen]=\"panelOpen\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin || fallbackOverlayOrigin\"\n [cdkConnectedOverlayPanelClass]=\"overlayPanelClass\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayWidth]=\"overlayWidth\"\n (attach)=\"onAttached()\"\n (backdropClick)=\"close()\"\n>\n <div\n #panel\n class=\"kbq-tree-select__panel {{ getPanelTheme() }}\"\n cdkMonitorSubtreeFocus\n [ngClass]=\"panelClass\"\n [style.font-size.px]=\"triggerFontSize\"\n [style.transformOrigin]=\"transformOrigin\"\n (keydown)=\"panelKeydownHandler($event)\"\n >\n @if (search && shouldShowSearch()) {\n <div class=\"kbq-select__search-container\">\n <ng-content select=\"[kbqSelectSearch]\" />\n </div>\n }\n\n <div\n #optionsContainer\n class=\"kbq-tree-select__content kbq-scrollbar\"\n [@fadeInContent]=\"'showing'\"\n (@fadeInContent.done)=\"panelDoneAnimatingStream.next($event.toState)\"\n >\n @if (isEmptySearchResult) {\n <div class=\"kbq-select__no-options-message\">\n <ng-content select=\"[kbq-select-search-empty-result]\" />\n </div>\n }\n\n <ng-content select=\"kbq-tree-selection\" />\n </div>\n\n <ng-content select=\"kbq-select-footer,[kbq-tree-select-footer]\" />\n </div>\n</ng-template>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport {\n KBQ_SELECT_SCROLL_STRATEGY_PROVIDER,\n KbqPseudoCheckboxModule,\n KbqSelectFooter,\n KbqSelectMatcher,\n KbqSelectSearch,\n KbqSelectSearchEmptyResult,\n KbqSelectTrigger\n} from '@koobiq/components/core';\nimport { KbqFormFieldModule } from '@koobiq/components/form-field';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqTagsModule } from '@koobiq/components/tags';\nimport { KbqTreeModule } from '@koobiq/components/tree';\nimport { KbqTreeSelect } from './tree-select.component';\n\n@NgModule({\n imports: [\n OverlayModule,\n KbqTreeModule,\n KbqIconModule,\n KbqTagsModule,\n KbqPseudoCheckboxModule,\n KbqSelectSearch,\n KbqSelectFooter,\n KbqSelectMatcher,\n KbqSelectTrigger,\n KbqSelectSearchEmptyResult,\n NgClass,\n NgTemplateOutlet,\n A11yModule,\n KbqTreeSelect\n ],\n exports: [\n KbqTreeSelect,\n KbqSelectSearch,\n KbqSelectFooter,\n KbqSelectMatcher,\n KbqSelectTrigger,\n KbqSelectSearchEmptyResult,\n KbqFormFieldModule\n ],\n providers: [KBQ_SELECT_SCROLL_STRATEGY_PROVIDER]\n})\nexport class KbqTreeSelectModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["SelectSizeMultipleContentGap"],"mappings":"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"}
1
+ {"version":3,"file":"koobiq-components-tree-select.mjs","sources":["../../../packages/components/tree-select/tree-select.component.ts","../../../packages/components/tree-select/tree-select.html","../../../packages/components/tree-select/tree-select.module.ts","../../../packages/components/tree-select/koobiq-components-tree-select.ts"],"sourcesContent":["import { CdkMonitorFocus } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { CdkConnectedOverlay, CdkOverlayOrigin, ConnectedPosition } from '@angular/cdk/overlay';\nimport { Platform, _getEventTarget } from '@angular/cdk/platform';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n DestroyRef,\n DoCheck,\n ElementRef,\n EventEmitter,\n Host,\n Inject,\n InjectionToken,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Provider,\n QueryList,\n Renderer2,\n Self,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewEncapsulation,\n afterNextRender,\n booleanAttribute,\n inject,\n numberAttribute\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormGroupDirective, NgControl, NgForm, UntypedFormControl } from '@angular/forms';\nimport {\n DOWN_ARROW,\n END,\n ENTER,\n ESCAPE,\n HOME,\n LEFT_ARROW,\n PAGE_DOWN,\n PAGE_UP,\n RIGHT_ARROW,\n SPACE,\n TAB,\n UP_ARROW,\n hasModifierKey,\n isSelectAll\n} from '@koobiq/cdk/keycodes';\nimport {\n CanUpdateErrorState,\n ErrorStateMatcher,\n KBQ_LOCALE_SERVICE,\n KBQ_PARENT_POPUP,\n KBQ_SELECT_SCROLL_STRATEGY,\n KBQ_WINDOW,\n KbqAbstractSelect,\n KbqComponentColors,\n KbqLocaleService,\n KbqSelectMatcher,\n KbqSelectSearch,\n KbqSelectTrigger,\n MultipleMode,\n defaultOffsetY,\n getKbqSelectDynamicMultipleError,\n getKbqSelectNonArrayValueError,\n isUndefined,\n kbqSelectAnimations\n} from '@koobiq/components/core';\nimport { KbqCleaner, KbqFormField, KbqFormFieldControl } from '@koobiq/components/form-field';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqTag, KbqTagRemove } from '@koobiq/components/tags';\nimport { KbqTree, KbqTreeOption, KbqTreeSelection } from '@koobiq/components/tree';\nimport { SizeXxs as SelectSizeMultipleContentGap } from '@koobiq/design-tokens';\nimport { Observable, Subject, Subscription, audit, defer, fromEvent, merge } from 'rxjs';\nimport { debounceTime, delay, distinctUntilChanged, filter, map, startWith, switchMap, take } from 'rxjs/operators';\n\nlet nextUniqueId = 0;\n\n/** Tree select trigger value type. */\nexport type KbqTreeSelectTriggerValue = {\n disabled: boolean;\n value: string;\n viewValue: string;\n};\n\n/** Tree select panel width type. */\nexport type KbqTreeSelectPanelWidth = 'auto' | number | null;\n\n/** Options for the `kbq-tree-select` that can be configured using the `KBQ_TREE_SELECT_OPTIONS` injection token. */\nexport type KbqTreeSelectOptions = Partial<{\n /**\n * Width of the panel. If set to `auto`, the panel will match the trigger width.\n * If set to null or an empty string, the panel will grow to match the longest option's text.\n */\n panelWidth: KbqTreeSelectPanelWidth;\n /**\n * Minimum width of the panel. If minWidth is larger than window width or property set to null, it will be ignored.\n */\n panelMinWidth: Exclude<KbqTreeSelectPanelWidth, 'auto'>;\n /**\n * Whether to enable hiding search by default if options is less than minimum.\n *\n * - `'auto'` uses `KBQ_SELECT_SEARCH_MIN_OPTIONS_THRESHOLD` as min value.\n * - number - will enables search hiding and uses value as min.\n * @see KBQ_SELECT_SEARCH_MIN_OPTIONS_THRESHOLD\n */\n searchMinOptionsThreshold: 'auto' | number;\n}>;\n\n/** Injection token that can be used to provide the default options for the `kbq-tree-select`. */\nexport const KBQ_TREE_SELECT_OPTIONS = new InjectionToken<KbqTreeSelectOptions>('KBQ_TREE_SELECT_OPTIONS');\n\n/** Utility provider for `KBQ_TREE_SELECT_OPTIONS`. */\nexport const kbqTreeSelectOptionsProvider = (options: KbqTreeSelectOptions): Provider => {\n return {\n provide: KBQ_TREE_SELECT_OPTIONS,\n useValue: options\n };\n};\n\n/** Change event object that is emitted when the select value has changed. */\nexport class KbqTreeSelectChange {\n constructor(\n public source: KbqTreeSelect,\n public value: any,\n public isUserInput = false,\n public values?: unknown[]\n ) {}\n}\n\n@Component({\n selector: 'kbq-tree-select',\n imports: [\n CdkOverlayOrigin,\n KbqIconModule,\n KbqTagRemove,\n CdkConnectedOverlay,\n CdkMonitorFocus,\n NgClass,\n KbqTag,\n NgTemplateOutlet\n ],\n templateUrl: 'tree-select.html',\n styleUrls: ['./tree-select.scss', './tree-select-tokens.scss', '../select/select-tokens.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'kbqTreeSelect',\n host: {\n class: 'kbq-tree-select',\n '[class.kbq-select_multiple]': 'multiple',\n '[class.kbq-select_multiline]': 'multiline',\n '[class.kbq-disabled]': 'disabled',\n '[class.kbq-invalid]': 'errorState',\n '[attr.tabindex]': 'tabIndex',\n '[attr.disabled]': 'disabled || null',\n '(click)': 'handleClick()',\n '(keydown)': 'handleKeydown($event)',\n '(focus)': 'onFocus()',\n '(blur)': 'onBlur()'\n },\n animations: [\n kbqSelectAnimations.transformPanel,\n kbqSelectAnimations.fadeInContent\n ],\n providers: [\n { provide: KbqFormFieldControl, useExisting: KbqTreeSelect },\n { provide: KbqTree, useExisting: KbqTreeSelect },\n { provide: KBQ_PARENT_POPUP, useExisting: KbqTreeSelect }\n ]\n})\nexport class KbqTreeSelect\n extends KbqAbstractSelect\n implements\n AfterContentInit,\n AfterViewInit,\n OnDestroy,\n OnInit,\n DoCheck,\n ControlValueAccessor,\n KbqFormFieldControl<KbqTreeOption>,\n CanUpdateErrorState\n{\n protected readonly isBrowser = inject(Platform).isBrowser;\n\n private readonly defaultOptions = inject(KBQ_TREE_SELECT_OPTIONS, { optional: true });\n\n /** Whether the component is in an error state. */\n errorState: boolean = false;\n /**\n * Emits whenever the component state changes and should cause the parent\n * form-field to update. Implemented as part of `KbqFormFieldControl`.\n * @docs-private\n */\n readonly stateChanges = new Subject<void>();\n\n /** A name for this control that can be used by `kbq-form-field`. */\n controlType = 'select';\n\n hiddenItems: number = 0;\n\n /** The last measured value for the trigger's client bounding rect. */\n triggerRect: DOMRect;\n\n /** The cached font-size of the trigger element. */\n triggerFontSize = 0;\n\n /** Deals with the selection logic. */\n selectionModel: SelectionModel<any>;\n\n /** The value of the select panel's transform-origin property. */\n transformOrigin: string = 'top';\n\n /** Emits when the panel element is finished transforming in. */\n panelDoneAnimatingStream = new Subject<string>();\n\n /** Strategy that will be used to handle scrolling while the select panel is open. */\n scrollStrategy = this.scrollStrategyFactory();\n\n /**\n * The y-offset of the overlay panel in relation to the trigger's top start corner.\n * This must be adjusted to align the selected option text over the trigger text.\n * when the panel opens. Will change based on the y-position of the selected option.\n */\n offsetY = defaultOffsetY;\n\n /**\n * This position config ensures that the top \"start\" corner of the overlay\n * is aligned with with the top \"start\" of the origin by default (overlapping\n * the trigger completely). If the panel cannot fit below the trigger, it\n * will fall back to a position above the trigger.\n */\n positions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: this.offsetY\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -this.offsetY\n }\n ];\n\n options: QueryList<KbqTreeOption>;\n\n /**\n * Trigger - is a clickable field to open select dropdown panel\n */\n @ViewChild('trigger', { static: false }) trigger: ElementRef;\n\n @ViewChild('panel', { static: false }) panel: ElementRef;\n\n @ViewChild(CdkConnectedOverlay, { static: false }) overlayDir: CdkConnectedOverlay;\n\n @ViewChildren(KbqTag) tags: QueryList<KbqTag>;\n\n @ContentChild('kbqSelectCleaner', { static: true }) cleaner: KbqCleaner;\n\n /** User-supplied override of the trigger element. */\n @ContentChild(KbqSelectTrigger, { static: false }) customTrigger: KbqSelectTrigger;\n\n @ContentChild(KbqSelectMatcher, { static: false }) customMatcher: KbqSelectMatcher;\n\n @ContentChild('kbqSelectTagContent', { static: false, read: TemplateRef }) customTagTemplateRef: TemplateRef<any>;\n\n @ContentChild(KbqTreeSelection, { static: false }) tree: KbqTreeSelection;\n\n @ContentChild(KbqSelectSearch, { static: false }) search: KbqSelectSearch;\n\n @Input() hiddenItemsText: string = '+{{ number }}';\n\n /** Event emitted when the select panel has been toggled. */\n @Output() readonly openedChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** Event emitted when the select has been opened. */\n @Output('opened') readonly openedStream: Observable<void> = this.openedChange.pipe(\n filter((o) => o),\n map(() => {})\n );\n\n /** Event emitted when the select has been closed. */\n @Output('closed') readonly closedStream: Observable<void> = this.openedChange.pipe(\n filter((o) => !o),\n map(() => {})\n );\n\n /** Event emitted when the selected value has been changed by the user. */\n @Output() readonly selectionChange = new EventEmitter<KbqTreeSelectChange>();\n\n /**\n * Event that emits whenever the raw value of the select changes. This is here primarily\n * to facilitate the two-way binding for the `value` input.\n * @docs-private\n */\n @Output() readonly valueChange: EventEmitter<any> = new EventEmitter<any>();\n\n /** Classes to be passed to the select panel. Supports the same syntax as `ngClass`. */\n @Input() panelClass: string | string[] | Set<string> | { [key: string]: any };\n\n @Input() backdropClass: string = 'cdk-overlay-transparent-backdrop';\n\n /** Object used to control when error messages are shown. */\n @Input() errorStateMatcher: ErrorStateMatcher;\n\n /**\n * Function used to sort the values in a select in multiple mode.\n * Follows the same logic as `Array.prototype.sort`.\n */\n @Input() sortComparator: (a: KbqTreeOption, b: KbqTreeOption, options: KbqTreeOption[]) => number;\n\n /**\n * Whether to use a multiline matcher or not. Default is false\n */\n @Input({ transform: booleanAttribute }) multiline: boolean = false;\n\n /** Combined stream of all of the child options' change events. */\n readonly optionSelectionChanges: Observable<KbqTreeSelectChange> = defer(() => {\n if (this.options) {\n return this.options.changes.pipe(\n startWith(this.options),\n switchMap(() => merge(...this.options.map((option) => option.onSelectionChange)))\n );\n }\n\n return this.ngZone.onStable.asObservable().pipe(\n take(1),\n switchMap(() => this.optionSelectionChanges)\n );\n }) as Observable<KbqTreeSelectChange>;\n\n /** Combined stream of all of the child options userInteraction events. */\n readonly userInteractionChanges: Observable<void> = defer(() => {\n if (this.options) {\n return this.options.changes.pipe(\n startWith(this.options),\n switchMap(() => merge(...this.options.map((option) => option.userInteraction)))\n );\n }\n\n return this.ngZone.onStable.asObservable().pipe(\n take(1),\n switchMap(() => this.userInteractionChanges)\n );\n });\n\n @Input()\n get placeholder(): string {\n return this._placeholder;\n }\n\n set placeholder(value: string) {\n this._placeholder = value;\n\n this.stateChanges.next();\n }\n\n private _placeholder: string;\n\n @Input()\n get required(): boolean {\n return this._required;\n }\n\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n\n this.stateChanges.next();\n }\n\n private _required: boolean = false;\n\n @Input({ transform: booleanAttribute })\n get multiple(): boolean {\n return this._multiple;\n }\n\n set multiple(value: boolean) {\n if (this.selectionModel) {\n throw getKbqSelectDynamicMultipleError();\n }\n\n this._multiple = coerceBooleanProperty(value);\n }\n\n private _multiple: boolean = false;\n\n @Input()\n get autoSelect(): boolean {\n if (this.multiSelection) {\n return false;\n }\n\n return this._autoSelect;\n }\n\n set autoSelect(value: boolean) {\n this._autoSelect = coerceBooleanProperty(value);\n }\n\n private _autoSelect: boolean = true;\n\n get value(): any {\n return this.tree.getSelectedValues();\n }\n\n @Input()\n get id(): string {\n return this._id;\n }\n\n set id(value: string) {\n this._id = value || this.uid;\n this.stateChanges.next();\n }\n\n private _id: string;\n\n @Input()\n get hasBackdrop(): boolean {\n return this._hasBackdrop;\n }\n\n set hasBackdrop(value: boolean) {\n this._hasBackdrop = coerceBooleanProperty(value);\n }\n\n private _hasBackdrop: boolean = false;\n\n @Input()\n get tabIndex(): number | null {\n return this.disabled ? -1 : this._tabIndex;\n }\n\n set tabIndex(value: number | null) {\n if (Number.isInteger(value) || value === null) {\n this._tabIndex = value;\n }\n }\n\n private _tabIndex: number | null = 0;\n\n @Input({ transform: booleanAttribute })\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(value: boolean) {\n if (value !== this.disabled) {\n this._disabled = value;\n\n if (this.parentFormField) {\n Promise.resolve().then(() => {\n this._disabled ? this.parentFormField.stopFocusMonitor() : this.parentFormField.runFocusMonitor();\n });\n }\n\n // Let the parent form field know to run change detection when the disabled state changes.\n this.stateChanges.next();\n }\n }\n\n private _disabled: boolean = false;\n\n /**\n * Function for handling the combination Ctrl + A (select all). By default, the internal handler is used.\n */\n @Input()\n get selectAllHandler() {\n return this._selectAllHandler;\n }\n\n set selectAllHandler(fn: (event: KeyboardEvent, select: KbqTreeSelect) => void) {\n if (typeof fn !== 'function') {\n throw Error('`selectAllHandler` must be a function.');\n }\n\n this._selectAllHandler = fn;\n }\n\n /** Function for handling the combination Ctrl + A (select all). By default, the internal handler is used. */\n private _selectAllHandler(event: KeyboardEvent, select: KbqTreeSelect): void {\n event.preventDefault();\n\n select.tree.selectAllOptions();\n }\n\n /** Whether the select is focused. */\n get focused(): boolean {\n return this._focused || this._panelOpen;\n }\n\n set focused(value: boolean) {\n this._focused = value;\n }\n\n /** Whether multiple choice is enabled or not. True if multiple or multiline */\n get multiSelection(): boolean {\n return this.multiple || this.multiline;\n }\n\n private _focused = false;\n\n /** Width of the overlay panel. */\n protected overlayWidth: string | number;\n\n /** Min width of the overlay panel. */\n protected overlayMinWidth: string | number;\n\n /**\n * Minimum width of the panel.\n * If minWidth is larger than window width, it will be ignored.\n */\n @Input({ transform: numberAttribute }) panelMinWidth: Exclude<KbqTreeSelectPanelWidth, 'auto'> =\n this.defaultOptions?.panelMinWidth ?? 200;\n\n /** Origin for the overlay panel. */\n protected overlayOrigin?: CdkOverlayOrigin | ElementRef;\n\n /**\n * Width of the panel. If set to `auto`, the panel will match the trigger width.\n * If set to null or an empty string, the panel will grow to match the longest option's text.\n */\n @Input() panelWidth: KbqTreeSelectPanelWidth = this.defaultOptions?.panelWidth || null;\n /**\n * Controls when the search functionality is displayed based on the number of available options.\n *\n * Automatically enables search hiding if value provided, even if `defaultOptions.searchMinOptionsThreshold` is provided.\n * @default undefined\n */\n @Input() set searchMinOptionsThreshold(value: 'auto' | number | undefined) {\n this._searchMinOptionsThreshold =\n this.resolveSearchMinOptionsThreshold(value) ??\n this.resolveSearchMinOptionsThreshold(this.defaultOptions?.searchMinOptionsThreshold);\n }\n\n get searchMinOptionsThreshold(): number | undefined {\n return this._searchMinOptionsThreshold;\n }\n\n private _searchMinOptionsThreshold = this.resolveSearchMinOptionsThreshold();\n\n get panelOpen(): boolean {\n return this._panelOpen;\n }\n\n get canShowCleaner(): boolean {\n return !this.disabled && this.cleaner && this.selectionModel.hasValue();\n }\n\n /** @docs-private */\n get colorForState(): KbqComponentColors {\n const hasLegacyValidateDirective = this.elementRef.nativeElement.classList.contains(\n 'kbq-control_has-validate-directive'\n );\n\n return (hasLegacyValidateDirective && this.ngControl?.invalid) || this.errorState\n ? KbqComponentColors.Error\n : KbqComponentColors.ContrastFade;\n }\n\n isEmptySearchResult: boolean;\n\n triggerValues: KbqTreeSelectTriggerValue[] = [];\n\n private closeSubscription = Subscription.EMPTY;\n\n private _panelOpen = false;\n\n private originalOnKeyDown: (event: KeyboardEvent) => void;\n\n /** The scroll position of the overlay panel, calculated to center the selected option. */\n private scrollTop = 0;\n\n /** Unique id for this input. */\n private readonly uid = `kbq-tree-select-${nextUniqueId++}`;\n\n // Used for storing the values that were assigned before the options were initialized.\n private tempValues: string | string[] | null;\n\n private readonly destroyRef = inject(DestroyRef);\n private readonly window = inject(KBQ_WINDOW);\n\n constructor(\n public elementRef: ElementRef<HTMLElement>,\n readonly changeDetectorRef: ChangeDetectorRef,\n private readonly ngZone: NgZone,\n private readonly renderer: Renderer2,\n public defaultErrorStateMatcher: ErrorStateMatcher,\n @Inject(KBQ_SELECT_SCROLL_STRATEGY) private readonly scrollStrategyFactory,\n @Optional() private readonly dir: Directionality,\n @Optional() public parentForm: NgForm,\n @Optional() public parentFormGroup: FormGroupDirective,\n @Host() @Optional() private readonly parentFormField: KbqFormField,\n @Optional() @Self() public ngControl: NgControl,\n @Optional() @Inject(KBQ_LOCALE_SERVICE) private localeService?: KbqLocaleService\n ) {\n super();\n\n this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe(this.updateLocaleParams);\n\n if (this.ngControl) {\n // Note: we provide the value accessor through here, instead of\n // the `providers` to avoid running into a circular import.\n this.ngControl.valueAccessor = this;\n }\n\n // Force setter to be called in case id was not specified.\n this.id = this.id;\n\n afterNextRender(() => {\n if (this.multiple && !this.multiline) {\n merge(fromEvent(this.window, 'resize'), this.tags.changes)\n .pipe(delay(0), debounceTime(50), takeUntilDestroyed(this.destroyRef))\n .subscribe(this.calculateHiddenItems);\n }\n });\n }\n\n ngOnInit() {\n this.stateChanges.next();\n\n // We need `distinctUntilChanged` here, because some browsers will\n // fire the animation end event twice for the same animation. See:\n // https://github.com/angular/angular/issues/24084\n this.panelDoneAnimatingStream\n .pipe(distinctUntilChanged(), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n if (this.panelOpen) {\n this.scrollTop = 0;\n\n setTimeout(() => {\n this.highlightCorrectOption();\n\n if (this.search) {\n this.search.focus();\n }\n });\n\n this.openedChange.emit(true);\n } else {\n this.openedChange.emit(false);\n this.overlayDir.offsetX = 0;\n this.changeDetectorRef.markForCheck();\n }\n });\n }\n\n ngDoCheck() {\n if (this.ngControl) {\n this.updateErrorState();\n }\n }\n\n ngAfterContentInit() {\n if (!this.tree) return;\n\n this.tree.resetFocusedItemOnBlur = false;\n this.tree.optionShouldHoldFocusOnBlur = !!this.search;\n\n this.selectionModel = this.tree.selectionModel = new SelectionModel<any>(this.multiSelection);\n\n this.selectionModel.changed.subscribe(() => {\n this.onChange(this.selectedValues);\n\n if (this.multiSelection) {\n this.refreshTriggerValues();\n }\n });\n\n this.selectionModel.changed.pipe(delay(0)).subscribe(() => this.setOverlayPosition());\n\n // eslint-disable-next-line @angular-eslint/no-lifecycle-call\n this.tree.ngAfterContentInit();\n\n this.initKeyManager();\n\n this.options = this.tree.renderedOptions;\n this.tree.autoSelect = this.autoSelect;\n\n if (this.tree.multipleMode === null) {\n // setTimeout need for prevent an error \"NG0100: ExpressionChangedAfterItHasBeenCheckedError\"\n setTimeout(() => (this.tree.multipleMode = this.multiSelection ? MultipleMode.CHECKBOX : null));\n }\n\n if (this.multiSelection) {\n this.tree.noUnselectLast = false;\n }\n\n if (this.tempValues) {\n this.setSelectionByValue(this.tempValues);\n this.tempValues = null;\n }\n\n this.userInteractionChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n if (!this.multiSelection && this.panelOpen) {\n this.close();\n\n Promise.resolve().then(() => this.focus());\n }\n });\n\n this.tree.selectionChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n this.selectionChange.emit(new KbqTreeSelectChange(this, event.option, false, event.options));\n\n if (this.search) {\n this.search.focus();\n }\n });\n\n if (!this.multiSelection) {\n this.selectionModel.changed\n .pipe(\n filter(({ added }) => !!added.length),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(({ added }) => {\n this.tree.keyManager.setFocusOrigin('program');\n this.tree.keyManager.setActiveItem(this.options.find(({ data }) => data === added[0]) as any);\n });\n }\n\n this.subscribeOnSearchChanges();\n }\n\n ngAfterViewInit() {\n if (!this.tree) return;\n\n this.tree.treeControl.expansionModel.changed\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.setOverlayPosition());\n }\n\n ngOnDestroy() {\n this.stateChanges.complete();\n this.closeSubscription.unsubscribe();\n }\n\n updateErrorState() {\n const oldState = this.errorState;\n const parent = this.parentFormGroup || this.parentForm;\n const matcher = this.errorStateMatcher || this.defaultErrorStateMatcher;\n const control = this.ngControl ? (this.ngControl.control as UntypedFormControl) : null;\n const newState = matcher.isErrorState(control, parent);\n\n if (newState !== oldState) {\n this.errorState = newState;\n this.stateChanges.next();\n }\n }\n\n @Input()\n hiddenItemsTextFormatter(hiddenItemsText: string, hiddenItems: number): string {\n return hiddenItemsText.replace('{{ number }}', hiddenItems.toString());\n }\n\n clearValue($event): void {\n // need to prevent opening\n $event.stopPropagation();\n // need to prevent scrolling\n $event.preventDefault();\n\n this.selectionModel.clear();\n this.tree.keyManager.setActiveItem(-1);\n\n this.setSelectionByValue([]);\n\n this.onChange(this.selectedValues);\n\n this.selectionChange.emit(new KbqTreeSelectChange(this, this.selectedValues));\n\n this.focus();\n }\n\n /** `View -> model callback called when value changes` */\n onChange: (value: any) => void = () => {};\n\n /** `View -> model callback called when select has been touched` */\n onTouched = () => {};\n\n handleClick() {\n if (this.customMatcher && !this.customMatcher.useDefaultHandlers) return;\n\n this.toggle();\n }\n\n toggle(): void {\n if (this.panelOpen) {\n this.close();\n } else {\n this.open();\n }\n }\n\n open(): void {\n if (this.disabled || !this.options || !this.options.length || this._panelOpen) return;\n\n // add check for form-field bounding rectangles, since it adds extra padding around the trigger\n this.triggerRect = (\n this.parentFormField?.getConnectedOverlayOrigin().nativeElement || this.trigger.nativeElement\n ).getBoundingClientRect();\n\n // Note: The computed font-size will be a string pixel value (e.g. \"16px\").\n // `parseInt` ignores the trailing 'px' and converts this to a number.\n this.triggerFontSize = parseInt(this.window.getComputedStyle(this.trigger.nativeElement)['font-size']);\n\n // It's important that we read this as late as possible, because doing so earlier will\n // return a different element since it's based on queries in the form field which may\n // not have run yet. Also this needs to be assigned before we measure the overlay width.\n if (this.parentFormField) {\n this.overlayOrigin = this.parentFormField.getConnectedOverlayOrigin();\n }\n\n this.overlayWidth = this.getOverlayWidth(this.overlayOrigin);\n // set overlayMinWidth to the largest of `panelMinWidth` and `triggerRect.width`\n // only if `overlayWidth` falsy and `panelMinWidth` not provided.\n // This ensures panel isn't narrow.\n this.overlayMinWidth =\n this.panelMinWidth !== null && !this.overlayWidth\n ? Math.max(this.panelMinWidth, this.triggerRect.width)\n : '';\n\n this._panelOpen = true;\n\n this.changeDetectorRef.markForCheck();\n\n // Set the font size on the panel element once it exists.\n this.ngZone.onStable\n .asObservable()\n .pipe(take(1))\n .subscribe(() => {\n if (this.triggerFontSize && this.overlayDir.overlayRef && this.overlayDir.overlayRef.overlayElement) {\n this.overlayDir.overlayRef.overlayElement.style.fontSize = `${this.triggerFontSize}px`;\n }\n });\n }\n\n /** Closes the overlay panel and focuses the host element. */\n close(): void {\n if (!this._panelOpen) {\n return;\n }\n\n this._panelOpen = false;\n\n this.changeDetectorRef.markForCheck();\n this.onTouched();\n\n if (this.search) {\n this.search.reset();\n }\n }\n\n /**\n * Sets the select's value. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param value New value to be written to the model.\n */\n writeValue(value: any): void {\n if (this.tree) {\n this.setSelectionByValue(value);\n } else {\n this.tempValues = value;\n }\n }\n\n /**\n * Saves a callback function to be invoked when the select's value\n * changes from user input. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the value changes.\n */\n registerOnChange(fn: (value: any) => void) {\n this.onChange = fn;\n }\n\n /**\n * Saves a callback function to be invoked when the select is blurred\n * by the user. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the component has been touched.\n */\n // eslint-disable-next-line @typescript-eslint/ban-types\n registerOnTouched(fn: () => {}) {\n this.onTouched = fn;\n }\n\n /**\n * Disables the select. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param isDisabled Sets whether the component is disabled.\n */\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n this.changeDetectorRef.markForCheck();\n this.stateChanges.next();\n }\n\n get selected(): any {\n return this.multiSelection ? this.selectionModel?.selected : this.selectionModel?.selected[0];\n }\n\n get selectedValues(): any {\n const selectedValues = this.selectionModel.selected.map((value) => this.tree.treeControl.getValue(value));\n\n return this.multiSelection ? selectedValues : selectedValues[0];\n }\n\n get triggerValue(): string {\n if (this.empty) {\n return '';\n }\n\n return this.tree.treeControl.getViewValue(this.selected);\n }\n\n get empty(): boolean {\n return !this.selectionModel || this.selectionModel.isEmpty();\n }\n\n isRtl(): boolean {\n return this.dir ? this.dir.value === 'rtl' : false;\n }\n\n get firstSelected() {\n return this.selectionModel.selected.filter((node) => !this.tree.treeControl.isDisabled(node))[0];\n }\n\n handleKeydown(event: KeyboardEvent) {\n if (this.customMatcher && !this.customMatcher.useDefaultHandlers) return;\n\n if (!this.disabled) {\n if (this.panelOpen) {\n this.panelKeydownHandler(event);\n } else {\n this.triggerKeydownHandler(event);\n }\n }\n }\n\n onFocus() {\n if (this.customMatcher && !this.customMatcher.useDefaultHandlers) return;\n\n if (!this.disabled) {\n this._focused = true;\n\n this.stateChanges.next();\n }\n }\n\n /**\n * Calls the touched callback only if the panel is closed. Otherwise, the trigger will\n * \"blur\" to the panel when it opens, causing a false positive.\n */\n onBlur() {\n if (this.customMatcher && !this.customMatcher.useDefaultHandlers) return;\n\n this._focused = false;\n\n if (!this.disabled && !this.panelOpen) {\n this.onTouched();\n this.changeDetectorRef.markForCheck();\n this.stateChanges.next();\n\n if (this.ngControl?.control) {\n const control = this.ngControl.control;\n\n control.updateValueAndValidity({ emitEvent: false });\n (control.statusChanges as EventEmitter<string>).emit(control.status);\n }\n }\n }\n\n /** Callback that is invoked when the overlay panel has been attached. */\n onAttached() {\n this.overlayDir.positionChange.pipe(take(1)).subscribe(() => {\n this.changeDetectorRef.detectChanges();\n this.setOverlayPosition();\n this.panel.nativeElement.scrollTop = this.scrollTop;\n\n this.tree.updateScrollSize();\n });\n\n this.closeSubscription = this.closingActions().subscribe(() => this.close());\n }\n\n /** Returns the theme to be used on the panel. */\n getPanelTheme(): string {\n return this.parentFormField ? `kbq-${this.parentFormField.color}` : '';\n }\n\n focus() {\n this.elementRef.nativeElement.focus();\n }\n\n /**\n * Implemented as part of KbqFormFieldControl.\n * @docs-private\n */\n onContainerClick() {\n this.focus();\n }\n\n /** Invoked when an option is clicked. */\n onRemoveSelectedOption(selectedOption: any, $event) {\n $event.stopPropagation();\n\n this.selectionModel.deselect(\n this.selected.find((value) => this.tree.treeControl.getValue(value) === selectedOption.value)\n );\n\n this.selectionChange.emit(\n new KbqTreeSelectChange(\n this,\n this.options.find((option) => option.value === selectedOption.value) || selectedOption.value\n )\n );\n\n this.onChange(this.selectedValues);\n }\n\n calculateHiddenItems = () => {\n if (\n !this.isBrowser ||\n this.customTrigger ||\n this.customMatcher ||\n this.empty ||\n !this.multiple ||\n this.multiline\n )\n return;\n\n const totalItemsWidth = this.getTotalItemsWidthInMatcher();\n const [totalVisibleItemsWidth, visibleItems] = this.getTotalVisibleItems();\n\n this.hiddenItems = this.selectionModel.selected.length - visibleItems;\n this.changeDetectorRef.detectChanges();\n\n if (this.hiddenItems) {\n const itemsCounter = this.trigger.nativeElement.querySelector('.kbq-select__match-hidden-text');\n const matcherList = this.trigger.nativeElement.querySelector('.kbq-select__match-list');\n\n const itemsCounterShowed = itemsCounter.offsetTop < itemsCounter.offsetHeight;\n const itemsCounterWidth: number = Math.floor(itemsCounter.getBoundingClientRect().width);\n\n const matcherListWidth: number = Math.floor(matcherList.getBoundingClientRect().width);\n const matcherWidth: number = matcherListWidth + (itemsCounterShowed ? itemsCounterWidth : 0);\n\n if (itemsCounterShowed && totalItemsWidth < matcherWidth) {\n this.hiddenItems = 0;\n this.changeDetectorRef.detectChanges();\n }\n\n if (\n totalVisibleItemsWidth === matcherListWidth ||\n totalVisibleItemsWidth + itemsCounterWidth < matcherListWidth\n ) {\n this.changeDetectorRef.markForCheck();\n\n return;\n }\n }\n\n this.changeDetectorRef.markForCheck();\n };\n\n triggerKeydownHandler(event: KeyboardEvent) {\n const keyCode = event.keyCode;\n const isArrowKey =\n keyCode === DOWN_ARROW || keyCode === UP_ARROW || keyCode === LEFT_ARROW || keyCode === RIGHT_ARROW;\n const isOpenKey = keyCode === ENTER || keyCode === SPACE;\n\n // Open the select on ALT + arrow key to match the native <select>\n if (isOpenKey || ((this.multiSelection || event.altKey) && isArrowKey)) {\n // prevents the page from scrolling down when pressing space\n event.preventDefault();\n\n this.open();\n } else if (!this.multiSelection && this.tree.keyManager && this.tree.keyManager.onKeydown) {\n this.tree.keyManager.onKeydown(event);\n }\n }\n\n panelKeydownHandler(event: KeyboardEvent) {\n const keyCode = event.keyCode;\n const isArrowKey = keyCode === DOWN_ARROW || keyCode === UP_ARROW;\n\n if ((isArrowKey && event.altKey) || keyCode === ESCAPE || keyCode === TAB) {\n // Close the select on ALT + arrow key to match the native <select>\n event.preventDefault();\n this.close();\n this.focus();\n } else if (keyCode === LEFT_ARROW || keyCode === RIGHT_ARROW) {\n return this.originalOnKeyDown.call(this.tree, event);\n } else if (keyCode === HOME) {\n event.preventDefault();\n\n this.tree.keyManager.setFirstItemActive();\n } else if (keyCode === END) {\n event.preventDefault();\n\n this.tree.keyManager.setLastItemActive();\n } else if (keyCode === PAGE_UP) {\n event.preventDefault();\n\n this.tree.keyManager.setPreviousPageItemActive();\n } else if (keyCode === PAGE_DOWN) {\n event.preventDefault();\n\n this.tree.keyManager.setNextPageItemActive();\n } else if ((keyCode === ENTER || keyCode === SPACE) && this.tree.keyManager.activeItem) {\n event.preventDefault();\n\n if (!this.autoSelect) {\n this.originalOnKeyDown.call(this.tree, event);\n } else {\n this.close();\n this.focus();\n }\n } else if (this.multiSelection && isSelectAll(event)) {\n this.selectAllHandler(event, this);\n } else {\n const previouslyFocusedIndex = this.tree.keyManager.activeItemIndex;\n\n this.tree.keyManager.setFocusOrigin('keyboard');\n this.tree.keyManager.onKeydown(event);\n\n if (\n this.multiSelection &&\n isArrowKey &&\n event.shiftKey &&\n this.tree.keyManager.activeItem &&\n this.tree.keyManager.activeItemIndex !== previouslyFocusedIndex\n ) {\n this.tree.keyManager.activeItem.selectViaInteraction(event);\n }\n\n if (this.autoSelect && this.tree.keyManager.activeItem) {\n this.tree.setSelectedOptionsByKey(\n this.tree.keyManager.activeItem,\n hasModifierKey(event, 'shiftKey'),\n // ctrlKey is for Windows, metaKey is for MacOS\n hasModifierKey(event, 'ctrlKey', 'metaKey')\n );\n }\n\n if (this.search) {\n this.search.focus();\n }\n }\n }\n\n /** @docs-private */\n protected shouldShowSearch(): boolean {\n return isUndefined(this.searchMinOptionsThreshold) || this.options.length >= this.searchMinOptionsThreshold;\n }\n\n private updateLocaleParams = () => {\n this.hiddenItemsText = this.localeService?.getParams('select').hiddenItemsText;\n\n this.changeDetectorRef.markForCheck();\n };\n\n private closingActions() {\n const backdrop = this.overlayDir.overlayRef!.backdropClick();\n const outsidePointerEvents = this.overlayDir\n .overlayRef!.outsidePointerEvents()\n .pipe(filter((event) => !this.elementRef.nativeElement.contains(_getEventTarget(event))));\n const detachments = this.overlayDir.overlayRef!.detachments();\n\n return merge(backdrop, outsidePointerEvents, detachments);\n }\n\n private getTotalItemsWidthInMatcher(): number {\n const triggerClone = this.buildTriggerClone();\n\n triggerClone.querySelector('.kbq-select__match-hidden-text')?.remove();\n this.renderer.appendChild(this.trigger.nativeElement, triggerClone);\n\n let totalItemsWidth: number = 0;\n const selectedItemsViewValueContainers = triggerClone.querySelectorAll<HTMLElement>('kbq-tag');\n\n selectedItemsViewValueContainers.forEach((item) => (totalItemsWidth += this.getItemWidth(item)));\n\n triggerClone.remove();\n\n return totalItemsWidth;\n }\n\n private getTotalVisibleItems(): [number, number] {\n const triggerClone = this.buildTriggerClone();\n\n this.renderer.setStyle(triggerClone.querySelector('.kbq-select__match-hidden-text'), 'display', 'block');\n this.renderer.appendChild(this.trigger.nativeElement, triggerClone);\n\n let visibleItemsCount: number = 0;\n let totalVisibleItemsWidth: number = 0;\n\n (triggerClone.querySelectorAll('kbq-tag') as NodeListOf<HTMLElement>).forEach((item) => {\n if (item.offsetTop < item.offsetHeight) {\n totalVisibleItemsWidth += this.getItemWidth(item);\n visibleItemsCount++;\n }\n });\n\n triggerClone.remove();\n\n return [totalVisibleItemsWidth, visibleItemsCount];\n }\n\n /** Gets how wide the overlay panel should be. */\n private getOverlayWidth(origin?: ElementRef | CdkOverlayOrigin): string | number {\n if (this.panelWidth === 'auto') {\n const elementRef = origin instanceof CdkOverlayOrigin ? origin.elementRef : origin || this.elementRef;\n\n return elementRef.nativeElement.getBoundingClientRect().width;\n }\n\n return this.panelWidth ?? '';\n }\n\n private buildTriggerClone(): HTMLDivElement {\n const triggerClone = this.trigger.nativeElement.cloneNode(true);\n\n this.renderer.setStyle(triggerClone, 'position', 'absolute');\n this.renderer.setStyle(triggerClone, 'visibility', 'hidden');\n this.renderer.setStyle(triggerClone, 'top', '-100%');\n this.renderer.setStyle(triggerClone, 'left', '0');\n\n return triggerClone;\n }\n\n private getItemWidth(element: HTMLElement): number {\n const computedStyle = this.window.getComputedStyle(element);\n\n const width: number = parseInt(computedStyle.width as string);\n const marginLeft: number = parseInt(computedStyle.marginLeft as string);\n const marginRight: number = parseInt(computedStyle.marginRight as string);\n\n return width + marginLeft + marginRight + parseInt(SelectSizeMultipleContentGap);\n }\n\n private refreshTriggerValues(): void {\n this.triggerValues = this.selectionModel.selected.map((node) => ({\n value: this.tree.treeControl.getValue(node),\n viewValue: this.tree.treeControl.getViewValue(node),\n disabled: this.tree.treeControl.isDisabled(node)\n }));\n\n this.changeDetectorRef.detectChanges();\n }\n\n /**\n * Sets the selected option based on a value. If no option can be\n * found with the designated value, the select trigger is cleared.\n */\n private setSelectionByValue(value: any | any[]) {\n if (this.multiSelection && value) {\n if (!Array.isArray(value)) {\n throw getKbqSelectNonArrayValueError();\n }\n\n this.tree.setOptionsFromValues(value);\n\n this.sortValues();\n } else {\n this.tree.setOptionsFromValues([value]);\n }\n\n this.changeDetectorRef.detectChanges();\n }\n\n private initKeyManager() {\n this.originalOnKeyDown = this.tree.onKeyDown;\n\n this.tree.onKeyDown = () => {};\n\n this.tree.keyManager.change.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n if (this._panelOpen && this.panel) {\n this.scrollActiveOptionIntoView();\n } else if (!this._panelOpen && !this.multiSelection && this.tree.keyManager.activeItem) {\n this.tree.keyManager.activeItem.selectViaInteraction();\n }\n });\n }\n\n /** Sorts the selected values in the selected based on their order in the panel. */\n private sortValues() {\n if (this.multiSelection) {\n const options = this.options.toArray();\n\n this.selectionModel.sort((a, b) => {\n return this.sortComparator\n ? this.sortComparator(a, b, options)\n : options.indexOf(a) - options.indexOf(b);\n });\n\n this.stateChanges.next();\n }\n }\n\n /**\n * Highlights the selected item. If no option is selected, it will highlight\n * the first item instead.\n */\n private highlightCorrectOption() {\n if (!this.tree.keyManager) {\n return;\n }\n\n const selectedOption = this.options.find((option) => (option.data as any) === this.firstSelected);\n\n this.tree.keyManager.setFocusOrigin('keyboard');\n\n if (selectedOption) {\n this.tree.keyManager.setActiveItem(selectedOption);\n } else {\n this.tree.keyManager.setFirstItemActive();\n\n if (this.tree.keyManager.activeItem?.disabled) {\n this.tree.keyManager.setActiveItem(-1);\n }\n }\n }\n\n /** Scrolls the active option into view. */\n private scrollActiveOptionIntoView() {\n this.tree.keyManager.activeItem?.focus();\n }\n\n private subscribeOnSearchChanges() {\n if (!this.search?.ngControl.valueChanges) return;\n\n this.search.ngControl.valueChanges.pipe(audit(() => this.tree.unorderedOptions.changes)).subscribe((value) => {\n this.isEmptySearchResult = !!value && this.tree.isEmpty;\n this.changeDetectorRef.markForCheck();\n });\n }\n}\n","<div\n #fallbackOverlayOrigin=\"cdkOverlayOrigin\"\n #trigger\n cdkOverlayOrigin\n class=\"kbq-select__trigger\"\n [class.kbq-select__trigger_empty]=\"empty\"\n [class.kbq-select__trigger_multiline]=\"multiline\"\n [class.kbq-select__trigger_multiple]=\"multiple\"\n [class.kbq-select__trigger_single]=\"!multiple\"\n>\n @if (!!customMatcher) {\n <ng-content select=\"kbq-select-matcher, [kbq-select-matcher]\" />\n } @else {\n <div class=\"kbq-select__matcher\">\n @if (empty) {\n <span class=\"kbq-select__placeholder\">\n {{ placeholder || '\\u00A0' }}\n </span>\n } @else {\n @if (!!customTrigger) {\n <ng-content select=\"kbq-select-trigger, [kbq-select-trigger]\" />\n } @else {\n <div class=\"kbq-select__match-container\">\n @if (multiSelection) {\n <div\n [class.kbq-select__match-list]=\"!multiline\"\n [class.kbq-select__multiline-match-list]=\"multiline\"\n >\n @if (!customTagTemplateRef) {\n @for (option of triggerValues; track option) {\n <kbq-tag\n [color]=\"colorForState\"\n [disabled]=\"option.disabled || disabled\"\n [selectable]=\"false\"\n >\n {{ option.viewValue }}\n @if (!option.disabled && !disabled) {\n <i\n kbq-icon=\"kbq-xmark-s_16\"\n kbqTagRemove\n (click)=\"onRemoveSelectedOption(option, $event)\"\n ></i>\n }\n </kbq-tag>\n }\n }\n @if (customTagTemplateRef) {\n @for (option of triggerValues; track option) {\n <ng-container\n [ngTemplateOutlet]=\"customTagTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: option, select: this }\"\n />\n }\n }\n </div>\n } @else {\n <span class=\"kbq-select__matcher-text\">\n {{ triggerValue }}\n </span>\n }\n @if (!multiline) {\n <div\n class=\"kbq-select__match-hidden-text\"\n [style.display]=\"hiddenItems > 0 ? 'block' : 'none'\"\n >\n {{ hiddenItemsTextFormatter(hiddenItemsText, hiddenItems) }}\n </div>\n }\n </div>\n }\n }\n\n @if (canShowCleaner) {\n <div\n class=\"kbq-select__cleaner\"\n (click)=\"clearValue($event)\"\n (keydown.enter)=\"clearValue($event)\"\n (keydown.space)=\"clearValue($event)\"\n >\n <ng-content select=\"kbq-cleaner\" />\n </div>\n }\n\n <div class=\"kbq-select__arrow-wrapper\">\n <i kbq-icon=\"kbq-chevron-down-s_16\" class=\"kbq-select__arrow\" [color]=\"colorForState\"></i>\n </div>\n </div>\n }\n</div>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayLockPosition\n [cdkConnectedOverlayBackdropClass]=\"backdropClass\"\n [cdkConnectedOverlayHasBackdrop]=\"hasBackdrop\"\n [cdkConnectedOverlayMinWidth]=\"overlayMinWidth\"\n [cdkConnectedOverlayOffsetY]=\"offsetY\"\n [cdkConnectedOverlayOpen]=\"panelOpen\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin || fallbackOverlayOrigin\"\n [cdkConnectedOverlayPanelClass]=\"overlayPanelClass\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayWidth]=\"overlayWidth\"\n (attach)=\"onAttached()\"\n (backdropClick)=\"close()\"\n>\n <div\n #panel\n class=\"kbq-tree-select__panel {{ getPanelTheme() }}\"\n cdkMonitorSubtreeFocus\n [ngClass]=\"panelClass\"\n [style.font-size.px]=\"triggerFontSize\"\n [style.transformOrigin]=\"transformOrigin\"\n (keydown)=\"panelKeydownHandler($event)\"\n >\n @if (search && shouldShowSearch()) {\n <div class=\"kbq-select__search-container\">\n <ng-content select=\"[kbqSelectSearch]\" />\n </div>\n }\n\n <div\n #optionsContainer\n class=\"kbq-tree-select__content kbq-scrollbar\"\n [@fadeInContent]=\"'showing'\"\n (@fadeInContent.done)=\"panelDoneAnimatingStream.next($event.toState)\"\n >\n @if (isEmptySearchResult) {\n <div class=\"kbq-select__no-options-message\">\n <ng-content select=\"[kbq-select-search-empty-result]\" />\n </div>\n }\n\n <ng-content select=\"kbq-tree-selection\" />\n </div>\n\n <ng-content select=\"kbq-select-footer,[kbq-tree-select-footer]\" />\n </div>\n</ng-template>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport {\n KBQ_SELECT_SCROLL_STRATEGY_PROVIDER,\n KbqPseudoCheckboxModule,\n KbqSelectFooter,\n KbqSelectMatcher,\n KbqSelectSearch,\n KbqSelectSearchEmptyResult,\n KbqSelectTrigger\n} from '@koobiq/components/core';\nimport { KbqFormFieldModule } from '@koobiq/components/form-field';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqTagsModule } from '@koobiq/components/tags';\nimport { KbqTreeModule } from '@koobiq/components/tree';\nimport { KbqTreeSelect } from './tree-select.component';\n\n@NgModule({\n imports: [\n OverlayModule,\n KbqTreeModule,\n KbqIconModule,\n KbqTagsModule,\n KbqPseudoCheckboxModule,\n KbqSelectSearch,\n KbqSelectFooter,\n KbqSelectMatcher,\n KbqSelectTrigger,\n KbqSelectSearchEmptyResult,\n NgClass,\n NgTemplateOutlet,\n A11yModule,\n KbqTreeSelect\n ],\n exports: [\n KbqTreeSelect,\n KbqSelectSearch,\n KbqSelectFooter,\n KbqSelectMatcher,\n KbqSelectTrigger,\n KbqSelectSearchEmptyResult,\n KbqFormFieldModule\n ],\n providers: [KBQ_SELECT_SCROLL_STRATEGY_PROVIDER]\n})\nexport class KbqTreeSelectModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["SelectSizeMultipleContentGap"],"mappings":"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"}