@koobiq/components 18.17.0 → 18.18.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.
@@ -1,10 +1,9 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, TemplateRef, Directive, input, signal, viewChildren, ElementRef, contentChildren, contentChild, viewChild, computed, booleanAttribute, Component, ChangeDetectionStrategy, NgModule } from '@angular/core';
3
- import { ContentObserver } from '@angular/cdk/observers';
2
+ import { inject, TemplateRef, Directive, input, viewChildren, ElementRef, contentChildren, contentChild, viewChild, computed, signal, booleanAttribute, numberAttribute, ChangeDetectorRef, Component, ChangeDetectionStrategy, NgModule } from '@angular/core';
4
3
  import { SharedResizeObserver } from '@angular/cdk/observers/private';
5
4
  import { NgTemplateOutlet } from '@angular/common';
6
5
  import { toObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';
7
- import { skip, merge, debounceTime } from 'rxjs';
6
+ import { merge, skip, debounceTime } from 'rxjs';
8
7
 
9
8
  /**
10
9
  * Directive for providing `KbqOverflowItemsResultContext` to the `KbqOverflowItems` component.
@@ -44,7 +43,7 @@ class KbqOverflowItem {
44
43
  *
45
44
  * @docs-private
46
45
  */
47
- this.hidden = signal(false);
46
+ this.hidden = false;
48
47
  /**
49
48
  * TemplateRef for the item.
50
49
  *
@@ -87,20 +86,19 @@ class KbqOverflowItems {
87
86
  * @docs-private
88
87
  */
89
88
  this.resultTemplateContext = computed(() => {
90
- const hiddenItemIDs = new Set(this.items()
91
- .filter(({ hidden }) => hidden())
92
- .map(({ id }) => id()));
89
+ const hiddenItemIDs = this.hiddenItemIDs();
93
90
  return {
94
91
  $implicit: hiddenItemIDs,
95
92
  hiddenItemIDs: hiddenItemIDs
96
93
  };
97
94
  });
95
+ this.hiddenItemIDs = signal(new Set([]));
98
96
  /**
99
97
  * Whether the overflow result is hidden.
100
98
  *
101
99
  * @docs-private
102
100
  */
103
- this.resultHidden = computed(() => !this.items().some(({ hidden }) => hidden()));
101
+ this.resultHidden = computed(() => this.hiddenItemIDs().size === 0);
104
102
  /**
105
103
  * Whether the overflow order should be reversed.
106
104
  * Also changes the position of the `resultTemplateRef`.
@@ -108,102 +106,70 @@ class KbqOverflowItems {
108
106
  * @default false
109
107
  */
110
108
  this.reverseOverflowOrder = input(false, { transform: booleanAttribute });
109
+ /**
110
+ * Debounce time for recalculating items visibility.
111
+ *
112
+ * @default 100
113
+ */
114
+ this.debounceTime = input(100, { transform: numberAttribute });
111
115
  this.elementRef = inject(ElementRef);
112
116
  this.resizeObserver = inject(SharedResizeObserver);
113
- this.contentObserver = inject(ContentObserver);
114
- toObservable(this.reverseOverflowOrder)
115
- .pipe(skip(1), takeUntilDestroyed())
116
- .subscribe(() => {
117
- this.items().forEach(({ hidden }) => hidden.set(false));
118
- });
119
- merge(toObservable(this.items), this.resizeObserver.observe(this.elementRef.nativeElement), this.contentObserver.observe(this.elementRef.nativeElement).pipe(debounceTime(0)))
120
- .pipe(takeUntilDestroyed())
117
+ this.changeDetectorRef = inject(ChangeDetectorRef);
118
+ /**
119
+ * Determines if the given item is hidden.
120
+ */
121
+ this.isHiddenItem = ({ hidden }) => hidden;
122
+ merge(toObservable(this.items), toObservable(this.reverseOverflowOrder).pipe(skip(1)), this.resizeObserver.observe(this.elementRef.nativeElement))
123
+ .pipe(debounceTime(this.debounceTime()), takeUntilDestroyed())
121
124
  .subscribe(() => {
122
- this.updateItemsVisibility();
125
+ const items = this.items();
126
+ this.updateItemsVisibility(items, this.itemElementRefs(), this.reverseOverflowOrder(), this.resultElementRef(), this.elementRef.nativeElement);
127
+ this.hiddenItemIDs.set(new Set(items.filter(this.isHiddenItem).map(({ id }) => id())));
128
+ this.changeDetectorRef.markForCheck();
123
129
  });
124
130
  }
125
131
  /**
126
- * Updates the visibility of items based on the container width.
127
- *
128
- * This method calculates whether items should be hidden or shown by comparing the scroll width of the container
129
- * with its visible width. It determines which items are visible and which are hidden, and applies the hiding logic
130
- * based on the `reverseOverflowOrder` flag.
131
- *
132
- * The function operates recursively to adjust the visibility of items until the overflow condition is resolved.
133
- *
134
- * - If the container is overflown, it hides the last visible item from the end (or start if `reverseOverflowOrder`)
135
- * and checks if further adjustments are needed.
136
- * - If the container is not overflown, it reveals the first hidden item from the start
137
- * (or end if `reverseOverflowOrder`), ensuring it fits within the visible area.
132
+ * Updates items visibility, based on the container width and the `reverseOverflowOrder` flag.
138
133
  */
