@koobiq/components 18.8.0 → 18.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. package/accordion/accordion-tokens.scss +1 -13
  2. package/alert/alert-tokens.scss +1 -36
  3. package/autocomplete/autocomplete-tokens.scss +1 -8
  4. package/autocomplete/autocomplete-trigger.directive.d.ts +5 -3
  5. package/autocomplete/autocomplete.scss +21 -1
  6. package/badge/_badge-theme.scss +1 -1
  7. package/badge/badge-tokens.scss +1 -71
  8. package/button/button-tokens.scss +1 -140
  9. package/button-toggle/button-toggle-tokens.scss +1 -32
  10. package/checkbox/checkbox-tokens.scss +1 -50
  11. package/code-block/actionbar.component.d.ts +2 -2
  12. package/code-block/code-block-content.d.ts +28 -0
  13. package/code-block/code-block-tokens.scss +1 -139
  14. package/code-block/code-block.component.d.ts +6 -3
  15. package/code-block/code-block.module.d.ts +3 -3
  16. package/code-block/code-block.types.d.ts +10 -2
  17. package/core/common-behaviors/common-module.d.ts +2 -2
  18. package/core/forms/forms-tokens.scss +2 -9
  19. package/core/option/_option-theme.scss +10 -0
  20. package/core/option/option-tokens.scss +4 -0
  21. package/core/selection/pseudo-checkbox/pseudo-checkbox-tokens.scss +1 -50
  22. package/core/services/measure-scrollbar.service.d.ts +2 -2
  23. package/core/services/theme.service.d.ts +4 -3
  24. package/core/styles/_koobiq-theme.scss +3 -2
  25. package/core/styles/common/_list.scss +6 -8
  26. package/core/styles/common/_select.scss +3 -2
  27. package/core/styles/theming/scrollbar-tokens.scss +1 -16
  28. package/datepicker/datepicker-tokens.scss +1 -21
  29. package/datepicker/datepicker.component.d.ts +3 -3
  30. package/divider/divider-tokens.scss +1 -7
  31. package/dl/dl-tokens.scss +1 -8
  32. package/dl/dl.scss +1 -1
  33. package/dropdown/_dropdown-theme.scss +10 -0
  34. package/dropdown/dropdown-content.directive.d.ts +2 -2
  35. package/dropdown/dropdown-tokens.scss +5 -8
  36. package/dropdown/dropdown-trigger.directive.d.ts +1 -0
  37. package/dropdown/dropdown.scss +22 -3
  38. package/empty-state/empty-state-tokens.scss +1 -8
  39. package/esm2022/accordion/accordion-trigger.component.mjs +2 -2
  40. package/esm2022/accordion/accordion.component.mjs +2 -2
  41. package/esm2022/alert/alert.component.mjs +2 -2
  42. package/esm2022/autocomplete/autocomplete-trigger.directive.mjs +13 -17
  43. package/esm2022/autocomplete/autocomplete.component.mjs +2 -2
  44. package/esm2022/badge/badge.component.mjs +2 -2
  45. package/esm2022/button/button.component.mjs +2 -2
  46. package/esm2022/button-toggle/button-toggle.component.mjs +2 -2
  47. package/esm2022/checkbox/checkbox.mjs +2 -2
  48. package/esm2022/code-block/actionbar.component.mjs +1 -1
  49. package/esm2022/code-block/code-block-content.mjs +393 -0
  50. package/esm2022/code-block/code-block.component.mjs +16 -10
  51. package/esm2022/code-block/code-block.module.mjs +7 -27
  52. package/esm2022/code-block/code-block.types.mjs +1 -1
  53. package/esm2022/core/common-behaviors/common-module.mjs +14 -12
  54. package/esm2022/core/option/option.mjs +3 -3
  55. package/esm2022/core/selection/pseudo-checkbox/pseudo-checkbox.mjs +2 -2
  56. package/esm2022/core/services/measure-scrollbar.service.mjs +7 -12
  57. package/esm2022/core/services/theme.service.mjs +10 -8
  58. package/esm2022/core/version.mjs +2 -2
  59. package/esm2022/datepicker/calendar-header.component.mjs +1 -1
  60. package/esm2022/datepicker/datepicker.component.mjs +8 -13
  61. package/esm2022/divider/divider.component.mjs +2 -2
  62. package/esm2022/dl/dl.component.mjs +2 -2
  63. package/esm2022/dropdown/dropdown-content.directive.mjs +6 -9
  64. package/esm2022/dropdown/dropdown-item.component.mjs +2 -2
  65. package/esm2022/dropdown/dropdown-trigger.directive.mjs +8 -5
  66. package/esm2022/dropdown/dropdown.component.mjs +3 -3
  67. package/esm2022/empty-state/empty-state.component.mjs +2 -2
  68. package/esm2022/file-upload/multiple-file-upload.component.mjs +3 -3
  69. package/esm2022/file-upload/single-file-upload.component.mjs +3 -3
  70. package/esm2022/form-field/cleaner.mjs +3 -3
  71. package/esm2022/form-field/form-field.mjs +4 -4
  72. package/esm2022/form-field/hint.mjs +2 -2
  73. package/esm2022/form-field/password-hint.mjs +5 -5
  74. package/esm2022/form-field/password-toggle.mjs +3 -3
  75. package/esm2022/form-field/stepper.mjs +5 -1
  76. package/esm2022/icon/icon-button.component.mjs +4 -4
  77. package/esm2022/icon/icon-item.component.mjs +4 -4
  78. package/esm2022/icon/icon.component.mjs +5 -5
  79. package/esm2022/list/list-selection.component.mjs +2 -2
  80. package/esm2022/list/list.component.mjs +2 -2
  81. package/esm2022/loader-overlay/loader-overlay.component.mjs +2 -2
  82. package/esm2022/markdown/markdown.component.mjs +2 -2
  83. package/esm2022/modal/modal.component.mjs +10 -13
  84. package/esm2022/navbar/navbar-item.component.mjs +31 -32
  85. package/esm2022/navbar/navbar.component.mjs +2 -2
  86. package/esm2022/navbar/vertical-navbar.component.mjs +2 -2
  87. package/esm2022/popover/popover-confirm.component.mjs +3 -3
  88. package/esm2022/popover/popover.component.mjs +3 -3
  89. package/esm2022/progress-bar/progress-bar.component.mjs +2 -2
  90. package/esm2022/progress-spinner/progress-spinner.component.mjs +2 -2
  91. package/esm2022/radio/radio.component.mjs +2 -2
  92. package/esm2022/risk-level/risk-level.component.mjs +2 -2
  93. package/esm2022/scrollbar/scrollbar.component.mjs +3 -3
  94. package/esm2022/select/select.component.mjs +52 -18
  95. package/esm2022/sidebar/sidebar.component.mjs +8 -7
  96. package/esm2022/sidepanel/sidepanel-container.component.mjs +3 -3
  97. package/esm2022/tabs/tab-group.component.mjs +2 -2
  98. package/esm2022/tabs/tab-nav-bar.mjs +3 -3
  99. package/esm2022/tags/tag-input.mjs +2 -3
  100. package/esm2022/tags/tag-list.component.mjs +2 -2
  101. package/esm2022/textarea/textarea.component.mjs +8 -5
  102. package/esm2022/timezone/timezone-option.component.mjs +2 -2
  103. package/esm2022/timezone/timezone-select.component.mjs +3 -3
  104. package/esm2022/toast/toast.component.mjs +3 -3
  105. package/esm2022/toggle/toggle.component.mjs +3 -3
  106. package/esm2022/tooltip/tooltip.component.mjs +3 -3
  107. package/esm2022/tree/toggle.mjs +6 -5
  108. package/esm2022/tree/tree-option.component.mjs +2 -2
  109. package/esm2022/tree/tree-selection.component.mjs +2 -2
  110. package/esm2022/tree/tree.mjs +2 -2
  111. package/esm2022/tree-select/tree-select.component.mjs +46 -11
  112. package/fesm2022/koobiq-components-accordion.mjs +4 -4
  113. package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
  114. package/fesm2022/koobiq-components-alert.mjs +2 -2
  115. package/fesm2022/koobiq-components-alert.mjs.map +1 -1
  116. package/fesm2022/koobiq-components-autocomplete.mjs +14 -18
  117. package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
  118. package/fesm2022/koobiq-components-badge.mjs +2 -2
  119. package/fesm2022/koobiq-components-badge.mjs.map +1 -1
  120. package/fesm2022/koobiq-components-button-toggle.mjs +2 -2
  121. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  122. package/fesm2022/koobiq-components-button.mjs +2 -2
  123. package/fesm2022/koobiq-components-button.mjs.map +1 -1
  124. package/fesm2022/koobiq-components-checkbox.mjs +2 -2
  125. package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
  126. package/fesm2022/koobiq-components-code-block.mjs +408 -34
  127. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  128. package/fesm2022/koobiq-components-core.mjs +30 -33
  129. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  130. package/fesm2022/koobiq-components-datepicker.mjs +7 -12
  131. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  132. package/fesm2022/koobiq-components-divider.mjs +2 -2
  133. package/fesm2022/koobiq-components-divider.mjs.map +1 -1
  134. package/fesm2022/koobiq-components-dl.mjs +2 -2
  135. package/fesm2022/koobiq-components-dl.mjs.map +1 -1
  136. package/fesm2022/koobiq-components-dropdown.mjs +14 -14
  137. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  138. package/fesm2022/koobiq-components-empty-state.mjs +2 -2
  139. package/fesm2022/koobiq-components-empty-state.mjs.map +1 -1
  140. package/fesm2022/koobiq-components-file-upload.mjs +4 -4
  141. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  142. package/fesm2022/koobiq-components-form-field.mjs +17 -13
  143. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  144. package/fesm2022/koobiq-components-icon.mjs +10 -10
  145. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  146. package/fesm2022/koobiq-components-list.mjs +4 -4
  147. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  148. package/fesm2022/koobiq-components-loader-overlay.mjs +2 -2
  149. package/fesm2022/koobiq-components-loader-overlay.mjs.map +1 -1
  150. package/fesm2022/koobiq-components-markdown.mjs +2 -2
  151. package/fesm2022/koobiq-components-markdown.mjs.map +1 -1
  152. package/fesm2022/koobiq-components-modal.mjs +9 -12
  153. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  154. package/fesm2022/koobiq-components-navbar.mjs +34 -36
  155. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  156. package/fesm2022/koobiq-components-popover.mjs +4 -4
  157. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  158. package/fesm2022/koobiq-components-progress-bar.mjs +2 -2
  159. package/fesm2022/koobiq-components-progress-bar.mjs.map +1 -1
  160. package/fesm2022/koobiq-components-progress-spinner.mjs +2 -2
  161. package/fesm2022/koobiq-components-progress-spinner.mjs.map +1 -1
  162. package/fesm2022/koobiq-components-radio.mjs +2 -2
  163. package/fesm2022/koobiq-components-radio.mjs.map +1 -1
  164. package/fesm2022/koobiq-components-risk-level.mjs +2 -2
  165. package/fesm2022/koobiq-components-risk-level.mjs.map +1 -1
  166. package/fesm2022/koobiq-components-scrollbar.mjs +2 -2
  167. package/fesm2022/koobiq-components-scrollbar.mjs.map +1 -1
  168. package/fesm2022/koobiq-components-select.mjs +52 -18
  169. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  170. package/fesm2022/koobiq-components-sidebar.mjs +6 -6
  171. package/fesm2022/koobiq-components-sidebar.mjs.map +1 -1
  172. package/fesm2022/koobiq-components-sidepanel.mjs +2 -2
  173. package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
  174. package/fesm2022/koobiq-components-tabs.mjs +4 -4
  175. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  176. package/fesm2022/koobiq-components-tags.mjs +3 -4
  177. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  178. package/fesm2022/koobiq-components-textarea.mjs +7 -4
  179. package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
  180. package/fesm2022/koobiq-components-timezone.mjs +4 -4
  181. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  182. package/fesm2022/koobiq-components-toast.mjs +2 -2
  183. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  184. package/fesm2022/koobiq-components-toggle.mjs +2 -2
  185. package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
  186. package/fesm2022/koobiq-components-tooltip.mjs +2 -2
  187. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  188. package/fesm2022/koobiq-components-tree-select.mjs +46 -11
  189. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  190. package/fesm2022/koobiq-components-tree.mjs +11 -10
  191. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  192. package/file-upload/_file-upload-theme.scss +2 -2
  193. package/file-upload/file-upload-tokens.scss +1 -52
  194. package/form-field/_form-field-theme.scss +7 -0
  195. package/form-field/form-field-tokens.scss +3 -29
  196. package/form-field/form-field.scss +5 -6
  197. package/form-field/hint-tokens.scss +1 -22
  198. package/icon/_icon-item-theme.scss +3 -0
  199. package/icon/_icon-theme.scss +3 -1
  200. package/icon/icon-button-tokens.scss +1 -30
  201. package/icon/icon-item-tokens.scss +1 -26
  202. package/icon/icon-tokens.scss +2 -10
  203. package/link/_link-theme.scss +27 -5
  204. package/link/link-tokens.scss +1 -21
  205. package/list/_list-theme.scss +10 -0
  206. package/list/list-tokens.scss +17 -42
  207. package/loader-overlay/loader-overlay-tokens.scss +1 -12
  208. package/markdown/markdown-tokens.scss +1 -34
  209. package/modal/modal-tokens.scss +1 -12
  210. package/modal/modal.component.d.ts +2 -2
  211. package/navbar/navbar-item.component.d.ts +7 -7
  212. package/navbar/navbar-tokens.scss +1 -28
  213. package/package.json +6 -8
  214. package/popover/popover-tokens.scss +1 -12
  215. package/popover/popover.scss +4 -0
  216. package/prebuilt-themes/dark-theme.css +1 -1
  217. package/prebuilt-themes/light-theme.css +1 -1
  218. package/prebuilt-themes/theme.css +1 -1
  219. package/progress-bar/progress-bar-tokens.scss +1 -10
  220. package/progress-spinner/progress-spinner-tokens.scss +1 -9
  221. package/radio/radio-tokens.scss +11 -70
  222. package/risk-level/risk-level-tokens.scss +1 -32
  223. package/schematics/ng-add/index.js +3 -6
  224. package/scrollbar/scrollbar-tokens.scss +1 -16
  225. package/select/select-tokens.scss +1 -8
  226. package/select/select.component.d.ts +41 -4
  227. package/select/select.scss +20 -0
  228. package/sidebar/sidebar.component.d.ts +1 -0
  229. package/sidepanel/sidepanel-tokens.scss +1 -11
  230. package/tabs/tabs-tokens.scss +1 -92
  231. package/tags/tag-tokens.scss +1 -74
  232. package/textarea/textarea.component.d.ts +1 -0
  233. package/timezone/timezone-option-tokens.scss +5 -11
  234. package/toast/toast-tokens.scss +1 -22
  235. package/toggle/toggle-tokens.scss +1 -52
  236. package/tooltip/tooltip-tokens.scss +1 -21
  237. package/tree/_tree-theme.scss +2 -1
  238. package/tree/tree-option.scss +11 -0
  239. package/tree/tree-tokens.scss +1 -37
  240. package/tree-select/_tree-select-theme.scss +5 -1
  241. package/tree-select/tree-select-tokens.scss +2 -6
  242. package/tree-select/tree-select.component.d.ts +46 -5
  243. package/select/README.md +0 -0
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Directive, EventEmitter, inject, DestroyRef, isDevMode, ElementRef, TemplateRef, Component, ViewEncapsulation, ChangeDetectionStrategy, Optional, Self, Inject, ViewChild, ContentChild, ViewChildren, ContentChildren, Input, Output, NgModule } from '@angular/core';
2
+ import { Directive, InjectionToken, inject, EventEmitter, DestroyRef, isDevMode, booleanAttribute, ElementRef, TemplateRef, Component, ViewEncapsulation, ChangeDetectionStrategy, Optional, Self, Inject, ViewChild, ContentChild, ViewChildren, ContentChildren, Input, Output, NgModule } from '@angular/core';
3
3
  import * as i1 from '@koobiq/components/core';
4
4
  import { mixinTabIndex, mixinDisabled, mixinErrorState, getKbqSelectDynamicMultipleError, getKbqSelectNonFunctionValueError, getKbqSelectNonArrayValueError, KbqVirtualOption, SELECT_PANEL_PADDING_X, SELECT_PANEL_INDENT_PADDING_X, SELECT_PANEL_VIEWPORT_PADDING, KBQ_SELECT_SCROLL_STRATEGY, KBQ_LOCALE_SERVICE, KBQ_OPTION_PARENT_COMPONENT, KbqSelectFooter, KbqSelectTrigger, KbqSelectMatcher, KbqSelectSearch, KbqOption, KbqOptgroup, kbqSelectAnimations, KbqOptionModule, KbqSelectSearchEmptyResult, KBQ_SELECT_SCROLL_STRATEGY_PROVIDER } from '@koobiq/components/core';
5
5
  import { KbqTooltipTrigger, KbqToolTipModule } from '@koobiq/components/tooltip';
@@ -7,7 +7,8 @@ import * as i3 from '@angular/cdk/bidi';
7
7
  import { coerceBooleanProperty } from '@angular/cdk/coercion';
8
8
  import { SelectionModel } from '@angular/cdk/collections';
9
9
  import * as i2 from '@angular/cdk/overlay';
10
- import { CdkConnectedOverlay, OverlayModule } from '@angular/cdk/overlay';
10
+ import { CdkOverlayOrigin, CdkConnectedOverlay, OverlayModule } from '@angular/cdk/overlay';
11
+ import { Platform } from '@angular/cdk/platform';
11
12
  import { CdkVirtualForOf } from '@angular/cdk/scrolling';
12
13
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
13
14
  import * as i4 from '@angular/forms';
@@ -99,6 +100,15 @@ class KbqSelectChange {
99
100
  this.value = value;
100
101
  }
101
102
  }
103
+ /** Injection token that can be used to provide the default options for the `kbq-select`. */
104
+ const KBQ_SELECT_OPTIONS = new InjectionToken('KBQ_SELECT_OPTIONS');
105
+ /** Utility provider for `KBQ_SELECT_OPTIONS`. */
106
+ const kbqSelectOptionsProvider = (options) => {
107
+ return {
108
+ provide: KBQ_SELECT_OPTIONS,
109
+ useValue: options
110
+ };
111
+ };
102
112
  /** @docs-private */