139
- updateItemsVisibility() {
140
- const itemElementRefs = this.itemElementRefs();
141
- const items = this.items().map(({ hidden }, index, _items) => {
142
- return {
143
- hidden,
144
- isFirst: index === 0,
145
- isLast: index === _items.length - 1,
146
- elementRef: itemElementRefs[index]
147
- };
134
+ updateItemsVisibility(items, itemElementRefs, reverseOverflowOrder, resultElementRef, { offsetWidth: totalWidth }) {
135
+ items.forEach((item) => {
136
+ item.hidden = false;
148
137
  });
149
- const reverseOverflowOrder = this.reverseOverflowOrder();
150
- const isEdgeItem = ({ isFirst, isLast }) => (reverseOverflowOrder ? isFirst : isLast);
151
- const { offsetWidth: totalWidth, scrollWidth } = this.elementRef.nativeElement;
152
- const isOverflown = scrollWidth > totalWidth;
153
- if (isOverflown) {
154
- const isVisibleItem = ({ hidden }) => !hidden();
155
- const lastVisibleItem = !reverseOverflowOrder
156
- ? this.findLast(items, isVisibleItem)
157
- : items.find(isVisibleItem);
158
- if (lastVisibleItem) {
159
- lastVisibleItem.hidden.set(true);
160
- if (!isEdgeItem(lastVisibleItem)) {
161
- this.updateItemsVisibility();
162
- }
138
+ let itemsWidth = items.reduce((width, _, index) => width + itemElementRefs[index].nativeElement.offsetWidth, 0);
139
+ const startIndex = reverseOverflowOrder ? 0 : items.length - 1;
140
+ const endIndex = reverseOverflowOrder ? items.length : -1;
141
+ const step = reverseOverflowOrder ? 1 : -1;
142
+ const resultWidth = resultElementRef?.nativeElement.offsetWidth || 0;
143
+ for (let index = startIndex; index !== endIndex; index += step) {
144
+ const current = items[index];
145
+ const currentWidth = itemElementRefs[index].nativeElement.offsetWidth;
146
+ const _resultWidth = items.some(this.isHiddenItem) ? resultWidth : 0;
147
+ if (itemsWidth + _resultWidth > totalWidth) {
148
+ current.hidden = true;
149
+ itemsWidth -= currentWidth;
163
150
  }
164
- }
165
- else {
166
- const isHiddenItem = ({ hidden }) => hidden();
167
- const firstHiddenItem = !reverseOverflowOrder
168
- ? items.find(isHiddenItem)
169
- : this.findLast(items, isHiddenItem);
170
- if (firstHiddenItem) {
171
- const firstHiddenItemWidth = firstHiddenItem.elementRef.nativeElement.offsetWidth;
172
- const visibleItemsTotalWidth = items
173
- .filter(({ hidden }) => !hidden())
174
- .reduce((width, { elementRef }) => width + elementRef.nativeElement.offsetWidth, 0);
175
- const _isEdgeItem = isEdgeItem(firstHiddenItem);
176
- const resultWidth = _isEdgeItem ? 0 : this.resultElementRef()?.nativeElement.offsetWidth || 0;
177
- if (firstHiddenItemWidth + visibleItemsTotalWidth + resultWidth <= totalWidth) {
178
- firstHiddenItem.hidden.set(false);
179
- if (!_isEdgeItem) {
180
- this.updateItemsVisibility();
181
- }
151
+ else {
152
+ const isEdgeElement = reverseOverflowOrder ? index === 0 : index === items.length - 1;
153
+ const _resultWidth = isEdgeElement ? 0 : resultWidth;
154
+ if (itemsWidth + currentWidth + _resultWidth <= totalWidth) {
155
+ current.hidden = false;
156
+ itemsWidth += currentWidth;
182
157
  }
183
158
  }
184
159
  }
185
160
  }
186
- /** @TODO Should use `Array.prototype.findLast` after migrating to ES2023 */
187
- findLast(array, predicate) {
188
- for (let i = array.length - 1; i >= 0; i--) {
189
- if (predicate(array[i], i, array)) {
190
- return array[i];
191
- }
192
- }
193
- return undefined;
194
- }
195
161
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KbqOverflowItems, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
196
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.6", type: KbqOverflowItems, isStandalone: true, selector: "kbq-overflow-items", inputs: { reverseOverflowOrder: { classPropertyName: "reverseOverflowOrder", publicName: "reverseOverflowOrder", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "kbq-overflow-items" }, queries: [{ propertyName: "items", predicate: KbqOverflowItem, isSignal: true }, { propertyName: "result", first: true, predicate: KbqOverflowItemsResult, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "itemElementRefs", predicate: ["itemRef"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "resultElementRef", first: true, predicate: ["resultRef"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: `
162
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.6", type: KbqOverflowItems, isStandalone: true, selector: "kbq-overflow-items", inputs: { reverseOverflowOrder: { classPropertyName: "reverseOverflowOrder", publicName: "reverseOverflowOrder", isSignal: true, isRequired: false, transformFunction: null }, debounceTime: { classPropertyName: "debounceTime", publicName: "debounceTime", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "kbq-overflow-items" }, queries: [{ propertyName: "items", predicate: KbqOverflowItem, isSignal: true }, { propertyName: "result", first: true, predicate: KbqOverflowItemsResult, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "itemElementRefs", predicate: ["itemRef"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "resultElementRef", first: true, predicate: ["resultRef"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: `
197
163
  @if (reverseOverflowOrder()) {
198
164
  <ng-container [ngTemplateOutlet]="template" />
199
165
  }
200
166
 
201
- @for (item of items(); track item.id()) {
167
+ @for (item of items(); track item) {
202
168
  <div
203
169
  class="kbq-overflow-items__item"
204
170
  #itemRef
205
- [attr.aria-hidden]="item.hidden()"
206
- [class.kbq-overflow-items__item_hidden]="item.hidden()"
171
+ [attr.aria-hidden]="item.hidden"
172
+ [class.kbq-overflow-items__item_hidden]="item.hidden"
207
173
  >
208
174
  <ng-container [ngTemplateOutlet]="item.templateRef" />
209
175
  </div>
@@ -235,12 +201,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImpor
235
201
  <ng-container [ngTemplateOutlet]="template" />
236
202
  }
237
203
 
238
- @for (item of items(); track item.id()) {
204
+ @for (item of items(); track item) {
239
205
  <div
240
206
  class="kbq-overflow-items__item"
241
207
  #itemRef
242
- [attr.aria-hidden]="item.hidden()"
243
- [class.kbq-overflow-items__item_hidden]="item.hidden()"
208
+ [attr.aria-hidden]="item.hidden"
209
+ [class.kbq-overflow-items__item_hidden]="item.hidden"
244
210
  >
245
211
  <ng-container [ngTemplateOutlet]="item.templateRef" />
246
212
  </div>
@@ -1 +1 @@
1
- {"version":3,"file":"koobiq-components-overflow-items.mjs","sources":["../../../packages/components/overflow-items/overflow-items.ts","../../../packages/components/overflow-items/module.ts","../../../packages/components/overflow-items/koobiq-components-overflow-items.ts"],"sourcesContent":["import { ContentObserver } from '@angular/cdk/observers';\nimport { SharedResizeObserver } from '@angular/cdk/observers/private';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n contentChildren,\n Directive,\n ElementRef,\n inject,\n input,\n signal,\n TemplateRef,\n viewChild,\n viewChildren\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { debounceTime, merge, skip } from 'rxjs';\n\n/**\n * Template context for the `KbqOverflowItemsResult` directive.\n *\n * @see `KbqOverflowItemsResult`\n */\nexport type KbqOverflowItemsResultContext = {\n /**\n * Set of hidden item ID's.\n *\n * Example:\n *\n * ```html\n * <ng-template kbqOverflowItemsResult let-hiddenItemIDs>\n * {{ hiddenItemIDs.size }}\n * </ng-template>\n * ````\n */\n $implicit: ReadonlySet<unknown>;\n /**\n * Set of hidden item ID's.\n *\n * Example:\n *\n * ```html\n * <ng-template kbqOverflowItemsResult let-hiddenItemIDs=\"hiddenItemIDs\">\n * @if (hiddenItemIDs.has(SOME_ID)) {...}\n * </ng-template>\n * ````\n */\n hiddenItemIDs: ReadonlySet<unknown>;\n};\n\n/**\n * Directive for providing `KbqOverflowItemsResultContext` to the `KbqOverflowItems` component.\n *\n * @see `KbqOverflowItemsResultContext`\n */\n@Directive({\n standalone: true,\n selector: 'ng-template[kbqOverflowItemsResult]'\n})\nexport class KbqOverflowItemsResult {\n /**\n * TemplateRef for the overflow result.\n *\n * @docs-private\n */\n readonly templateRef = inject<TemplateRef<KbqOverflowItemsResultContext>>(TemplateRef);\n}\n\n/**\n * Structure directive for providing items to the `KbqOverflowItems`.\n */\n@Directive({\n standalone: true,\n selector: '[kbqOverflowItem]'\n})\nexport class KbqOverflowItem {\n /**\n * Identifier for the item.\n */\n readonly id = input.required({ alias: 'kbqOverflowItem' });\n\n /**\n * Whether the item is hidden.\n *\n * @docs-private\n */\n readonly hidden = signal<boolean>(false);\n\n /**\n * TemplateRef for the item.\n *\n * @docs-private\n */\n readonly templateRef = inject(TemplateRef);\n}\n\n/**\n * Component for automatically hiding elements with dynamic adaptation to the container width.\n */\n@Component({\n standalone: true,\n selector: 'kbq-overflow-items',\n imports: [NgTemplateOutlet],\n template: `\n @if (reverseOverflowOrder()) {\n <ng-container [ngTemplateOutlet]=\"template\" />\n }\n\n @for (item of items(); track item.id()) {\n <div\n class=\"kbq-overflow-items__item\"\n #itemRef\n [attr.aria-hidden]=\"item.hidden()\"\n [class.kbq-overflow-items__item_hidden]=\"item.hidden()\"\n >\n <ng-container [ngTemplateOutlet]=\"item.templateRef\" />\n </div>\n }\n\n @if (!reverseOverflowOrder()) {\n <ng-container [ngTemplateOutlet]=\"template\" />\n }\n\n <ng-template #template>\n <div\n class=\"kbq-overflow-items__result\"\n #resultRef\n [attr.aria-hidden]=\"resultHidden()\"\n [class.kbq-overflow-items__result_hidden]=\"resultHidden()\"\n >\n <ng-container\n [ngTemplateOutlet]=\"result()?.templateRef || null\"\n [ngTemplateOutletContext]=\"resultTemplateContext()\"\n />\n </div>\n </ng-template>\n `,\n styleUrl: './overflow-items.scss',\n host: {\n class: 'kbq-overflow-items'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class KbqOverflowItems {\n private readonly itemElementRefs = viewChildren<string, ElementRef<HTMLElement>>('itemRef', { read: ElementRef });\n\n /**\n * `KbqOverflowItem` directive references.\n *\n * @docs-private\n */\n protected readonly items = contentChildren(KbqOverflowItem);\n\n /**\n * `KbqOverflowItemsResult` directive reference.\n *\n * @docs-private\n */\n protected readonly result = contentChild(KbqOverflowItemsResult);\n\n private readonly resultElementRef = viewChild<string, ElementRef<HTMLElement>>('resultRef', { read: ElementRef });\n\n /**\n * Template context for the `KbqOverflowItemsResult` directive.\n *\n * @docs-private\n */\n protected readonly resultTemplateContext = computed<KbqOverflowItemsResultContext>(() => {\n const hiddenItemIDs = new Set(\n this.items()\n .filter(({ hidden }) => hidden())\n .map(({ id }) => id())\n );\n return {\n $implicit: hiddenItemIDs,\n hiddenItemIDs: hiddenItemIDs\n };\n });\n\n /**\n * Whether the overflow result is hidden.\n *\n * @docs-private\n */\n protected readonly resultHidden = computed(() => !this.items().some(({ hidden }) => hidden()));\n\n /**\n * Whether the overflow order should be reversed.\n * Also changes the position of the `resultTemplateRef`.\n *\n * @default false\n */\n readonly reverseOverflowOrder = input(false, { transform: booleanAttribute });\n\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly resizeObserver = inject(SharedResizeObserver);\n private readonly contentObserver = inject(ContentObserver);\n\n constructor() {\n toObservable(this.reverseOverflowOrder)\n .pipe(skip(1), takeUntilDestroyed())\n .subscribe(() => {\n this.items().forEach(({ hidden }) => hidden.set(false));\n });\n\n merge(\n toObservable(this.items),\n this.resizeObserver.observe(this.elementRef.nativeElement),\n this.contentObserver.observe(this.elementRef.nativeElement).pipe(debounceTime(0))\n )\n .pipe(takeUntilDestroyed())\n .subscribe(() => {\n this.updateItemsVisibility();\n });\n }\n\n /**\n * Updates the visibility of items based on the container width.\n *\n * This method calculates whether items should be hidden or shown by comparing the scroll width of the container\n * with its visible width. It determines which items are visible and which are hidden, and applies the hiding logic\n * based on the `reverseOverflowOrder` flag.\n *\n * The function operates recursively to adjust the visibility of items until the overflow condition is resolved.\n *\n * - If the container is overflown, it hides the last visible item from the end (or start if `reverseOverflowOrder`)\n * and checks if further adjustments are needed.\n * - If the container is not overflown, it reveals the first hidden item from the start\n * (or end if `reverseOverflowOrder`), ensuring it fits within the visible area.\n */\n private updateItemsVisibility(): void {\n const itemElementRefs = this.itemElementRefs();\n const items = this.items().map(({ hidden }, index, _items) => {\n return {\n hidden,\n isFirst: index === 0,\n isLast: index === _items.length - 1,\n elementRef: itemElementRefs[index]\n };\n });\n const reverseOverflowOrder = this.reverseOverflowOrder();\n const isEdgeItem = ({ isFirst, isLast }: (typeof items)[number]) => (reverseOverflowOrder ? isFirst : isLast);\n const { offsetWidth: totalWidth, scrollWidth } = this.elementRef.nativeElement;\n const isOverflown = scrollWidth > totalWidth;\n if (isOverflown) {\n const isVisibleItem = ({ hidden }: (typeof items)[number]) => !hidden();\n const lastVisibleItem = !reverseOverflowOrder\n ? this.findLast(items, isVisibleItem)\n : items.find(isVisibleItem);\n if (lastVisibleItem) {\n lastVisibleItem.hidden.set(true);\n if (!isEdgeItem(lastVisibleItem)) {\n this.updateItemsVisibility();\n }\n }\n } else {\n const isHiddenItem = ({ hidden }: (typeof items)[number]) => hidden();\n const firstHiddenItem = !reverseOverflowOrder\n ? items.find(isHiddenItem)\n : this.findLast(items, isHiddenItem);\n if (firstHiddenItem) {\n const firstHiddenItemWidth = firstHiddenItem.elementRef.nativeElement.offsetWidth;\n const visibleItemsTotalWidth = items\n .filter(({ hidden }) => !hidden())\n .reduce((width, { elementRef }) => width + elementRef.nativeElement.offsetWidth, 0);\n const _isEdgeItem = isEdgeItem(firstHiddenItem);\n const resultWidth = _isEdgeItem ? 0 : this.resultElementRef()?.nativeElement.offsetWidth || 0;\n if (firstHiddenItemWidth + visibleItemsTotalWidth + resultWidth <= totalWidth) {\n firstHiddenItem.hidden.set(false);\n if (!_isEdgeItem) {\n this.updateItemsVisibility();\n }\n }\n }\n }\n }\n\n /** @TODO Should use `Array.prototype.findLast` after migrating to ES2023 */\n private findLast<T>(array: T[], predicate: (value: T, index: number, array: T[]) => boolean): T | undefined {\n for (let i = array.length - 1; i >= 0; i--) {\n if (predicate(array[i], i, array)) {\n return array[i];\n }\n }\n return undefined;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { KbqOverflowItem, KbqOverflowItems, KbqOverflowItemsResult } from './overflow-items';\n\nconst COMPONENTS = [\n KbqOverflowItems,\n KbqOverflowItem,\n KbqOverflowItemsResult\n];\n\n@NgModule({\n imports: COMPONENTS,\n exports: COMPONENTS\n})\nexport class KbqOverflowItemsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"koobiq-components-overflow-items.mjs","sources":["../../../packages/components/overflow-items/overflow-items.ts","../../../packages/components/overflow-items/module.ts","../../../packages/components/overflow-items/koobiq-components-overflow-items.ts"],"sourcesContent":["import { SharedResizeObserver } from '@angular/cdk/observers/private';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n contentChild,\n contentChildren,\n Directive,\n ElementRef,\n inject,\n input,\n numberAttribute,\n signal,\n TemplateRef,\n viewChild,\n viewChildren\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { debounceTime, merge, skip } from 'rxjs';\n\n/**\n * Template context for the `KbqOverflowItemsResult` directive.\n *\n * @see `KbqOverflowItemsResult`\n */\nexport type KbqOverflowItemsResultContext = {\n /**\n * Set of hidden item ID's.\n *\n * Example:\n *\n * ```html\n * <ng-template kbqOverflowItemsResult let-hiddenItemIDs>\n * {{ hiddenItemIDs.size }}\n * </ng-template>\n * ````\n */\n $implicit: ReadonlySet<unknown>;\n /**\n * Set of hidden item ID's.\n *\n * Example:\n *\n * ```html\n * <ng-template kbqOverflowItemsResult let-hiddenItemIDs=\"hiddenItemIDs\">\n * @if (hiddenItemIDs.has(SOME_ID)) {...}\n * </ng-template>\n * ````\n */\n hiddenItemIDs: ReadonlySet<unknown>;\n};\n\n/**\n * Directive for providing `KbqOverflowItemsResultContext` to the `KbqOverflowItems` component.\n *\n * @see `KbqOverflowItemsResultContext`\n */\n@Directive({\n standalone: true,\n selector: 'ng-template[kbqOverflowItemsResult]'\n})\nexport class KbqOverflowItemsResult {\n /**\n * TemplateRef for the overflow result.\n *\n * @docs-private\n */\n readonly templateRef = inject<TemplateRef<KbqOverflowItemsResultContext>>(TemplateRef);\n}\n\n/**\n * Structure directive for providing items to the `KbqOverflowItems`.\n */\n@Directive({\n standalone: true,\n selector: '[kbqOverflowItem]'\n})\nexport class KbqOverflowItem {\n /**\n * Identifier for the item.\n */\n readonly id = input.required({ alias: 'kbqOverflowItem' });\n\n /**\n * Whether the item is hidden.\n *\n * @docs-private\n */\n hidden: boolean = false;\n\n /**\n * TemplateRef for the item.\n *\n * @docs-private\n */\n readonly templateRef = inject(TemplateRef);\n}\n\n/**\n * Component for automatically hiding elements with dynamic adaptation to the container width.\n */\n@Component({\n standalone: true,\n selector: 'kbq-overflow-items',\n imports: [NgTemplateOutlet],\n template: `\n @if (reverseOverflowOrder()) {\n <ng-container [ngTemplateOutlet]=\"template\" />\n }\n\n @for (item of items(); track item) {\n <div\n class=\"kbq-overflow-items__item\"\n #itemRef\n [attr.aria-hidden]=\"item.hidden\"\n [class.kbq-overflow-items__item_hidden]=\"item.hidden\"\n >\n <ng-container [ngTemplateOutlet]=\"item.templateRef\" />\n </div>\n }\n\n @if (!reverseOverflowOrder()) {\n <ng-container [ngTemplateOutlet]=\"template\" />\n }\n\n <ng-template #template>\n <div\n class=\"kbq-overflow-items__result\"\n #resultRef\n [attr.aria-hidden]=\"resultHidden()\"\n [class.kbq-overflow-items__result_hidden]=\"resultHidden()\"\n >\n <ng-container\n [ngTemplateOutlet]=\"result()?.templateRef || null\"\n [ngTemplateOutletContext]=\"resultTemplateContext()\"\n />\n </div>\n </ng-template>\n `,\n styleUrl: './overflow-items.scss',\n host: {\n class: 'kbq-overflow-items'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class KbqOverflowItems {\n private readonly itemElementRefs = viewChildren<string, ElementRef<HTMLElement>>('itemRef', { read: ElementRef });\n\n /**\n * `KbqOverflowItem` directive references.\n *\n * @docs-private\n */\n protected readonly items = contentChildren(KbqOverflowItem);\n\n /**\n * `KbqOverflowItemsResult` directive reference.\n *\n * @docs-private\n */\n protected readonly result = contentChild(KbqOverflowItemsResult);\n\n private readonly resultElementRef = viewChild<string, ElementRef<HTMLElement>>('resultRef', { read: ElementRef });\n\n /**\n * Template context for the `KbqOverflowItemsResult` directive.\n *\n * @docs-private\n */\n protected readonly resultTemplateContext = computed<KbqOverflowItemsResultContext>(() => {\n const hiddenItemIDs = this.hiddenItemIDs();\n return {\n $implicit: hiddenItemIDs,\n hiddenItemIDs: hiddenItemIDs\n };\n });\n\n private readonly hiddenItemIDs = signal<ReadonlySet<unknown>>(new Set([]));\n\n /**\n * Whether the overflow result is hidden.\n *\n * @docs-private\n */\n protected readonly resultHidden = computed(() => this.hiddenItemIDs().size === 0);\n\n /**\n * Whether the overflow order should be reversed.\n * Also changes the position of the `resultTemplateRef`.\n *\n * @default false\n */\n readonly reverseOverflowOrder = input(false, { transform: booleanAttribute });\n\n /**\n * Debounce time for recalculating items visibility.\n *\n * @default 100\n */\n readonly debounceTime = input(100, { transform: numberAttribute });\n\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly resizeObserver = inject(SharedResizeObserver);\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n\n constructor() {\n merge(\n toObservable(this.items),\n toObservable(this.reverseOverflowOrder).pipe(skip(1)),\n this.resizeObserver.observe(this.elementRef.nativeElement)\n )\n .pipe(debounceTime(this.debounceTime()), takeUntilDestroyed())\n .subscribe(() => {\n const items = this.items();\n this.updateItemsVisibility(\n items,\n this.itemElementRefs(),\n this.reverseOverflowOrder(),\n this.resultElementRef(),\n this.elementRef.nativeElement\n );\n this.hiddenItemIDs.set(new Set(items.filter(this.isHiddenItem).map(({ id }) => id())));\n this.changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * Updates items visibility, based on the container width and the `reverseOverflowOrder` flag.\n */\n private updateItemsVisibility(\n items: readonly KbqOverflowItem[],\n itemElementRefs: readonly ElementRef<HTMLElement>[],\n reverseOverflowOrder: boolean,\n resultElementRef: ElementRef<HTMLElement> | undefined,\n { offsetWidth: totalWidth }: HTMLElement\n ): void {\n items.forEach((item) => {\n item.hidden = false;\n });\n let itemsWidth = items.reduce((width, _, index) => width + itemElementRefs[index].nativeElement.offsetWidth, 0);\n const startIndex = reverseOverflowOrder ? 0 : items.length - 1;\n const endIndex = reverseOverflowOrder ? items.length : -1;\n const step = reverseOverflowOrder ? 1 : -1;\n const resultWidth = resultElementRef?.nativeElement.offsetWidth || 0;\n for (let index = startIndex; index !== endIndex; index += step) {\n const current = items[index];\n const currentWidth = itemElementRefs[index].nativeElement.offsetWidth;\n const _resultWidth = items.some(this.isHiddenItem) ? resultWidth : 0;\n if (itemsWidth + _resultWidth > totalWidth) {\n current.hidden = true;\n itemsWidth -= currentWidth;\n } else {\n const isEdgeElement = reverseOverflowOrder ? index === 0 : index === items.length - 1;\n const _resultWidth = isEdgeElement ? 0 : resultWidth;\n if (itemsWidth + currentWidth + _resultWidth <= totalWidth) {\n current.hidden = false;\n itemsWidth += currentWidth;\n }\n }\n }\n }\n\n /**\n * Determines if the given item is hidden.\n */\n private isHiddenItem = ({ hidden }: KbqOverflowItem) => hidden;\n}\n","import { NgModule } from '@angular/core';\nimport { KbqOverflowItem, KbqOverflowItems, KbqOverflowItemsResult } from './overflow-items';\n\nconst COMPONENTS = [\n KbqOverflowItems,\n KbqOverflowItem,\n KbqOverflowItemsResult\n];\n\n@NgModule({\n imports: COMPONENTS,\n exports: COMPONENTS\n})\nexport class KbqOverflowItemsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -788,7 +788,7 @@ class KbqTreeSelect extends KbqTreeSelectMixinBase {
788
788
  { provide: KbqFormFieldControl, useExisting: KbqTreeSelect },
789
789
  { provide: KbqTree, useExisting: KbqTreeSelect },
790
790
  { provide: KBQ_PARENT_POPUP, useExisting: KbqTreeSelect }
791
- ], queries: [{ propertyName: "cleaner", first: true, predicate: ["kbqSelectCleaner"], descendants: true, static: 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: "tree", first: true, predicate: KbqTreeSelection, descendants: true }, { propertyName: "search", first: true, predicate: KbqSelectSearch, descendants: true }], viewQueries: [{ propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true }, { propertyName: "panel", first: true, predicate: ["panel"], descendants: true }, { propertyName: "overlayDir", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "tags", predicate: KbqTag, descendants: true }], exportAs: ["kbqTreeSelect"], 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 @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\" />\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)=\"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 <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 color=\"contrast-fade\" kbq-icon=\"kbq-chevron-down-s_16\" class=\"kbq-select__arrow\"></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 cdkMonitorSubtreeFocus\n class=\"kbq-tree-select__panel {{ getPanelTheme() }}\"\n [ngClass]=\"panelClass\"\n [style.font-size.px]=\"triggerFontSize\"\n [style.transformOrigin]=\"transformOrigin\"\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-tree-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\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", styles: [".kbq-tree-select{box-sizing:border-box;display:inline-block;width:100%;outline:none}.kbq-tree-select .kbq-select__matcher{display:flex;align-items:center;width:100%;overflow:hidden;white-space:nowrap}.kbq-tree-select .kbq-select__matcher>span{flex:1;overflow:hidden}.kbq-tree-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-tree-select .kbq-select__trigger.kbq-select__trigger_single .kbq-select__matcher,.kbq-tree-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-tree-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-tree-select .kbq-select__trigger.kbq-select__trigger_multiple:not(.kbq-select__trigger_empty) .kbq-select__matcher .kbq-select__match-container{display:flex}.kbq-tree-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-tree-select .kbq-select__match-container{width:100%;text-overflow:ellipsis;overflow:hidden}.kbq-tree-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-tree-select .kbq-select__arrow-wrapper{display:flex;align-self:center;padding:4px}.kbq-form-field-appearance-fill .kbq-tree-select .kbq-select__arrow-wrapper,.kbq-form-field-appearance-standard .kbq-tree-select .kbq-select__arrow-wrapper{transform:translateY(-50%)}.kbq-form-field-appearance-outline .kbq-tree-select .kbq-select__arrow-wrapper{transform:translateY(-25%)}.kbq-disabled.kbq-tree-select .kbq-select__trigger{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.kbq-tree-select__panel{min-width:100%;overflow:hidden;border-radius:var(--kbq-select-panel-size-border-radius, var(--kbq-size-border-radius))}.kbq-tree-select__panel .kbq-optgroup-label,.kbq-tree-select__panel .kbq-option{font-size:inherit}.kbq-tree-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-tree-select__panel .kbq-select__search-container{padding:var(--kbq-size-xxs);border-bottom-width:1px;border-bottom-style:solid}.kbq-tree-select__content{max-height:var(--kbq-select-panel-size-max-height, 256px);padding:var(--kbq-size-xxs);overflow:hidden auto}.kbq-tree-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-tree-select__content .kbq-tree-selection{height:100%}.kbq-form-field-type-select:not(.kbq-disabled) .kbq-form-field-flex{cursor:pointer}.kbq-tree-select{color:var(--kbq-foreground-contrast)}.kbq-tree-select.ng-invalid{color:var(--kbq-error-default)}.kbq-tree-select.kbq-disabled{color:var(--kbq-states-foreground-disabled)}.kbq-select__placeholder{text-overflow:ellipsis;color:var(--kbq-states-foreground-disabled)}.kbq-tree-select__panel{box-shadow:var(--kbq-select-panel-dropdown-shadow);background:var(--kbq-select-panel-dropdown-background)}.kbq-tree-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-tree-select,.kbq-tree-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-tree-select__panel{--kbq-select-panel-dropdown-background: var(--kbq-background-card);--kbq-select-panel-dropdown-shadow: var(--kbq-shadow-popup)}.kbq-tree-select__panel .kbq-tree-selection{--kbq-tree-option-border-radius: var(--kbq-size-xs)}\n"], dependencies: [{ kind: "directive", type: i5.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: i5.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"] }, { kind: "directive", type: i9.CdkMonitorFocus, selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]", outputs: ["cdkFocusChange"], exportAs: ["cdkMonitorFocus"] }], animations: [
791
+ ], queries: [{ propertyName: "cleaner", first: true, predicate: ["kbqSelectCleaner"], descendants: true, static: 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: "tree", first: true, predicate: KbqTreeSelection, descendants: true }, { propertyName: "search", first: true, predicate: KbqSelectSearch, descendants: true }], viewQueries: [{ propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true }, { propertyName: "panel", first: true, predicate: ["panel"], descendants: true }, { propertyName: "overlayDir", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "tags", predicate: KbqTag, descendants: true }], exportAs: ["kbqTreeSelect"], 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 @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)=\"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 <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 color=\"contrast-fade\" kbq-icon=\"kbq-chevron-down-s_16\" class=\"kbq-select__arrow\"></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 cdkMonitorSubtreeFocus\n class=\"kbq-tree-select__panel {{ getPanelTheme() }}\"\n [ngClass]=\"panelClass\"\n [style.font-size.px]=\"triggerFontSize\"\n [style.transformOrigin]=\"transformOrigin\"\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-tree-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\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", styles: [".kbq-tree-select{box-sizing:border-box;display:inline-block;width:100%;outline:none}.kbq-tree-select .kbq-select__matcher{display:flex;align-items:center;width:100%;overflow:hidden;white-space:nowrap}.kbq-tree-select .kbq-select__matcher>span{flex:1;overflow:hidden}.kbq-tree-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-tree-select .kbq-select__trigger.kbq-select__trigger_single .kbq-select__matcher,.kbq-tree-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-tree-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-tree-select .kbq-select__trigger.kbq-select__trigger_multiple:not(.kbq-select__trigger_empty) .kbq-select__matcher .kbq-select__match-container{display:flex}.kbq-tree-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-tree-select .kbq-select__match-container{width:100%;text-overflow:ellipsis;overflow:hidden}.kbq-tree-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-tree-select .kbq-select__arrow-wrapper{display:flex;align-self:center;padding:4px}.kbq-form-field-appearance-fill .kbq-tree-select .kbq-select__arrow-wrapper,.kbq-form-field-appearance-standard .kbq-tree-select .kbq-select__arrow-wrapper{transform:translateY(-50%)}.kbq-form-field-appearance-outline .kbq-tree-select .kbq-select__arrow-wrapper{transform:translateY(-25%)}.kbq-disabled.kbq-tree-select .kbq-select__trigger{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.kbq-tree-select__panel{min-width:100%;overflow:hidden;border-radius:var(--kbq-select-panel-size-border-radius, var(--kbq-size-border-radius))}.kbq-tree-select__panel .kbq-optgroup-label,.kbq-tree-select__panel .kbq-option{font-size:inherit}.kbq-tree-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-tree-select__panel .kbq-select__search-container{padding:var(--kbq-size-xxs);border-bottom-width:1px;border-bottom-style:solid}.kbq-tree-select__content{max-height:var(--kbq-select-panel-size-max-height, 256px);padding:var(--kbq-size-xxs);overflow:hidden auto}.kbq-tree-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-tree-select__content .kbq-tree-selection{height:100%}.kbq-form-field-type-select:not(.kbq-disabled) .kbq-form-field-flex{cursor:pointer}.kbq-tree-select{color:var(--kbq-foreground-contrast)}.kbq-tree-select.ng-invalid{color:var(--kbq-error-default)}.kbq-tree-select.kbq-disabled{color:var(--kbq-states-foreground-disabled)}.kbq-select__placeholder{text-overflow:ellipsis;color:var(--kbq-states-foreground-disabled)}.kbq-tree-select__panel{box-shadow:var(--kbq-select-panel-dropdown-shadow);background:var(--kbq-select-panel-dropdown-background)}.kbq-tree-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-tree-select,.kbq-tree-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-tree-select__panel{--kbq-select-panel-dropdown-background: var(--kbq-background-card);--kbq-select-panel-dropdown-shadow: var(--kbq-shadow-popup)}.kbq-tree-select__panel .kbq-tree-selection{--kbq-tree-option-border-radius: var(--kbq-size-xs)}\n"], dependencies: [{ kind: "directive", type: i5.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: i5.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"] }, { kind: "directive", type: i9.CdkMonitorFocus, selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]", outputs: ["cdkFocusChange"], exportAs: ["cdkMonitorFocus"] }], animations: [
792
792
  kbqSelectAnimations.transformPanel,
793
793
  kbqSelectAnimations.fadeInContent
794
794
  ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
@@ -813,7 +813,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImpor
813
813
  { provide: KbqFormFieldControl, useExisting: KbqTreeSelect },
814
814
  { provide: KbqTree, useExisting: KbqTreeSelect },
815
815
  { provide: KBQ_PARENT_POPUP, useExisting: KbqTreeSelect }
816
- ], 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 @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\" />\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)=\"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 <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 color=\"contrast-fade\" kbq-icon=\"kbq-chevron-down-s_16\" class=\"kbq-select__arrow\"></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 cdkMonitorSubtreeFocus\n class=\"kbq-tree-select__panel {{ getPanelTheme() }}\"\n [ngClass]=\"panelClass\"\n [style.font-size.px]=\"triggerFontSize\"\n [style.transformOrigin]=\"transformOrigin\"\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-tree-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\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", styles: [".kbq-tree-select{box-sizing:border-box;display:inline-block;width:100%;outline:none}.kbq-tree-select .kbq-select__matcher{display:flex;align-items:center;width:100%;overflow:hidden;white-space:nowrap}.kbq-tree-select .kbq-select__matcher>span{flex:1;overflow:hidden}.kbq-tree-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-tree-select .kbq-select__trigger.kbq-select__trigger_single .kbq-select__matcher,.kbq-tree-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-tree-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-tree-select .kbq-select__trigger.kbq-select__trigger_multiple:not(.kbq-select__trigger_empty) .kbq-select__matcher .kbq-select__match-container{display:flex}.kbq-tree-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-tree-select .kbq-select__match-container{width:100%;text-overflow:ellipsis;overflow:hidden}.kbq-tree-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-tree-select .kbq-select__arrow-wrapper{display:flex;align-self:center;padding:4px}.kbq-form-field-appearance-fill .kbq-tree-select .kbq-select__arrow-wrapper,.kbq-form-field-appearance-standard .kbq-tree-select .kbq-select__arrow-wrapper{transform:translateY(-50%)}.kbq-form-field-appearance-outline .kbq-tree-select .kbq-select__arrow-wrapper{transform:translateY(-25%)}.kbq-disabled.kbq-tree-select .kbq-select__trigger{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.kbq-tree-select__panel{min-width:100%;overflow:hidden;border-radius:var(--kbq-select-panel-size-border-radius, var(--kbq-size-border-radius))}.kbq-tree-select__panel .kbq-optgroup-label,.kbq-tree-select__panel .kbq-option{font-size:inherit}.kbq-tree-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-tree-select__panel .kbq-select__search-container{padding:var(--kbq-size-xxs);border-bottom-width:1px;border-bottom-style:solid}.kbq-tree-select__content{max-height:var(--kbq-select-panel-size-max-height, 256px);padding:var(--kbq-size-xxs);overflow:hidden auto}.kbq-tree-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-tree-select__content .kbq-tree-selection{height:100%}.kbq-form-field-type-select:not(.kbq-disabled) .kbq-form-field-flex{cursor:pointer}.kbq-tree-select{color:var(--kbq-foreground-contrast)}.kbq-tree-select.ng-invalid{color:var(--kbq-error-default)}.kbq-tree-select.kbq-disabled{color:var(--kbq-states-foreground-disabled)}.kbq-select__placeholder{text-overflow:ellipsis;color:var(--kbq-states-foreground-disabled)}.kbq-tree-select__panel{box-shadow:var(--kbq-select-panel-dropdown-shadow);background:var(--kbq-select-panel-dropdown-background)}.kbq-tree-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-tree-select,.kbq-tree-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-tree-select__panel{--kbq-select-panel-dropdown-background: var(--kbq-background-card);--kbq-select-panel-dropdown-shadow: var(--kbq-shadow-popup)}.kbq-tree-select__panel .kbq-tree-selection{--kbq-tree-option-border-radius: var(--kbq-size-xs)}\n"] }]
816
+ ], 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 @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)=\"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 <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 color=\"contrast-fade\" kbq-icon=\"kbq-chevron-down-s_16\" class=\"kbq-select__arrow\"></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 cdkMonitorSubtreeFocus\n class=\"kbq-tree-select__panel {{ getPanelTheme() }}\"\n [ngClass]=\"panelClass\"\n [style.font-size.px]=\"triggerFontSize\"\n [style.transformOrigin]=\"transformOrigin\"\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-tree-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\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", styles: [".kbq-tree-select{box-sizing:border-box;display:inline-block;width:100%;outline:none}.kbq-tree-select .kbq-select__matcher{display:flex;align-items:center;width:100%;overflow:hidden;white-space:nowrap}.kbq-tree-select .kbq-select__matcher>span{flex:1;overflow:hidden}.kbq-tree-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-tree-select .kbq-select__trigger.kbq-select__trigger_single .kbq-select__matcher,.kbq-tree-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-tree-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-tree-select .kbq-select__trigger.kbq-select__trigger_multiple:not(.kbq-select__trigger_empty) .kbq-select__matcher .kbq-select__match-container{display:flex}.kbq-tree-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-tree-select .kbq-select__match-container{width:100%;text-overflow:ellipsis;overflow:hidden}.kbq-tree-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-tree-select .kbq-select__arrow-wrapper{display:flex;align-self:center;padding:4px}.kbq-form-field-appearance-fill .kbq-tree-select .kbq-select__arrow-wrapper,.kbq-form-field-appearance-standard .kbq-tree-select .kbq-select__arrow-wrapper{transform:translateY(-50%)}.kbq-form-field-appearance-outline .kbq-tree-select .kbq-select__arrow-wrapper{transform:translateY(-25%)}.kbq-disabled.kbq-tree-select .kbq-select__trigger{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.kbq-tree-select__panel{min-width:100%;overflow:hidden;border-radius:var(--kbq-select-panel-size-border-radius, var(--kbq-size-border-radius))}.kbq-tree-select__panel .kbq-optgroup-label,.kbq-tree-select__panel .kbq-option{font-size:inherit}.kbq-tree-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-tree-select__panel .kbq-select__search-container{padding:var(--kbq-size-xxs);border-bottom-width:1px;border-bottom-style:solid}.kbq-tree-select__content{max-height:var(--kbq-select-panel-size-max-height, 256px);padding:var(--kbq-size-xxs);overflow:hidden auto}.kbq-tree-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-tree-select__content .kbq-tree-selection{height:100%}.kbq-form-field-type-select:not(.kbq-disabled) .kbq-form-field-flex{cursor:pointer}.kbq-tree-select{color:var(--kbq-foreground-contrast)}.kbq-tree-select.ng-invalid{color:var(--kbq-error-default)}.kbq-tree-select.kbq-disabled{color:var(--kbq-states-foreground-disabled)}.kbq-select__placeholder{text-overflow:ellipsis;color:var(--kbq-states-foreground-disabled)}.kbq-tree-select__panel{box-shadow:var(--kbq-select-panel-dropdown-shadow);background:var(--kbq-select-panel-dropdown-background)}.kbq-tree-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-tree-select,.kbq-tree-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-tree-select__panel{--kbq-select-panel-dropdown-background: var(--kbq-background-card);--kbq-select-panel-dropdown-shadow: var(--kbq-shadow-popup)}.kbq-tree-select__panel .kbq-tree-selection{--kbq-tree-option-border-radius: var(--kbq-size-xs)}\n"] }]
817
817
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i1.ErrorStateMatcher }, { type: undefined, decorators: [{
818
818
  type: Inject,
819
819
  args: [KBQ_SELECT_SCROLL_STRATEGY]