103
113
  class KbqSelectBase {
104
114
  constructor(elementRef, defaultErrorStateMatcher, parentForm, parentFormGroup, ngControl) {
@@ -145,7 +155,7 @@ class KbqSelect extends KbqSelectMixinBase {
145
155
  if (this.selectionModel) {
146
156
  throw getKbqSelectDynamicMultipleError();
147
157
  }
148
- this._multiple = coerceBooleanProperty(value);
158
+ this._multiple = value;
149
159
  }
150
160
  /**
151
161
  * Function to compare the option values with the selected values. The first argument
@@ -242,6 +252,8 @@ class KbqSelect extends KbqSelectMixinBase {
242
252
  this.parentFormField = parentFormField;
243
253
  this.scrollStrategyFactory = scrollStrategyFactory;
244
254
  this.localeService = localeService;
255
+ this.isBrowser = inject(Platform).isBrowser;
256
+ this.defaultOptions = inject(KBQ_SELECT_OPTIONS, { optional: true });
245
257
  /** A name for this control that can be used by `kbq-form-field`. */
246
258
  this.controlType = 'select';
247
259
  this.hiddenItems = 0;
@@ -306,6 +318,11 @@ class KbqSelect extends KbqSelectMixinBase {
306
318
  this._hasBackdrop = false;
307
319
  this._required = false;
308
320
  this._multiple = false;
321
+ /**
322
+ * Width of the panel. If set to `auto`, the panel will match the trigger width.
323
+ * If set to null or an empty string, the panel will grow to match the longest option's text.
324
+ */
325
+ this.panelWidth = this.defaultOptions?.panelWidth || null;
309
326
  this._disabled = false;
310
327
  this.panelOpen = false;
311
328
  this._focused = false;
@@ -315,6 +332,8 @@ class KbqSelect extends KbqSelectMixinBase {
315
332
  /** Unique id for this input. */
316
333
  this.uid = `kbq-select-${nextUniqueId++}`;
317
334
  this.visibleChanges = new BehaviorSubject(false);
335
+ /** Overlay panel class. */
336
+ this.overlayPanelClass = 'kbq-select-overlay';
318
337
  this.destroyRef = inject(DestroyRef);
319
338
  /** `View -> model callback called when value changes` */
320
339
  this.onChange = () => { };
@@ -433,6 +452,14 @@ class KbqSelect extends KbqSelectMixinBase {
433
452
  // Note: The computed font-size will be a string pixel value (e.g. "16px").
434
453
  // `parseInt` ignores the trailing 'px' and converts this to a number.
435
454
  this.triggerFontSize = parseInt(getComputedStyle(this.trigger.nativeElement)['font-size']);
455
+ // It's important that we read this as late as possible, because doing so earlier will
456
+ // return a different element since it's based on queries in the form field which may
457
+ // not have run yet. Also this needs to be assigned before we measure the overlay width.
458
+ if (this.parentFormField) {
459
+ this.overlayOrigin = this.parentFormField.getConnectedOverlayOrigin();
460
+ }
461
+ this.overlayWidth = this.getOverlayWidth(this.overlayOrigin);
462
+ this.overlayMinWidth = this.overlayWidth ? '' : this.triggerRect.width;
436
463
  this.panelOpen = true;
437
464
  this.keyManager.withHorizontalOrientation(null);
438
465
  this.highlightCorrectOption();
@@ -579,9 +606,8 @@ class KbqSelect extends KbqSelectMixinBase {
579
606
  option.deselect();
580
607
  }
581
608
  calculateHiddenItems() {
582
- if (this.customTrigger || this.empty || !this.multiple) {
609
+ if (!this.isBrowser || this.customTrigger || this.empty || !this.multiple || this.customMatcher)
583
610
  return;
584
- }
585
611
  const totalItemsWidth = this.getTotalItemsWidthInMatcher();
586
612
  const [totalVisibleItemsWidth, visibleItems] = this.getTotalVisibleItems();
587
613
  this.hiddenItems = this.selected.length - visibleItems;
@@ -658,7 +684,7 @@ class KbqSelect extends KbqSelectMixinBase {
658
684
  return totalItemsWidth;
659
685
  }
660
686
  getItemWidth(element) {
661
- const computedStyle = window.getComputedStyle(element);
687
+ const computedStyle = getComputedStyle(element);
662
688
  const width = parseInt(computedStyle.width);
663
689
  const marginLeft = parseInt(computedStyle.marginLeft);
664
690
  const marginRight = parseInt(computedStyle.marginRight);
@@ -708,7 +734,7 @@ class KbqSelect extends KbqSelectMixinBase {
708
734
  event.preventDefault();
709
735
  this.keyManager.activeItem.selectViaInteraction();
710
736
  }
711
- else if (this._multiple && keyCode === A && event.ctrlKey) {
737
+ else if (this.multiple && keyCode === A && event.ctrlKey) {
712
738
  event.preventDefault();
713
739
  const hasDeselectedOptions = this.options.some((option) => !option.selected);
714
740
  this.options.forEach((option) => {
@@ -723,7 +749,7 @@ class KbqSelect extends KbqSelectMixinBase {
723
749
  else {
724
750
  const previouslyFocusedIndex = this.keyManager.activeItemIndex;
725
751
  this.keyManager.onKeydown(event);
726
- if (this._multiple &&
752
+ if (this.multiple &&
727
753
  isArrowKey &&
728
754
  event.shiftKey &&
729
755
  this.keyManager.activeItem &&
@@ -850,7 +876,7 @@ class KbqSelect extends KbqSelectMixinBase {
850
876
  /** Invoked when an option is clicked. */
851
877
  onSelect(option, isUserInput) {
852
878
  const wasSelected = this.selectionModel.isSelected(option);
853
- if (option.value == null && !this._multiple) {
879
+ if (option.value == null && !this.multiple) {
854
880
  option.deselect();
855
881
  this.selectionModel.clear();
856
882
  this.propagateChanges(option.value);
@@ -939,7 +965,7 @@ class KbqSelect extends KbqSelectMixinBase {
939
965
  this.resetOverlay();
940
966
  const overlayRect = this.getOverlayRect();
941
967
  // Window width without scrollbar
942
- const windowWidth = this.getOverlayWidth();
968
+ const windowWidth = this.scrollStrategy._overlayRef?.hostElement.clientWidth;
943
969
  const isRtl = this.isRtl();
944
970
  const paddingWidth = SELECT_PANEL_PADDING_X * 2;
945
971
  let offsetX = SELECT_PANEL_PADDING_X;
@@ -991,7 +1017,7 @@ class KbqSelect extends KbqSelectMixinBase {
991
1017
  return [offsetX, overlayMaxWidth];
992
1018
  }
993
1019
  resetOverlay() {
994
- this.overlayDir.overlayRef.hostElement.classList.add('kbq-select-overlay');
1020
+ this.overlayDir.overlayRef.hostElement.classList.add(this.overlayPanelClass);
995
1021
  this.overlayDir.offsetX = 0;
996
1022
  this.overlayDir.overlayRef.overlayElement.style.maxWidth = 'unset';
997
1023
  this.overlayDir.overlayRef.updatePosition();
@@ -999,8 +1025,13 @@ class KbqSelect extends KbqSelectMixinBase {
999
1025
  getOverlayRect() {
1000
1026
  return this.overlayDir.overlayRef.overlayElement.getBoundingClientRect();
1001
1027
  }
1002
- getOverlayWidth() {
1003
- return this.scrollStrategy._overlayRef.hostElement.clientWidth;
1028
+ /** Gets how wide the overlay panel should be. */
1029
+ getOverlayWidth(origin) {
1030
+ if (this.panelWidth === 'auto') {
1031
+ const elementRef = origin instanceof CdkOverlayOrigin ? origin.elementRef : origin || this.elementRef;
1032
+ return elementRef.nativeElement.getBoundingClientRect().width;
1033
+ }
1034
+ return this.panelWidth ?? '';
1004
1035
  }
1005
1036
  getTotalVisibleItems() {
1006
1037
  const triggerClone = this.buildTriggerClone();
@@ -1026,10 +1057,10 @@ class KbqSelect extends KbqSelectMixinBase {
1026
1057
  return triggerClone;
1027
1058
  }
1028
1059
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KbqSelect, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i1.ErrorStateMatcher }, { token: i0.ElementRef }, { token: i2.OverlayContainer }, { token: i3.Directionality, optional: true }, { token: i4.NgForm, optional: true }, { token: i4.FormGroupDirective, optional: true }, { token: i5.KbqFormField, optional: true }, { token: i4.NgControl, optional: true, self: true }, { token: KBQ_SELECT_SCROLL_STRATEGY }, { token: KBQ_LOCALE_SERVICE, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
1029
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.6", type: KbqSelect, selector: "kbq-select", inputs: { disabled: "disabled", tabIndex: "tabIndex", hiddenItemsText: "hiddenItemsText", panelClass: "panelClass", backdropClass: "backdropClass", errorStateMatcher: "errorStateMatcher", sortComparator: "sortComparator", hasBackdrop: "hasBackdrop", placeholder: "placeholder", required: "required", multiple: "multiple", compareWith: "compareWith", value: "value", id: "id", hiddenItemsTextFormatter: "hiddenItemsTextFormatter" }, outputs: { openedChange: "openedChange", openedStream: "opened", closedStream: "closed", selectionChange: "selectionChange", valueChange: "valueChange" }, host: { listeners: { "click": "toggle()", "keydown": "handleKeydown($event)", "focus": "onFocus()", "blur": "onBlur()", "window:resize": "calculateHiddenItems()" }, properties: { "attr.tabindex": "tabIndex", "attr.disabled": "disabled || null", "class.kbq-disabled": "disabled", "class.kbq-invalid": "errorState" }, classAttribute: "kbq-select" }, providers: [
1060
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.6", type: KbqSelect, selector: "kbq-select", inputs: { disabled: "disabled", tabIndex: "tabIndex", hiddenItemsText: "hiddenItemsText", panelClass: "panelClass", backdropClass: "backdropClass", errorStateMatcher: "errorStateMatcher", sortComparator: "sortComparator", hasBackdrop: "hasBackdrop", placeholder: "placeholder", required: "required", multiple: ["multiple", "multiple", booleanAttribute], compareWith: "compareWith", panelWidth: "panelWidth", value: "value", id: "id", hiddenItemsTextFormatter: "hiddenItemsTextFormatter" }, outputs: { openedChange: "openedChange", openedStream: "opened", closedStream: "closed", selectionChange: "selectionChange", valueChange: "valueChange" }, host: { listeners: { "click": "toggle()", "keydown": "handleKeydown($event)", "focus": "onFocus()", "blur": "onBlur()", "window:resize": "calculateHiddenItems()" }, properties: { "attr.tabindex": "tabIndex", "attr.disabled": "disabled || null", "class.kbq-disabled": "disabled", "class.kbq-invalid": "errorState" }, classAttribute: "kbq-select" }, providers: [
1030
1061
  { provide: KbqFormFieldControl, useExisting: KbqSelect },
1031
1062
  { provide: KBQ_OPTION_PARENT_COMPONENT, useExisting: KbqSelect }
1032
- ], queries: [{ propertyName: "footer", first: true, predicate: KbqSelectFooter, descendants: true, read: ElementRef }, { propertyName: "cdkVirtualForOf", first: true, predicate: CdkVirtualForOf, descendants: true }, { propertyName: "customTrigger", first: true, predicate: KbqSelectTrigger, descendants: true }, { propertyName: "customMatcher", first: true, predicate: KbqSelectMatcher, descendants: true }, { propertyName: "customTagTemplateRef", first: true, predicate: ["kbqSelectTagContent"], descendants: true, read: TemplateRef }, { propertyName: "cleaner", first: true, predicate: ["kbqSelectCleaner"], descendants: true, static: true }, { propertyName: "search", first: true, predicate: KbqSelectSearch, descendants: true }, { propertyName: "options", predicate: KbqOption, descendants: true }, { propertyName: "optionGroups", predicate: KbqOptgroup }], viewQueries: [{ propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true }, { propertyName: "panel", first: true, predicate: ["panel"], descendants: true }, { propertyName: "optionsContainer", first: true, predicate: ["optionsContainer"], descendants: true }, { propertyName: "overlayDir", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "tags", predicate: KbqTag, descendants: true }], exportAs: ["kbqSelect"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div\n #origin=\"cdkOverlayOrigin\"\n #trigger\n cdk-overlay-origin\n class=\"kbq-select__trigger\"\n [class.kbq-select__trigger_empty]=\"empty\"\n [class.kbq-select__trigger_multiple]=\"multiple\"\n [class.kbq-select__trigger_single]=\"!multiple\"\n>\n <select class=\"cdk-visually-hidden\" [id]=\"id\"></select>\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 }\n @if (!empty) {\n <span>\n @if (!!customTrigger) {\n <ng-content select=\"kbq-select-trigger, [kbq-select-trigger]\" />\n } @else {\n <div class=\"kbq-select__match-container\">\n @if (multiple) {\n <div class=\"kbq-select__match-list\">\n @if (!customTagTemplateRef) {\n @for (option of triggerValues; track option) {\n <kbq-tag\n [class.kbq-error]=\"errorState\"\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)=\"onRemoveMatcherItem(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]=\"$any(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 <div\n class=\"kbq-select__match-hidden-text\"\n [style.display]=\"hiddenItems > 0 ? 'block' : 'none'\"\n >\n {{ hiddenItemsTextFormatter(hiddenItemsText, hiddenItems) }}\n </div>\n </div>\n }\n </span>\n }\n\n @if (canShowCleaner) {\n <div class=\"kbq-select__cleaner\" (click)=\"clearValue($event)\">\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]=\"'contrast-fade'\"></i>\n </div>\n </div>\n }\n</div>\n\n<ng-template\n cdk-connected-overlay\n cdkConnectedOverlayLockPosition\n [cdkConnectedOverlayBackdropClass]=\"backdropClass\"\n [cdkConnectedOverlayHasBackdrop]=\"hasBackdrop\"\n [cdkConnectedOverlayMinWidth]=\"triggerRect?.width!\"\n [cdkConnectedOverlayOffsetY]=\"offsetY\"\n [cdkConnectedOverlayOpen]=\"panelOpen\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayPanelClass]=\"'kbq-select-overlay'\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n (attach)=\"onAttached()\"\n (backdropClick)=\"close()\"\n (detach)=\"close()\"\n>\n <div\n #panel\n class=\"kbq-select__panel {{ getPanelTheme() }}\"\n [ngClass]=\"panelClass\"\n [style.font-size.px]=\"triggerFontSize\"\n [style.transformOrigin]=\"transformOrigin\"\n (click)=\"handleClick($event)\"\n (keydown)=\"handleKeydown($event)\"\n >\n @if (search) {\n <div class=\"kbq-select__search-container\">\n <ng-content select=\"[kbqSelectSearch]\" />\n </div>\n }\n\n <div\n #optionsContainer\n class=\"kbq-select__content kbq-scrollbar\"\n (@fadeInContent.done)=\"panelDoneAnimatingStream.next($event.toState)\"\n [@fadeInContent]=\"'showing'\"\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 <ng-content />\n </div>\n\n <ng-content select=\"kbq-select-footer,[kbq-select-footer]\" />\n </div>\n</ng-template>\n", styles: [".kbq-select{box-sizing:border-box;display:inline-block;width:100%;outline:none}.kbq-select .kbq-select__matcher{display:flex;align-items:center;width:100%;overflow:hidden;white-space:nowrap}.kbq-select .kbq-select__matcher>span{flex:1;overflow:hidden}.kbq-select .kbq-select__trigger{display:flex;box-sizing:border-box;position:relative;cursor:pointer;height:calc(var(--kbq-form-field-size-height, var(--kbq-size-3xl)) - var(--kbq-size-border-width) * 2)}.kbq-select .kbq-select__trigger.kbq-select__trigger_single .kbq-select__matcher,.kbq-select .kbq-select__trigger.kbq-select__trigger_multiple.kbq-select__trigger_empty .kbq-select__matcher{padding:calc(var(--kbq-select-size-single-padding-vertical, var(--kbq-size-xs)) - var(--kbq-size-border-width)) calc(var(--kbq-select-size-single-padding-right, var(--kbq-size-xxs)) - var(--kbq-size-border-width)) calc(var(--kbq-select-size-single-padding-vertical, var(--kbq-size-xs)) - var(--kbq-size-border-width)) calc(var(--kbq-select-size-single-padding-left, var(--kbq-size-m)) - var(--kbq-size-border-width))}.kbq-select .kbq-select__trigger.kbq-select__trigger_multiple:not(.kbq-select__trigger_empty) .kbq-select__matcher{padding:calc(var(--kbq-select-size-multiple-padding-vertical, var(--kbq-size-xxs)) - var(--kbq-size-border-width)) calc(var(--kbq-select-size-multiple-padding-right, var(--kbq-size-xxs)) - var(--kbq-size-border-width)) calc(var(--kbq-select-size-multiple-padding-vertical, var(--kbq-size-xxs)) - var(--kbq-size-border-width)) calc(var(--kbq-select-size-multiple-padding-left, var(--kbq-size-xxs)) - var(--kbq-size-border-width))}.kbq-select .kbq-select__trigger.kbq-select__trigger_multiple:not(.kbq-select__trigger_empty) .kbq-select__matcher .kbq-select__match-container{display:flex}.kbq-select .kbq-select__trigger.kbq-select__trigger_multiple:not(.kbq-select__trigger_empty) .kbq-select__matcher .kbq-select__match-list{display:flex;flex-wrap:wrap;overflow:hidden;height:calc(var(--kbq-form-field-size-height, var(--kbq-size-3xl)) - var(--kbq-select-size-multiple-padding-vertical, var(--kbq-size-xxs)) * 2);max-height:calc(var(--kbq-form-field-size-height, var(--kbq-size-3xl)) - var(--kbq-select-size-multiple-padding-vertical, var(--kbq-size-xxs)) * 2);gap:var(--kbq-select-size-multiple-content-gap, var(--kbq-size-xxs));margin-right:var(--kbq-select-size-multiple-content-gap, var(--kbq-size-xxs))}.kbq-select .kbq-select__match-container{width:100%;text-overflow:ellipsis;overflow:hidden}.kbq-select .kbq-select__match-container .kbq-select__match-hidden-text{flex:0 0 70px;align-self:center;padding-left:4px;padding-right:var(--kbq-select-size-multiple-content-gap, var(--kbq-size-xxs));text-align:right}.kbq-select .kbq-select__arrow-wrapper{display:flex;align-self:center;padding:4px}.kbq-form-field-appearance-fill .kbq-select .kbq-select__arrow-wrapper,.kbq-form-field-appearance-standard .kbq-select .kbq-select__arrow-wrapper{transform:translateY(-50%)}.kbq-form-field-appearance-outline .kbq-select .kbq-select__arrow-wrapper{transform:translateY(-25%)}.kbq-disabled.kbq-select .kbq-select__trigger{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.kbq-select__panel{min-width:100%;overflow:hidden;border-radius:var(--kbq-select-panel-size-border-radius, var(--kbq-size-border-radius))}.kbq-select__panel .kbq-optgroup-label,.kbq-select__panel .kbq-option{font-size:inherit}.kbq-select__panel .kbq-select__no-options-message{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;position:relative;max-width:100%;height:var(--kbq-option-size-height, var(--kbq-size-3xl));cursor:default;outline:none;padding-left:var(--kbq-option-size-horizontal-padding, var(--kbq-size-m));padding-right:var(--kbq-option-size-horizontal-padding, var(--kbq-size-m));border:var(--kbq-option-size-border-width, var(--kbq-size-3xs)) solid transparent}.kbq-select__panel .kbq-select__search-container{border-bottom-width:1px;border-bottom-style:solid}.kbq-select__content{max-height:var(--kbq-select-panel-size-max-height, 256px);padding:4px 0;overflow:hidden auto}.kbq-select__panel .kbq-select__footer{display:flex;align-items:center;box-sizing:border-box;min-height:40px;border-top-width:1px;border-top-style:solid;padding:var(--kbq-size-xxs) var(--kbq-size-m)}.kbq-select__content:not(:has(>.kbq-select__no-options-message)) .cdk-virtual-scroll-viewport{min-height:var(--kbq-select-panel-size-max-height, 256px);max-height:var(--kbq-select-panel-size-max-height, 256px)}.kbq-select__content:not(:has(>.kbq-select__no-options-message)) .cdk-virtual-scroll-viewport.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper{max-width:100%}.kbq-form-field-type-select:not(.kbq-disabled) .kbq-form-field-flex{cursor:pointer}.kbq-select{color:var(--kbq-foreground-contrast)}.kbq-select.ng-invalid{color:var(--kbq-error-default)}.kbq-select.kbq-disabled{color:var(--kbq-states-foreground-disabled)}.kbq-select__placeholder{text-overflow:ellipsis;color:var(--kbq-states-foreground-disabled)}.kbq-select__panel{box-shadow:var(--kbq-select-panel-dropdown-shadow);background:var(--kbq-select-panel-dropdown-background)}.kbq-select__panel .kbq-select__footer{border-color:var(--kbq-divider-color, var(--kbq-line-contrast-less))}.kbq-select__search-container{border-bottom-color:var(--kbq-divider-color, var(--kbq-line-contrast-less))}.kbq-select__no-options-message{color:var(--kbq-foreground-contrast-secondary)}.kbq-select,.kbq-select__panel{font-size:var(--kbq-typography-text-normal-font-size);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}\n", ".kbq-select,.kbq-select__panel{--kbq-select-size-single-padding-left: var(--kbq-size-m);--kbq-select-size-single-padding-right: var(--kbq-size-xxs);--kbq-select-size-single-padding-vertical: var(--kbq-size-xs);--kbq-select-size-single-content-gap: var(--kbq-size-xxs);--kbq-select-size-multiple-padding-left: var(--kbq-size-xxs);--kbq-select-size-multiple-padding-right: var(--kbq-size-xxs);--kbq-select-size-multiple-padding-vertical: var(--kbq-size-xxs);--kbq-select-size-multiple-content-gap: var(--kbq-size-xxs);--kbq-select-panel-size-border-radius: var(--kbq-size-border-radius);--kbq-select-panel-size-max-height: 256px}:where(.kbq-light,.theme-light,.kbq-theme-light){--kbq-select-panel-dropdown-background: var(--kbq-background-card);--kbq-select-panel-dropdown-shadow: var(--kbq-shadow-popup)}:where(.kbq-dark,.theme-dark,.kbq-theme-dark){--kbq-select-panel-dropdown-background: var(--kbq-background-card);--kbq-select-panel-dropdown-shadow: var(--kbq-shadow-popup)}\n"], dependencies: [{ kind: "directive", type: i2.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i2.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: i6.KbqIcon, selector: "[kbq-icon]", inputs: ["color", "small", "autoColor"] }, { kind: "component", type: i7.KbqTag, selector: "kbq-tag, [kbq-tag], kbq-basic-tag, [kbq-basic-tag]", inputs: ["color", "selected", "value", "selectable", "removable", "tabindex", "disabled"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["kbqTag"] }, { kind: "directive", type: i7.KbqTagRemove, selector: "[kbqTagRemove]" }, { kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], animations: [
1063
+ ], queries: [{ propertyName: "footer", first: true, predicate: KbqSelectFooter, descendants: true, read: ElementRef }, { propertyName: "cdkVirtualForOf", first: true, predicate: CdkVirtualForOf, descendants: true }, { propertyName: "customTrigger", first: true, predicate: KbqSelectTrigger, descendants: true }, { propertyName: "customMatcher", first: true, predicate: KbqSelectMatcher, descendants: true }, { propertyName: "customTagTemplateRef", first: true, predicate: ["kbqSelectTagContent"], descendants: true, read: TemplateRef }, { propertyName: "cleaner", first: true, predicate: ["kbqSelectCleaner"], descendants: true, static: true }, { propertyName: "search", first: true, predicate: KbqSelectSearch, descendants: true }, { propertyName: "options", predicate: KbqOption, descendants: true }, { propertyName: "optionGroups", predicate: KbqOptgroup }], viewQueries: [{ propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true }, { propertyName: "panel", first: true, predicate: ["panel"], descendants: true }, { propertyName: "optionsContainer", first: true, predicate: ["optionsContainer"], descendants: true }, { propertyName: "overlayDir", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "tags", predicate: KbqTag, descendants: true }], exportAs: ["kbqSelect"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<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_multiple]=\"multiple\"\n [class.kbq-select__trigger_single]=\"!multiple\"\n>\n <select class=\"cdk-visually-hidden\" [id]=\"id\"></select>\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 }\n @if (!empty) {\n <span>\n @if (!!customTrigger) {\n <ng-content select=\"kbq-select-trigger, [kbq-select-trigger]\" />\n } @else {\n <div class=\"kbq-select__match-container\">\n @if (multiple) {\n <div class=\"kbq-select__match-list\">\n @if (!customTagTemplateRef) {\n @for (option of triggerValues; track option) {\n <kbq-tag\n [class.kbq-error]=\"errorState\"\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)=\"onRemoveMatcherItem(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]=\"$any(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 <div\n class=\"kbq-select__match-hidden-text\"\n [style.display]=\"hiddenItems > 0 ? 'block' : 'none'\"\n >\n {{ hiddenItemsTextFormatter(hiddenItemsText, hiddenItems) }}\n </div>\n </div>\n }\n </span>\n }\n\n @if (canShowCleaner) {\n <div class=\"kbq-select__cleaner\" (click)=\"clearValue($event)\">\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]=\"'contrast-fade'\"></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 (detach)=\"close()\"\n>\n <div\n #panel\n class=\"kbq-select__panel {{ getPanelTheme() }}\"\n [ngClass]=\"panelClass\"\n [style.font-size.px]=\"triggerFontSize\"\n [style.transformOrigin]=\"transformOrigin\"\n (click)=\"handleClick($event)\"\n (keydown)=\"handleKeydown($event)\"\n >\n @if (search) {\n <div class=\"kbq-select__search-container\">\n <ng-content select=\"[kbqSelectSearch]\" />\n </div>\n }\n\n <div\n #optionsContainer\n class=\"kbq-select__content kbq-scrollbar\"\n (@fadeInContent.done)=\"panelDoneAnimatingStream.next($event.toState)\"\n [@fadeInContent]=\"'showing'\"\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 <ng-content />\n </div>\n\n <ng-content select=\"kbq-select-footer,[kbq-select-footer]\" />\n </div>\n</ng-template>\n", styles: [".kbq-select{box-sizing:border-box;display:inline-block;width:100%;outline:none}.kbq-select .kbq-select__matcher{display:flex;align-items:center;width:100%;overflow:hidden;white-space:nowrap}.kbq-select .kbq-select__matcher>span{flex:1;overflow:hidden}.kbq-select .kbq-select__trigger{display:flex;box-sizing:border-box;position:relative;cursor:pointer;height:calc(var(--kbq-form-field-size-height, var(--kbq-size-3xl)) - var(--kbq-size-border-width) * 2)}.kbq-select .kbq-select__trigger.kbq-select__trigger_single .kbq-select__matcher,.kbq-select .kbq-select__trigger.kbq-select__trigger_multiple.kbq-select__trigger_empty .kbq-select__matcher{padding:calc(var(--kbq-select-size-single-padding-vertical, var(--kbq-size-xs)) - var(--kbq-size-border-width)) calc(var(--kbq-select-size-single-padding-right, var(--kbq-size-xxs)) - var(--kbq-size-border-width)) calc(var(--kbq-select-size-single-padding-vertical, var(--kbq-size-xs)) - var(--kbq-size-border-width)) calc(var(--kbq-select-size-single-padding-left, var(--kbq-size-m)) - var(--kbq-size-border-width))}.kbq-select .kbq-select__trigger.kbq-select__trigger_multiple:not(.kbq-select__trigger_empty) .kbq-select__matcher{padding:calc(var(--kbq-select-size-multiple-padding-vertical, var(--kbq-size-xxs)) - var(--kbq-size-border-width)) calc(var(--kbq-select-size-multiple-padding-right, var(--kbq-size-xxs)) - var(--kbq-size-border-width)) calc(var(--kbq-select-size-multiple-padding-vertical, var(--kbq-size-xxs)) - var(--kbq-size-border-width)) calc(var(--kbq-select-size-multiple-padding-left, var(--kbq-size-xxs)) - var(--kbq-size-border-width))}.kbq-select .kbq-select__trigger.kbq-select__trigger_multiple:not(.kbq-select__trigger_empty) .kbq-select__matcher .kbq-select__match-container{display:flex}.kbq-select .kbq-select__trigger.kbq-select__trigger_multiple:not(.kbq-select__trigger_empty) .kbq-select__matcher .kbq-select__match-list{display:flex;flex-wrap:wrap;overflow:hidden;height:calc(var(--kbq-form-field-size-height, var(--kbq-size-3xl)) - var(--kbq-select-size-multiple-padding-vertical, var(--kbq-size-xxs)) * 2);max-height:calc(var(--kbq-form-field-size-height, var(--kbq-size-3xl)) - var(--kbq-select-size-multiple-padding-vertical, var(--kbq-size-xxs)) * 2);gap:var(--kbq-select-size-multiple-content-gap, var(--kbq-size-xxs));margin-right:var(--kbq-select-size-multiple-content-gap, var(--kbq-size-xxs))}.kbq-select .kbq-select__match-container{width:100%;text-overflow:ellipsis;overflow:hidden}.kbq-select .kbq-select__match-container .kbq-select__match-hidden-text{flex:0 0 70px;align-self:center;padding-left:4px;padding-right:var(--kbq-select-size-multiple-content-gap, var(--kbq-size-xxs));text-align:right}.kbq-select .kbq-select__arrow-wrapper{display:flex;align-self:center;padding:4px}.kbq-form-field-appearance-fill .kbq-select .kbq-select__arrow-wrapper,.kbq-form-field-appearance-standard .kbq-select .kbq-select__arrow-wrapper{transform:translateY(-50%)}.kbq-form-field-appearance-outline .kbq-select .kbq-select__arrow-wrapper{transform:translateY(-25%)}.kbq-disabled.kbq-select .kbq-select__trigger{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.kbq-select__panel{min-width:100%;overflow:hidden;border-radius:var(--kbq-select-panel-size-border-radius, var(--kbq-size-border-radius))}.kbq-select__panel .kbq-optgroup-label,.kbq-select__panel .kbq-option{font-size:inherit}.kbq-select__panel .kbq-select__no-options-message{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;position:relative;max-width:100%;height:var(--kbq-option-size-height, var(--kbq-size-3xl));cursor:default;outline:none;padding-left:var(--kbq-option-size-horizontal-padding, var(--kbq-size-m));padding-right:var(--kbq-option-size-horizontal-padding, var(--kbq-size-m));border:var(--kbq-option-size-border-width, var(--kbq-size-3xs)) solid transparent}.kbq-select__panel .kbq-select__search-container{padding:var(--kbq-size-xxs);border-bottom-width:1px;border-bottom-style:solid}.kbq-select__content{max-height:var(--kbq-select-panel-size-max-height, 256px);padding:var(--kbq-size-xxs);overflow:hidden auto}.kbq-select__panel .kbq-select__footer{display:flex;align-items:center;box-sizing:border-box;min-height:40px;border-top-width:1px;border-top-style:solid;padding:var(--kbq-size-xxs) var(--kbq-size-l)}.kbq-select__content .kbq-option{position:relative}.kbq-select__content .kbq-option:before,.kbq-select__content .kbq-option:after{position:absolute;content:\"\";width:var(--kbq-size-xxs);height:calc(100% + var(--kbq-size-3xs) * 2)}.kbq-select__content .kbq-option:before{right:calc(100% + var(--kbq-size-3xs))}.kbq-select__content .kbq-option:after{left:calc(100% + var(--kbq-size-3xs))}.kbq-select__content:not(:has(>.kbq-select__no-options-message)) .cdk-virtual-scroll-viewport{min-height:var(--kbq-select-panel-size-max-height, 256px);max-height:var(--kbq-select-panel-size-max-height, 256px)}.kbq-select__content:not(:has(>.kbq-select__no-options-message)) .cdk-virtual-scroll-viewport.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper{max-width:100%}.kbq-form-field-type-select:not(.kbq-disabled) .kbq-form-field-flex{cursor:pointer}.kbq-select{color:var(--kbq-foreground-contrast)}.kbq-select.ng-invalid{color:var(--kbq-error-default)}.kbq-select.kbq-disabled{color:var(--kbq-states-foreground-disabled)}.kbq-select__placeholder{text-overflow:ellipsis;color:var(--kbq-states-foreground-disabled)}.kbq-select__panel{box-shadow:var(--kbq-select-panel-dropdown-shadow);background:var(--kbq-select-panel-dropdown-background)}.kbq-select__panel .kbq-select__footer{border-color:var(--kbq-divider-color, var(--kbq-line-contrast-less))}.kbq-select__search-container{border-bottom-color:var(--kbq-divider-color, var(--kbq-line-contrast-less))}.kbq-select__no-options-message{color:var(--kbq-foreground-contrast-secondary)}.kbq-select,.kbq-select__panel{font-size:var(--kbq-typography-text-normal-font-size);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}\n", ".kbq-select,.kbq-select__panel{--kbq-select-size-single-padding-left: var(--kbq-size-m);--kbq-select-size-single-padding-right: var(--kbq-size-xxs);--kbq-select-size-single-padding-vertical: var(--kbq-size-xs);--kbq-select-size-single-content-gap: var(--kbq-size-xxs);--kbq-select-size-multiple-padding-left: var(--kbq-size-xxs);--kbq-select-size-multiple-padding-right: var(--kbq-size-xxs);--kbq-select-size-multiple-padding-vertical: var(--kbq-size-xxs);--kbq-select-size-multiple-content-gap: var(--kbq-size-xxs);--kbq-select-panel-size-border-radius: var(--kbq-size-border-radius);--kbq-select-panel-size-max-height: 256px;--kbq-select-panel-dropdown-background: var(--kbq-background-card);--kbq-select-panel-dropdown-shadow: var(--kbq-shadow-popup)}\n"], dependencies: [{ kind: "directive", type: i2.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i2.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: i6.KbqIcon, selector: "[kbq-icon]", inputs: ["color", "small", "autoColor"] }, { kind: "component", type: i7.KbqTag, selector: "kbq-tag, [kbq-tag], kbq-basic-tag, [kbq-basic-tag]", inputs: ["color", "selected", "value", "selectable", "removable", "tabindex", "disabled"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["kbqTag"] }, { kind: "directive", type: i7.KbqTagRemove, selector: "[kbqTagRemove]" }, { kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], animations: [
1033
1064
  kbqSelectAnimations.transformPanel,
1034
1065
  kbqSelectAnimations.fadeInContent
1035
1066
  ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
@@ -1053,7 +1084,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImpor
1053
1084
  ], providers: [
1054
1085
  { provide: KbqFormFieldControl, useExisting: KbqSelect },
1055
1086
  { provide: KBQ_OPTION_PARENT_COMPONENT, useExisting: KbqSelect }
1056
- ], template: "<div\n #origin=\"cdkOverlayOrigin\"\n #trigger\n cdk-overlay-origin\n class=\"kbq-select__trigger\"\n [class.kbq-select__trigger_empty]=\"empty\"\n [class.kbq-select__trigger_multiple]=\"multiple\"\n [class.kbq-select__trigger_single]=\"!multiple\"\n>\n <select class=\"cdk-visually-hidden\" [id]=\"id\"></select>\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 }\n @if (!empty) {\n <span>\n @if (!!customTrigger) {\n <ng-content select=\"kbq-select-trigger, [kbq-select-trigger]\" />\n } @else {\n <div class=\"kbq-select__match-container\">\n @if (multiple) {\n <div class=\"kbq-select__match-list\">\n @if (!customTagTemplateRef) {\n @for (option of triggerValues; track option) {\n <kbq-tag\n [class.kbq-error]=\"errorState\"\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)=\"onRemoveMatcherItem(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]=\"$any(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 <div\n class=\"kbq-select__match-hidden-text\"\n [style.display]=\"hiddenItems > 0 ? 'block' : 'none'\"\n >\n {{ hiddenItemsTextFormatter(hiddenItemsText, hiddenItems) }}\n </div>\n </div>\n }\n </span>\n }\n\n @if (canShowCleaner) {\n <div class=\"kbq-select__cleaner\" (click)=\"clearValue($event)\">\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]=\"'contrast-fade'\"></i>\n </div>\n </div>\n }\n</div>\n\n<ng-template\n cdk-connected-overlay\n cdkConnectedOverlayLockPosition\n [cdkConnectedOverlayBackdropClass]=\"backdropClass\"\n [cdkConnectedOverlayHasBackdrop]=\"hasBackdrop\"\n [cdkConnectedOverlayMinWidth]=\"triggerRect?.width!\"\n [cdkConnectedOverlayOffsetY]=\"offsetY\"\n [cdkConnectedOverlayOpen]=\"panelOpen\"\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayPanelClass]=\"'kbq-select-overlay'\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n (attach)=\"onAttached()\"\n (backdropClick)=\"close()\"\n (detach)=\"close()\"\n>\n <div\n #panel\n class=\"kbq-select__panel {{ getPanelTheme() }}\"\n [ngClass]=\"panelClass\"\n [style.font-size.px]=\"triggerFontSize\"\n [style.transformOrigin]=\"transformOrigin\"\n (click)=\"handleClick($event)\"\n (keydown)=\"handleKeydown($event)\"\n >\n @if (search) {\n <div class=\"kbq-select__search-container\">\n <ng-content select=\"[kbqSelectSearch]\" />\n </div>\n }\n\n <div\n #optionsContainer\n class=\"kbq-select__content kbq-scrollbar\"\n (@fadeInContent.done)=\"panelDoneAnimatingStream.next($event.toState)\"\n [@fadeInContent]=\"'showing'\"\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 <ng-content />\n </div>\n\n <ng-content select=\"kbq-select-footer,[kbq-select-footer]\" />\n </div>\n</ng-template>\n", styles: [".kbq-select{box-sizing:border-box;display:inline-block;width:100%;outline:none}.kbq-select .kbq-select__matcher{display:flex;align-items:center;width:100%;overflow:hidden;white-space:nowrap}.kbq-select .kbq-select__matcher>span{flex:1;overflow:hidden}.kbq-select .kbq-select__trigger{display:flex;box-sizing:border-box;position:relative;cursor:pointer;height:calc(var(--kbq-form-field-size-height, var(--kbq-size-3xl)) - var(--kbq-size-border-width) * 2)}.kbq-select .kbq-select__trigger.kbq-select__trigger_single .kbq-select__matcher,.kbq-select .kbq-select__trigger.kbq-select__trigger_multiple.kbq-select__trigger_empty .kbq-select__matcher{padding:calc(var(--kbq-select-size-single-padding-vertical, var(--kbq-size-xs)) - var(--kbq-size-border-width)) calc(var(--kbq-select-size-single-padding-right, var(--kbq-size-xxs)) - var(--kbq-size-border-width)) calc(var(--kbq-select-size-single-padding-vertical, var(--kbq-size-xs)) - var(--kbq-size-border-width)) calc(var(--kbq-select-size-single-padding-left, var(--kbq-size-m)) - var(--kbq-size-border-width))}.kbq-select .kbq-select__trigger.kbq-select__trigger_multiple:not(.kbq-select__trigger_empty) .kbq-select__matcher{padding:calc(var(--kbq-select-size-multiple-padding-vertical, var(--kbq-size-xxs)) - var(--kbq-size-border-width)) calc(var(--kbq-select-size-multiple-padding-right, var(--kbq-size-xxs)) - var(--kbq-size-border-width)) calc(var(--kbq-select-size-multiple-padding-vertical, var(--kbq-size-xxs)) - var(--kbq-size-border-width)) calc(var(--kbq-select-size-multiple-padding-left, var(--kbq-size-xxs)) - var(--kbq-size-border-width))}.kbq-select .kbq-select__trigger.kbq-select__trigger_multiple:not(.kbq-select__trigger_empty) .kbq-select__matcher .kbq-select__match-container{display:flex}.kbq-select .kbq-select__trigger.kbq-select__trigger_multiple:not(.kbq-select__trigger_empty) .kbq-select__matcher .kbq-select__match-list{display:flex;flex-wrap:wrap;overflow:hidden;height:calc(var(--kbq-form-field-size-height, var(--kbq-size-3xl)) - var(--kbq-select-size-multiple-padding-vertical, var(--kbq-size-xxs)) * 2);max-height:calc(var(--kbq-form-field-size-height, var(--kbq-size-3xl)) - var(--kbq-select-size-multiple-padding-vertical, var(--kbq-size-xxs)) * 2);gap:var(--kbq-select-size-multiple-content-gap, var(--kbq-size-xxs));margin-right:var(--kbq-select-size-multiple-content-gap, var(--kbq-size-xxs))}.kbq-select .kbq-select__match-container{width:100%;text-overflow:ellipsis;overflow:hidden}.kbq-select .kbq-select__match-container .kbq-select__match-hidden-text{flex:0 0 70px;align-self:center;padding-left:4px;padding-right:var(--kbq-select-size-multiple-content-gap, var(--kbq-size-xxs));text-align:right}.kbq-select .kbq-select__arrow-wrapper{display:flex;align-self:center;padding:4px}.kbq-form-field-appearance-fill .kbq-select .kbq-select__arrow-wrapper,.kbq-form-field-appearance-standard .kbq-select .kbq-select__arrow-wrapper{transform:translateY(-50%)}.kbq-form-field-appearance-outline .kbq-select .kbq-select__arrow-wrapper{transform:translateY(-25%)}.kbq-disabled.kbq-select .kbq-select__trigger{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.kbq-select__panel{min-width:100%;overflow:hidden;border-radius:var(--kbq-select-panel-size-border-radius, var(--kbq-size-border-radius))}.kbq-select__panel .kbq-optgroup-label,.kbq-select__panel .kbq-option{font-size:inherit}.kbq-select__panel .kbq-select__no-options-message{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;position:relative;max-width:100%;height:var(--kbq-option-size-height, var(--kbq-size-3xl));cursor:default;outline:none;padding-left:var(--kbq-option-size-horizontal-padding, var(--kbq-size-m));padding-right:var(--kbq-option-size-horizontal-padding, var(--kbq-size-m));border:var(--kbq-option-size-border-width, var(--kbq-size-3xs)) solid transparent}.kbq-select__panel .kbq-select__search-container{border-bottom-width:1px;border-bottom-style:solid}.kbq-select__content{max-height:var(--kbq-select-panel-size-max-height, 256px);padding:4px 0;overflow:hidden auto}.kbq-select__panel .kbq-select__footer{display:flex;align-items:center;box-sizing:border-box;min-height:40px;border-top-width:1px;border-top-style:solid;padding:var(--kbq-size-xxs) var(--kbq-size-m)}.kbq-select__content:not(:has(>.kbq-select__no-options-message)) .cdk-virtual-scroll-viewport{min-height:var(--kbq-select-panel-size-max-height, 256px);max-height:var(--kbq-select-panel-size-max-height, 256px)}.kbq-select__content:not(:has(>.kbq-select__no-options-message)) .cdk-virtual-scroll-viewport.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper{max-width:100%}.kbq-form-field-type-select:not(.kbq-disabled) .kbq-form-field-flex{cursor:pointer}.kbq-select{color:var(--kbq-foreground-contrast)}.kbq-select.ng-invalid{color:var(--kbq-error-default)}.kbq-select.kbq-disabled{color:var(--kbq-states-foreground-disabled)}.kbq-select__placeholder{text-overflow:ellipsis;color:var(--kbq-states-foreground-disabled)}.kbq-select__panel{box-shadow:var(--kbq-select-panel-dropdown-shadow);background:var(--kbq-select-panel-dropdown-background)}.kbq-select__panel .kbq-select__footer{border-color:var(--kbq-divider-color, var(--kbq-line-contrast-less))}.kbq-select__search-container{border-bottom-color:var(--kbq-divider-color, var(--kbq-line-contrast-less))}.kbq-select__no-options-message{color:var(--kbq-foreground-contrast-secondary)}.kbq-select,.kbq-select__panel{font-size:var(--kbq-typography-text-normal-font-size);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}\n", ".kbq-select,.kbq-select__panel{--kbq-select-size-single-padding-left: var(--kbq-size-m);--kbq-select-size-single-padding-right: var(--kbq-size-xxs);--kbq-select-size-single-padding-vertical: var(--kbq-size-xs);--kbq-select-size-single-content-gap: var(--kbq-size-xxs);--kbq-select-size-multiple-padding-left: var(--kbq-size-xxs);--kbq-select-size-multiple-padding-right: var(--kbq-size-xxs);--kbq-select-size-multiple-padding-vertical: var(--kbq-size-xxs);--kbq-select-size-multiple-content-gap: var(--kbq-size-xxs);--kbq-select-panel-size-border-radius: var(--kbq-size-border-radius);--kbq-select-panel-size-max-height: 256px}:where(.kbq-light,.theme-light,.kbq-theme-light){--kbq-select-panel-dropdown-background: var(--kbq-background-card);--kbq-select-panel-dropdown-shadow: var(--kbq-shadow-popup)}:where(.kbq-dark,.theme-dark,.kbq-theme-dark){--kbq-select-panel-dropdown-background: var(--kbq-background-card);--kbq-select-panel-dropdown-shadow: var(--kbq-shadow-popup)}\n"] }]
1087
+ ], template: "<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_multiple]=\"multiple\"\n [class.kbq-select__trigger_single]=\"!multiple\"\n>\n <select class=\"cdk-visually-hidden\" [id]=\"id\"></select>\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 }\n @if (!empty) {\n <span>\n @if (!!customTrigger) {\n <ng-content select=\"kbq-select-trigger, [kbq-select-trigger]\" />\n } @else {\n <div class=\"kbq-select__match-container\">\n @if (multiple) {\n <div class=\"kbq-select__match-list\">\n @if (!customTagTemplateRef) {\n @for (option of triggerValues; track option) {\n <kbq-tag\n [class.kbq-error]=\"errorState\"\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)=\"onRemoveMatcherItem(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]=\"$any(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 <div\n class=\"kbq-select__match-hidden-text\"\n [style.display]=\"hiddenItems > 0 ? 'block' : 'none'\"\n >\n {{ hiddenItemsTextFormatter(hiddenItemsText, hiddenItems) }}\n </div>\n </div>\n }\n </span>\n }\n\n @if (canShowCleaner) {\n <div class=\"kbq-select__cleaner\" (click)=\"clearValue($event)\">\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]=\"'contrast-fade'\"></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 (detach)=\"close()\"\n>\n <div\n #panel\n class=\"kbq-select__panel {{ getPanelTheme() }}\"\n [ngClass]=\"panelClass\"\n [style.font-size.px]=\"triggerFontSize\"\n [style.transformOrigin]=\"transformOrigin\"\n (click)=\"handleClick($event)\"\n (keydown)=\"handleKeydown($event)\"\n >\n @if (search) {\n <div class=\"kbq-select__search-container\">\n <ng-content select=\"[kbqSelectSearch]\" />\n </div>\n }\n\n <div\n #optionsContainer\n class=\"kbq-select__content kbq-scrollbar\"\n (@fadeInContent.done)=\"panelDoneAnimatingStream.next($event.toState)\"\n [@fadeInContent]=\"'showing'\"\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 <ng-content />\n </div>\n\n <ng-content select=\"kbq-select-footer,[kbq-select-footer]\" />\n </div>\n</ng-template>\n", styles: [".kbq-select{box-sizing:border-box;display:inline-block;width:100%;outline:none}.kbq-select .kbq-select__matcher{display:flex;align-items:center;width:100%;overflow:hidden;white-space:nowrap}.kbq-select .kbq-select__matcher>span{flex:1;overflow:hidden}.kbq-select .kbq-select__trigger{display:flex;box-sizing:border-box;position:relative;cursor:pointer;height:calc(var(--kbq-form-field-size-height, var(--kbq-size-3xl)) - var(--kbq-size-border-width) * 2)}.kbq-select .kbq-select__trigger.kbq-select__trigger_single .kbq-select__matcher,.kbq-select .kbq-select__trigger.kbq-select__trigger_multiple.kbq-select__trigger_empty .kbq-select__matcher{padding:calc(var(--kbq-select-size-single-padding-vertical, var(--kbq-size-xs)) - var(--kbq-size-border-width)) calc(var(--kbq-select-size-single-padding-right, var(--kbq-size-xxs)) - var(--kbq-size-border-width)) calc(var(--kbq-select-size-single-padding-vertical, var(--kbq-size-xs)) - var(--kbq-size-border-width)) calc(var(--kbq-select-size-single-padding-left, var(--kbq-size-m)) - var(--kbq-size-border-width))}.kbq-select .kbq-select__trigger.kbq-select__trigger_multiple:not(.kbq-select__trigger_empty) .kbq-select__matcher{padding:calc(var(--kbq-select-size-multiple-padding-vertical, var(--kbq-size-xxs)) - var(--kbq-size-border-width)) calc(var(--kbq-select-size-multiple-padding-right, var(--kbq-size-xxs)) - var(--kbq-size-border-width)) calc(var(--kbq-select-size-multiple-padding-vertical, var(--kbq-size-xxs)) - var(--kbq-size-border-width)) calc(var(--kbq-select-size-multiple-padding-left, var(--kbq-size-xxs)) - var(--kbq-size-border-width))}.kbq-select .kbq-select__trigger.kbq-select__trigger_multiple:not(.kbq-select__trigger_empty) .kbq-select__matcher .kbq-select__match-container{display:flex}.kbq-select .kbq-select__trigger.kbq-select__trigger_multiple:not(.kbq-select__trigger_empty) .kbq-select__matcher .kbq-select__match-list{display:flex;flex-wrap:wrap;overflow:hidden;height:calc(var(--kbq-form-field-size-height, var(--kbq-size-3xl)) - var(--kbq-select-size-multiple-padding-vertical, var(--kbq-size-xxs)) * 2);max-height:calc(var(--kbq-form-field-size-height, var(--kbq-size-3xl)) - var(--kbq-select-size-multiple-padding-vertical, var(--kbq-size-xxs)) * 2);gap:var(--kbq-select-size-multiple-content-gap, var(--kbq-size-xxs));margin-right:var(--kbq-select-size-multiple-content-gap, var(--kbq-size-xxs))}.kbq-select .kbq-select__match-container{width:100%;text-overflow:ellipsis;overflow:hidden}.kbq-select .kbq-select__match-container .kbq-select__match-hidden-text{flex:0 0 70px;align-self:center;padding-left:4px;padding-right:var(--kbq-select-size-multiple-content-gap, var(--kbq-size-xxs));text-align:right}.kbq-select .kbq-select__arrow-wrapper{display:flex;align-self:center;padding:4px}.kbq-form-field-appearance-fill .kbq-select .kbq-select__arrow-wrapper,.kbq-form-field-appearance-standard .kbq-select .kbq-select__arrow-wrapper{transform:translateY(-50%)}.kbq-form-field-appearance-outline .kbq-select .kbq-select__arrow-wrapper{transform:translateY(-25%)}.kbq-disabled.kbq-select .kbq-select__trigger{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.kbq-select__panel{min-width:100%;overflow:hidden;border-radius:var(--kbq-select-panel-size-border-radius, var(--kbq-size-border-radius))}.kbq-select__panel .kbq-optgroup-label,.kbq-select__panel .kbq-option{font-size:inherit}.kbq-select__panel .kbq-select__no-options-message{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;position:relative;max-width:100%;height:var(--kbq-option-size-height, var(--kbq-size-3xl));cursor:default;outline:none;padding-left:var(--kbq-option-size-horizontal-padding, var(--kbq-size-m));padding-right:var(--kbq-option-size-horizontal-padding, var(--kbq-size-m));border:var(--kbq-option-size-border-width, var(--kbq-size-3xs)) solid transparent}.kbq-select__panel .kbq-select__search-container{padding:var(--kbq-size-xxs);border-bottom-width:1px;border-bottom-style:solid}.kbq-select__content{max-height:var(--kbq-select-panel-size-max-height, 256px);padding:var(--kbq-size-xxs);overflow:hidden auto}.kbq-select__panel .kbq-select__footer{display:flex;align-items:center;box-sizing:border-box;min-height:40px;border-top-width:1px;border-top-style:solid;padding:var(--kbq-size-xxs) var(--kbq-size-l)}.kbq-select__content .kbq-option{position:relative}.kbq-select__content .kbq-option:before,.kbq-select__content .kbq-option:after{position:absolute;content:\"\";width:var(--kbq-size-xxs);height:calc(100% + var(--kbq-size-3xs) * 2)}.kbq-select__content .kbq-option:before{right:calc(100% + var(--kbq-size-3xs))}.kbq-select__content .kbq-option:after{left:calc(100% + var(--kbq-size-3xs))}.kbq-select__content:not(:has(>.kbq-select__no-options-message)) .cdk-virtual-scroll-viewport{min-height:var(--kbq-select-panel-size-max-height, 256px);max-height:var(--kbq-select-panel-size-max-height, 256px)}.kbq-select__content:not(:has(>.kbq-select__no-options-message)) .cdk-virtual-scroll-viewport.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper{max-width:100%}.kbq-form-field-type-select:not(.kbq-disabled) .kbq-form-field-flex{cursor:pointer}.kbq-select{color:var(--kbq-foreground-contrast)}.kbq-select.ng-invalid{color:var(--kbq-error-default)}.kbq-select.kbq-disabled{color:var(--kbq-states-foreground-disabled)}.kbq-select__placeholder{text-overflow:ellipsis;color:var(--kbq-states-foreground-disabled)}.kbq-select__panel{box-shadow:var(--kbq-select-panel-dropdown-shadow);background:var(--kbq-select-panel-dropdown-background)}.kbq-select__panel .kbq-select__footer{border-color:var(--kbq-divider-color, var(--kbq-line-contrast-less))}.kbq-select__search-container{border-bottom-color:var(--kbq-divider-color, var(--kbq-line-contrast-less))}.kbq-select__no-options-message{color:var(--kbq-foreground-contrast-secondary)}.kbq-select,.kbq-select__panel{font-size:var(--kbq-typography-text-normal-font-size);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}\n", ".kbq-select,.kbq-select__panel{--kbq-select-size-single-padding-left: var(--kbq-size-m);--kbq-select-size-single-padding-right: var(--kbq-size-xxs);--kbq-select-size-single-padding-vertical: var(--kbq-size-xs);--kbq-select-size-single-content-gap: var(--kbq-size-xxs);--kbq-select-size-multiple-padding-left: var(--kbq-size-xxs);--kbq-select-size-multiple-padding-right: var(--kbq-size-xxs);--kbq-select-size-multiple-padding-vertical: var(--kbq-size-xxs);--kbq-select-size-multiple-content-gap: var(--kbq-size-xxs);--kbq-select-panel-size-border-radius: var(--kbq-size-border-radius);--kbq-select-panel-size-max-height: 256px;--kbq-select-panel-dropdown-background: var(--kbq-background-card);--kbq-select-panel-dropdown-shadow: var(--kbq-shadow-popup)}\n"] }]
1057
1088
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i1.ErrorStateMatcher }, { type: i0.ElementRef }, { type: i2.OverlayContainer }, { type: i3.Directionality, decorators: [{
1058
1089
  type: Optional
1059
1090
  }] }, { type: i4.NgForm, decorators: [{
@@ -1145,9 +1176,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImpor
1145
1176
  }], required: [{
1146
1177
  type: Input
1147
1178
  }], multiple: [{
1148
- type: Input
1179
+ type: Input,
1180
+ args: [{ transform: booleanAttribute }]
1149
1181
  }], compareWith: [{
1150
1182
  type: Input
1183
+ }], panelWidth: [{
1184
+ type: Input
1151
1185
  }], value: [{
1152
1186
  type: Input
1153
1187
  }], id: [{
@@ -1223,5 +1257,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImpor
1223
1257
  * Generated bundle index. Do not edit.
1224
1258
  */
1225
1259
 
1226
- export { KbqOptionTooltip, KbqSelect, KbqSelectBase, KbqSelectChange, KbqSelectModule };
1260
+ export { KBQ_SELECT_OPTIONS, KbqOptionTooltip, KbqSelect, KbqSelectBase, KbqSelectChange, KbqSelectModule, kbqSelectOptionsProvider };
1227
1261
  //# sourceMappingURL=koobiq-components-select.mjs.map