@koobiq/components 19.5.0 → 19.7.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.
- package/accordion/accordion-content.directive.d.ts +4 -0
- package/accordion/accordion-trigger.directive.d.ts +4 -0
- package/actions-panel/actions-panel-container.scss +6 -0
- package/actions-panel/actions-panel-tokens.scss +4 -1
- package/autocomplete/autocomplete.component.d.ts +6 -1
- package/autocomplete/autocomplete.module.d.ts +1 -1
- package/autocomplete/autocomplete.scss +14 -3
- package/badge/badge-tokens.scss +3 -3
- package/breadcrumbs/breadcrumbs.scss +0 -4
- package/button/button-group.d.ts +45 -0
- package/button/button-group.scss +17 -0
- package/button/button.component.d.ts +3 -0
- package/button/button.module.d.ts +2 -1
- package/button/public-api.d.ts +1 -0
- package/button-toggle/button-toggle-tokens.scss +1 -1
- package/checkbox/checkbox.d.ts +5 -4
- package/code-block/code-block-highlight.d.ts +1 -0
- package/code-block/code-block-tokens.scss +35 -16
- package/code-block/code-block.d.ts +8 -3
- package/core/error/error-state-matcher.d.ts +10 -0
- package/core/forms/_forms.scss +10 -3
- package/core/option/_option-action-theme.scss +1 -0
- package/core/option/action-container.scss +4 -6
- package/core/option/option.d.ts +8 -0
- package/core/option/option.scss +5 -0
- package/core/pop-up/pop-up-trigger.d.ts +1 -1
- package/core/select/common.d.ts +4 -4
- package/core/styles/common/_groups-mixins.scss +79 -0
- package/core/styles/common/_groups.scss +4 -34
- package/core/styles/common/_overlay.scss +4 -0
- package/core/styles/common/_select.scss +4 -0
- package/core/styles/theming/scrollbar-tokens.scss +6 -6
- package/core/styles/visual/_layout.scss +0 -2
- package/core/utils/utils.d.ts +2 -0
- package/core/validation/validation.d.ts +1 -1
- package/datepicker/datepicker-input.directive.d.ts +1 -0
- package/dropdown/dropdown-trigger.directive.d.ts +5 -0
- package/ellipsis-center/ellipsis-center.directive.d.ts +0 -1
- package/fesm2022/koobiq-components-accordion.mjs +52 -30
- package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
- package/fesm2022/koobiq-components-actions-panel.mjs +12 -12
- package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
- package/fesm2022/koobiq-components-alert.mjs +16 -16
- package/fesm2022/koobiq-components-app-switcher.mjs +25 -25
- package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
- package/fesm2022/koobiq-components-autocomplete.mjs +39 -23
- package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
- package/fesm2022/koobiq-components-badge.mjs +14 -14
- package/fesm2022/koobiq-components-badge.mjs.map +1 -1
- package/fesm2022/koobiq-components-breadcrumbs.mjs +26 -26
- package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
- package/fesm2022/koobiq-components-button-toggle.mjs +12 -12
- package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
- package/fesm2022/koobiq-components-button.mjs +146 -24
- package/fesm2022/koobiq-components-button.mjs.map +1 -1
- package/fesm2022/koobiq-components-checkbox.mjs +17 -19
- package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
- package/fesm2022/koobiq-components-clamped-text.mjs +13 -13
- package/fesm2022/koobiq-components-code-block.mjs +43 -27
- package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
- package/fesm2022/koobiq-components-content-panel.mjs +28 -28
- package/fesm2022/koobiq-components-core.mjs +290 -250
- package/fesm2022/koobiq-components-core.mjs.map +1 -1
- package/fesm2022/koobiq-components-datepicker.mjs +40 -64
- package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
- package/fesm2022/koobiq-components-divider.mjs +7 -7
- package/fesm2022/koobiq-components-dl.mjs +13 -13
- package/fesm2022/koobiq-components-dropdown.mjs +38 -21
- package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
- package/fesm2022/koobiq-components-dynamic-translation.mjs +13 -13
- package/fesm2022/koobiq-components-ellipsis-center.mjs +8 -9
- package/fesm2022/koobiq-components-ellipsis-center.mjs.map +1 -1
- package/fesm2022/koobiq-components-empty-state.mjs +19 -19
- package/fesm2022/koobiq-components-file-upload.mjs +39 -39
- package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
- package/fesm2022/koobiq-components-filter-bar.mjs +109 -97
- package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
- package/fesm2022/koobiq-components-form-field.mjs +67 -60
- package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
- package/fesm2022/koobiq-components-icon.mjs +31 -27
- package/fesm2022/koobiq-components-icon.mjs.map +1 -1
- package/fesm2022/koobiq-components-inline-edit.mjs +108 -68
- package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
- package/fesm2022/koobiq-components-input.mjs +22 -22
- package/fesm2022/koobiq-components-link.mjs +17 -17
- package/fesm2022/koobiq-components-link.mjs.map +1 -1
- package/fesm2022/koobiq-components-list.mjs +19 -19
- package/fesm2022/koobiq-components-loader-overlay.mjs +28 -19
- package/fesm2022/koobiq-components-loader-overlay.mjs.map +1 -1
- package/fesm2022/koobiq-components-markdown.mjs +54 -22
- package/fesm2022/koobiq-components-markdown.mjs.map +1 -1
- package/fesm2022/koobiq-components-modal.mjs +40 -32
- package/fesm2022/koobiq-components-modal.mjs.map +1 -1
- package/fesm2022/koobiq-components-navbar-ic.mjs +34 -34
- package/fesm2022/koobiq-components-navbar.mjs +45 -45
- package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
- package/fesm2022/koobiq-components-notification-center.mjs +16 -16
- package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
- package/fesm2022/koobiq-components-overflow-items.mjs +16 -16
- package/fesm2022/koobiq-components-popover.mjs +52 -23
- package/fesm2022/koobiq-components-popover.mjs.map +1 -1
- package/fesm2022/koobiq-components-progress-bar.mjs +13 -13
- package/fesm2022/koobiq-components-progress-spinner.mjs +14 -14
- package/fesm2022/koobiq-components-progress-spinner.mjs.map +1 -1
- package/fesm2022/koobiq-components-radio.mjs +10 -10
- package/fesm2022/koobiq-components-resizer.mjs +10 -10
- package/fesm2022/koobiq-components-risk-level.mjs +7 -7
- package/fesm2022/koobiq-components-scrollbar.mjs +12 -12
- package/fesm2022/koobiq-components-scrollbar.mjs.map +1 -1
- package/fesm2022/koobiq-components-search-expandable.mjs +17 -8
- package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
- package/fesm2022/koobiq-components-select.mjs +368 -63
- package/fesm2022/koobiq-components-select.mjs.map +1 -1
- package/fesm2022/koobiq-components-sidebar.mjs +13 -13
- package/fesm2022/koobiq-components-sidepanel.mjs +27 -27
- package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
- package/fesm2022/koobiq-components-skeleton.mjs +51 -18
- package/fesm2022/koobiq-components-skeleton.mjs.map +1 -1
- package/fesm2022/koobiq-components-split-button.mjs +9 -9
- package/fesm2022/koobiq-components-split-button.mjs.map +1 -1
- package/fesm2022/koobiq-components-splitter.mjs +16 -16
- package/fesm2022/koobiq-components-table.mjs +10 -10
- package/fesm2022/koobiq-components-tabs.mjs +52 -52
- package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
- package/fesm2022/koobiq-components-tags.mjs +79 -64
- package/fesm2022/koobiq-components-tags.mjs.map +1 -1
- package/fesm2022/koobiq-components-textarea.mjs +7 -7
- package/fesm2022/koobiq-components-time-range.mjs +24 -24
- package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
- package/fesm2022/koobiq-components-timepicker.mjs +10 -10
- package/fesm2022/koobiq-components-timezone.mjs +26 -26
- package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
- package/fesm2022/koobiq-components-title.mjs +8 -9
- package/fesm2022/koobiq-components-title.mjs.map +1 -1
- package/fesm2022/koobiq-components-toast.mjs +16 -16
- package/fesm2022/koobiq-components-toggle.mjs +12 -9
- package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
- package/fesm2022/koobiq-components-tooltip.mjs +84 -51
- package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
- package/fesm2022/koobiq-components-top-bar.mjs +15 -15
- package/fesm2022/koobiq-components-top-bar.mjs.map +1 -1
- package/fesm2022/koobiq-components-tree-select.mjs +12 -10
- package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
- package/fesm2022/koobiq-components-tree.mjs +41 -42
- package/fesm2022/koobiq-components-tree.mjs.map +1 -1
- package/fesm2022/koobiq-components-username.mjs +28 -28
- package/fesm2022/koobiq-components-username.mjs.map +1 -1
- package/filter-bar/filter-search.d.ts +10 -1
- package/filter-bar/pipes/pipe-date.scss +2 -1
- package/form-field/_form-field-theme.scss +10 -2
- package/form-field/form-field-tokens.scss +1 -0
- package/form-field/form-field.d.ts +19 -1
- package/form-field/form-field.scss +41 -2
- package/icon/icon-button.component.d.ts +3 -0
- package/inline-edit/inline-edit-tokens.scss +3 -3
- package/inline-edit/inline-edit.d.ts +30 -11
- package/inline-edit/inline-edit.scss +28 -30
- package/link/_link-theme.scss +3 -1
- package/link/link-tokens.scss +7 -6
- package/link/link.component.d.ts +5 -4
- package/loader-overlay/_loader-overlay-theme.scss +12 -0
- package/loader-overlay/loader-overlay-tokens.scss +1 -0
- package/loader-overlay/loader-overlay.component.d.ts +7 -1
- package/markdown/_markdown-theme.scss +3 -31
- package/markdown/markdown-tokens.scss +0 -11
- package/markdown/markdown.component.d.ts +11 -6
- package/markdown/markdown.scss +0 -11
- package/navbar/navbar.scss +3 -0
- package/package.json +4 -5
- package/popover/popover.component.d.ts +15 -2
- package/prebuilt-themes/dark-theme.css +1 -1
- package/prebuilt-themes/light-theme.css +1 -1
- package/prebuilt-themes/theme.css +1 -1
- package/progress-spinner/progress-spinner.scss +1 -0
- package/schematics/ng-add/index.js +4 -5
- package/scrollbar/scrollbar-tokens.scss +7 -7
- package/search-expandable/search-expandable.d.ts +6 -2
- package/select/public-api.d.ts +1 -0
- package/select/select-common.d.ts +30 -0
- package/select/select-tokens.scss +2 -2
- package/select/select.component.d.ts +201 -29
- package/select/select.module.d.ts +3 -2
- package/sidepanel/sidepanel-config.d.ts +6 -1
- package/skeleton/skeleton.d.ts +8 -4
- package/skeleton/skeleton.scss +19 -5
- package/split-button/_split-button-theme.scss +2 -1
- package/tags/tag-list.component.d.ts +15 -11
- package/tags/tag-tokens.scss +4 -4
- package/tags/tag.component.d.ts +5 -2
- package/timezone/timezone-option-tokens.scss +0 -10
- package/title/title.directive.d.ts +0 -1
- package/toggle/toggle.component.d.ts +4 -3
- package/tooltip/_tooltip-theme.scss +5 -1
- package/tooltip/tooltip-tokens.scss +4 -4
- package/tooltip/tooltip.component.d.ts +20 -2
- package/top-bar/top-bar.scss +3 -0
- package/tree/tree-option.scss +7 -0
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { ChangeDetectionStrategy, Component, input, booleanAttribute, Directive, inject, InjectionToken, DestroyRef, EventEmitter, output, afterNextRender, isDevMode, ElementRef, TemplateRef, numberAttribute, Input, Output, ContentChild, ContentChildren, ViewChildren, ViewChild, Optional, Host, Self, Inject, ViewEncapsulation, NgModule } from '@angular/core';
|
|
3
|
+
import * as i1 from '@koobiq/components/progress-spinner';
|
|
4
|
+
import { KbqProgressSpinnerModule } from '@koobiq/components/progress-spinner';
|
|
1
5
|
import { ContentObserver } from '@angular/cdk/observers';
|
|
2
6
|
import { SharedResizeObserver } from '@angular/cdk/observers/private';
|
|
3
|
-
import * as
|
|
4
|
-
import {
|
|
5
|
-
import * as i1 from '@koobiq/components/core';
|
|
6
|
-
import { KbqAbstractSelect, getKbqSelectDynamicMultipleError, getKbqSelectNonFunctionValueError, KbqVirtualOption, KbqComponentColors, KBQ_VALIDATION, KBQ_WINDOW, defaultOffsetY, isUndefined, getKbqSelectNonArrayValueError, KBQ_SELECT_SCROLL_STRATEGY, KBQ_LOCALE_SERVICE, kbqSelectAnimations, KbqSelectFooter, KbqSelectTrigger, KbqSelectMatcher, KbqSelectSearch, KbqOption, KbqOptgroup, KBQ_OPTION_PARENT_COMPONENT, KBQ_PARENT_POPUP, KbqOptionModule, KbqSelectSearchEmptyResult, KBQ_SELECT_SCROLL_STRATEGY_PROVIDER } from '@koobiq/components/core';
|
|
7
|
+
import * as i1$1 from '@koobiq/components/core';
|
|
8
|
+
import { KbqAbstractSelect, getKbqSelectDynamicMultipleError, getKbqSelectNonFunctionValueError, KbqVirtualOption, KbqComponentColors, KBQ_VALIDATION, KBQ_WINDOW, defaultOffsetY, isUndefined, getKbqSelectNonArrayValueError, KBQ_SELECT_SCROLL_STRATEGY, KBQ_LOCALE_SERVICE, kbqSelectAnimations, KbqSelectFooter, KbqSelectTrigger, KbqSelectMatcher, KbqSelectSearch, KbqSelectSearchEmptyResult, KbqOption, KbqOptgroup, KBQ_OPTION_PARENT_COMPONENT, KBQ_PARENT_POPUP, KbqOptionModule, KBQ_SELECT_SCROLL_STRATEGY_PROVIDER } from '@koobiq/components/core';
|
|
7
9
|
import { KbqTooltipTrigger, KbqToolTipModule } from '@koobiq/components/tooltip';
|
|
8
10
|
import { CdkMonitorFocus, A11yModule } from '@angular/cdk/a11y';
|
|
9
11
|
import * as i3 from '@angular/cdk/bidi';
|
|
@@ -24,8 +26,99 @@ import * as i6 from '@koobiq/components/icon';
|
|
|
24
26
|
import { KbqIconModule } from '@koobiq/components/icon';
|
|
25
27
|
import { KbqTag, KbqTagsModule } from '@koobiq/components/tags';
|
|
26
28
|
import { SizeXxs } from '@koobiq/design-tokens';
|
|
27
|
-
import { Subject, defer, merge, Subscription, BehaviorSubject, fromEvent } from 'rxjs';
|
|
28
|
-
import { switchMap, take, filter, map, delay, debounceTime, distinctUntilChanged,
|
|
29
|
+
import { Subject, defer, merge, EMPTY, Subscription, BehaviorSubject, fromEvent } from 'rxjs';
|
|
30
|
+
import { switchMap, startWith, take, filter, map, delay, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs/operators';
|
|
31
|
+
|
|
32
|
+
class KbqSelectLoading {
|
|
33
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: KbqSelectLoading, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
34
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.20", type: KbqSelectLoading, isStandalone: true, selector: "kbq-select-loading, [kbq-select-loading]", host: { classAttribute: "kbq-select-loading" }, exportAs: ["kbqSelectLoading"], ngImport: i0, template: `
|
|
35
|
+
<ng-content select="kbq-progress-spinner">
|
|
36
|
+
<div class="layout-row layout-margin-top-4xl layout-margin-bottom-4xl layout-align-center-center">
|
|
37
|
+
<kbq-progress-spinner [mode]="'indeterminate'" />
|
|
38
|
+
</div>
|
|
39
|
+
</ng-content>
|
|
40
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: KbqProgressSpinnerModule }, { kind: "component", type: i1.KbqProgressSpinner, selector: "kbq-progress-spinner", inputs: ["id", "value", "mode", "size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
41
|
+
}
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: KbqSelectLoading, decorators: [{
|
|
43
|
+
type: Component,
|
|
44
|
+
args: [{
|
|
45
|
+
selector: 'kbq-select-loading, [kbq-select-loading]',
|
|
46
|
+
imports: [
|
|
47
|
+
KbqProgressSpinnerModule
|
|
48
|
+
],
|
|
49
|
+
template: `
|
|
50
|
+
<ng-content select="kbq-progress-spinner">
|
|
51
|
+
<div class="layout-row layout-margin-top-4xl layout-margin-bottom-4xl layout-align-center-center">
|
|
52
|
+
<kbq-progress-spinner [mode]="'indeterminate'" />
|
|
53
|
+
</div>
|
|
54
|
+
</ng-content>
|
|
55
|
+
`,
|
|
56
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
57
|
+
exportAs: 'kbqSelectLoading',
|
|
58
|
+
host: {
|
|
59
|
+
class: 'kbq-select-loading'
|
|
60
|
+
}
|
|
61
|
+
}]
|
|
62
|
+
}] });
|
|
63
|
+
/**
|
|
64
|
+
* This component renders the error for a Select component.
|
|
65
|
+
* The error message can be displayed in two visual variants: a default centered layout (when [paging] is falsy)
|
|
66
|
+
* or a variant with left‑aligned text suitable for pagination controls (when [paging] is truthy).
|
|
67
|
+
*/
|
|
68
|
+
class KbqSelectError {
|
|
69
|
+
constructor() {
|
|
70
|
+
/** Indicates whether styles for pagination controls should be used. */
|
|
71
|
+
this.paging = input(false, { transform: booleanAttribute });
|
|
72
|
+
}
|
|
73
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: KbqSelectError, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
74
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.20", type: KbqSelectError, isStandalone: true, selector: "kbq-select-error, [kbq-select-error]", inputs: { paging: { classPropertyName: "paging", publicName: "paging", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.kbq-select-error_default": "!paging()", "class.kbq-select-error_paging": "paging()" }, classAttribute: "kbq-select-error" }, exportAs: ["kbqSelectError"], ngImport: i0, template: `
|
|
75
|
+
<ng-content />
|
|
76
|
+
`, isInline: true, styles: [":host{display:flex;flex-direction:column}:host.kbq-select-error_default{align-items:center;justify-content:center;margin-bottom:var(--kbq-size-3xl);margin-top:var(--kbq-size-3xl)}:host.kbq-select-error_paging{justify-content:start}:host.kbq-select-error_paging ::ng-deep .kbq-select-error__text{padding-left:var(--kbq-size-l)}::ng-deep .kbq-select-error__text{margin-top:var(--kbq-size-xs);margin-bottom:var(--kbq-size-3xs);color:var(--kbq-foreground-error)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
77
|
+
}
|
|
78
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: KbqSelectError, decorators: [{
|
|
79
|
+
type: Component,
|
|
80
|
+
args: [{ selector: 'kbq-select-error, [kbq-select-error]', template: `
|
|
81
|
+
<ng-content />
|
|
82
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, exportAs: 'kbqSelectError', host: {
|
|
83
|
+
class: 'kbq-select-error',
|
|
84
|
+
'[class.kbq-select-error_default]': '!paging()',
|
|
85
|
+
'[class.kbq-select-error_paging]': 'paging()'
|
|
86
|
+
}, styles: [":host{display:flex;flex-direction:column}:host.kbq-select-error_default{align-items:center;justify-content:center;margin-bottom:var(--kbq-size-3xl);margin-top:var(--kbq-size-3xl)}:host.kbq-select-error_paging{justify-content:start}:host.kbq-select-error_paging ::ng-deep .kbq-select-error__text{padding-left:var(--kbq-size-l)}::ng-deep .kbq-select-error__text{margin-top:var(--kbq-size-xs);margin-bottom:var(--kbq-size-3xs);color:var(--kbq-foreground-error)}\n"] }]
|
|
87
|
+
}] });
|
|
88
|
+
/**
|
|
89
|
+
* Marks an element as the error text container for a *KbqSelect* component.
|
|
90
|
+
*/
|
|
91
|
+
class KbqSelectErrorText {
|
|
92
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: KbqSelectErrorText, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
93
|
+
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.20", type: KbqSelectErrorText, isStandalone: true, selector: "[kbq-select-error-text]", host: { classAttribute: "kbq-select-error__text" }, exportAs: ["kbqSelectErrorText"], ngImport: i0 }); }
|
|
94
|
+
}
|
|
95
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: KbqSelectErrorText, decorators: [{
|
|
96
|
+
type: Directive,
|
|
97
|
+
args: [{
|
|
98
|
+
selector: '[kbq-select-error-text]',
|
|
99
|
+
exportAs: 'kbqSelectErrorText',
|
|
100
|
+
host: {
|
|
101
|
+
class: 'kbq-select-error__text'
|
|
102
|
+
}
|
|
103
|
+
}]
|
|
104
|
+
}] });
|
|
105
|
+
/**
|
|
106
|
+
* Component that represents the empty state of a select dropdown.
|
|
107
|
+
*/
|
|
108
|
+
class KbqSelectNoOptions {
|
|
109
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: KbqSelectNoOptions, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
110
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.20", type: KbqSelectNoOptions, isStandalone: true, selector: "kbq-select-no-options, [kbq-select-no-options]", host: { classAttribute: "kbq-select-no-options" }, exportAs: ["kbqSelectNoOptions"], ngImport: i0, template: `
|
|
111
|
+
<ng-content />
|
|
112
|
+
`, isInline: true, styles: [":host{display:flex;flex-direction:column;align-items:center;justify-content:center;padding-bottom:var(--kbq-size-3xl);padding-top:var(--kbq-size-3xl);color:var(--kbq-foreground-contrast-secondary)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
113
|
+
}
|
|
114
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: KbqSelectNoOptions, decorators: [{
|
|
115
|
+
type: Component,
|
|
116
|
+
args: [{ selector: 'kbq-select-no-options, [kbq-select-no-options]', template: `
|
|
117
|
+
<ng-content />
|
|
118
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, exportAs: 'kbqSelectNoOptions', host: {
|
|
119
|
+
class: 'kbq-select-no-options'
|
|
120
|
+
}, styles: [":host{display:flex;flex-direction:column;align-items:center;justify-content:center;padding-bottom:var(--kbq-size-3xl);padding-top:var(--kbq-size-3xl);color:var(--kbq-foreground-contrast-secondary)}\n"] }]
|
|
121
|
+
}] });
|
|
29
122
|
|
|
30
123
|
class KbqOptionTooltip extends KbqTooltipTrigger {
|
|
31
124
|
get textElement() {
|
|
@@ -73,10 +166,10 @@ class KbqOptionTooltip extends KbqTooltipTrigger {
|
|
|
73
166
|
this.disabled = true;
|
|
74
167
|
this.hide();
|
|
75
168
|
}
|
|
76
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
77
|
-
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.
|
|
169
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: KbqOptionTooltip, deps: [{ token: i1$1.KbqOption }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
170
|
+
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.20", type: KbqOptionTooltip, isStandalone: true, selector: "kbq-option", host: { listeners: { "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()", "focus": "onFocus()", "blur": "onBlur()" } }, usesInheritance: true, ngImport: i0 }); }
|
|
78
171
|
}
|
|
79
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
172
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: KbqOptionTooltip, decorators: [{
|
|
80
173
|
type: Directive,
|
|
81
174
|
args: [{
|
|
82
175
|
selector: 'kbq-option',
|
|
@@ -87,7 +180,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImpo
|
|
|
87
180
|
'(blur)': 'onBlur()'
|
|
88
181
|
}
|
|
89
182
|
}]
|
|
90
|
-
}], ctorParameters: () => [{ type: i1.KbqOption }] });
|
|
183
|
+
}], ctorParameters: () => [{ type: i1$1.KbqOption }] });
|
|
91
184
|
|
|
92
185
|
let nextUniqueId = 0;
|
|
93
186
|
/** Change event object that is emitted when the select value has changed. */
|
|
@@ -106,11 +199,15 @@ const kbqSelectOptionsProvider = (options) => {
|
|
|
106
199
|
useValue: options
|
|
107
200
|
};
|
|
108
201
|
};
|
|
202
|
+
/** Delay in milliseconds before displaying a result when there are no options. */
|
|
203
|
+
const delayBeforeDisplayingResultWithoutOptions = 101;
|
|
204
|
+
/** Minimum time in milliseconds to display the loading state. */
|
|
205
|
+
const minimumTimeToDisplayLoading = 300;
|
|
109
206
|
class KbqSelect extends KbqAbstractSelect {
|
|
110
207
|
/**
|
|
111
208
|
* Controls when the search functionality is displayed based on the number of available options.
|
|
112
209
|
*
|
|
113
|
-
* Automatically enables search hiding if value provided, even if `defaultOptions.
|
|
210
|
+
* Automatically enables search hiding if value provided, even if `defaultOptions.searchMinOptionsThreshold` is provided.
|
|
114
211
|
* @default undefined
|
|
115
212
|
*/
|
|
116
213
|
set searchMinOptionsThreshold(value) {
|
|
@@ -121,12 +218,20 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
121
218
|
get searchMinOptionsThreshold() {
|
|
122
219
|
return this._searchMinOptionsThreshold;
|
|
123
220
|
}
|
|
221
|
+
/**
|
|
222
|
+
* Whether the overlay should have a backdrop.
|
|
223
|
+
* When true, clicking the backdrop will close the select.
|
|
224
|
+
*/
|
|
124
225
|
get hasBackdrop() {
|
|
125
226
|
return this._hasBackdrop;
|
|
126
227
|
}
|
|
127
228
|
set hasBackdrop(value) {
|
|
128
229
|
this._hasBackdrop = coerceBooleanProperty(value);
|
|
129
230
|
}
|
|
231
|
+
/**
|
|
232
|
+
* Placeholder text to be shown when no value is selected.
|
|
233
|
+
* Displayed in the trigger when the select is closed and no value is selected.
|
|
234
|
+
*/
|
|
130
235
|
get placeholder() {
|
|
131
236
|
return this._placeholder;
|
|
132
237
|
}
|
|
@@ -134,6 +239,9 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
134
239
|
this._placeholder = value;
|
|
135
240
|
this.stateChanges.next();
|
|
136
241
|
}
|
|
242
|
+
/**
|
|
243
|
+
* Whether the select is required. Affects validation and display of placeholder.
|
|
244
|
+
*/
|
|
137
245
|
get required() {
|
|
138
246
|
return this._required;
|
|
139
247
|
}
|
|
@@ -141,6 +249,10 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
141
249
|
this._required = coerceBooleanProperty(value);
|
|
142
250
|
this.stateChanges.next();
|
|
143
251
|
}
|
|
252
|
+
/**
|
|
253
|
+
* Whether multiple options can be selected.
|
|
254
|
+
* Note: This cannot be changed dynamically after initialization.
|
|
255
|
+
*/
|
|
144
256
|
get multiple() {
|
|
145
257
|
return this._multiple;
|
|
146
258
|
}
|
|
@@ -151,9 +263,11 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
151
263
|
this._multiple = value;
|
|
152
264
|
}
|
|
153
265
|
/**
|
|
154
|
-
* Function to compare the option values with the selected values.
|
|
155
|
-
*
|
|
156
|
-
*
|
|
266
|
+
* Function to compare the option values with the selected values.
|
|
267
|
+
* The first argument is a value from an option.
|
|
268
|
+
* The second is a value from the selection.
|
|
269
|
+
* Should return true if the values match.
|
|
270
|
+
* Defaults to strict equality comparison.
|
|
157
271
|
*/
|
|
158
272
|
get compareWith() {
|
|
159
273
|
return this._compareWith;
|
|
@@ -169,7 +283,10 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
169
283
|
}
|
|
170
284
|
}
|
|
171
285
|
/**
|
|
172
|
-
* Function for handling the
|
|
286
|
+
* Function for handling the Ctrl + A (select all) keyboard combination.
|
|
287
|
+
* By default, the internal handler selects all options.
|
|
288
|
+
* @param event The keyboard event that triggered the handler.
|
|
289
|
+
* @param select Reference to this select component.
|
|
173
290
|
*/
|
|
174
291
|
get selectAllHandler() {
|
|
175
292
|
return this._selectAllHandler;
|
|
@@ -180,7 +297,7 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
180
297
|
}
|
|
181
298
|
this._selectAllHandler = fn;
|
|
182
299
|
}
|
|
183
|
-
/** Value of the select control. */
|
|
300
|
+
/** Value of the select control. Can be a single value or array of values for multiple selection. */
|
|
184
301
|
get value() {
|
|
185
302
|
return this._value;
|
|
186
303
|
}
|
|
@@ -190,6 +307,10 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
190
307
|
this._value = newValue;
|
|
191
308
|
}
|
|
192
309
|
}
|
|
310
|
+
/**
|
|
311
|
+
* Unique identifier for the select component.
|
|
312
|
+
* Auto-generates an ID if not provided.
|
|
313
|
+
*/
|
|
193
314
|
get id() {
|
|
194
315
|
return this._id;
|
|
195
316
|
}
|
|
@@ -197,12 +318,20 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
197
318
|
this._id = value || this.uid;
|
|
198
319
|
this.stateChanges.next();
|
|
199
320
|
}
|
|
321
|
+
/**
|
|
322
|
+
* Sets the tabIndex of the select element.
|
|
323
|
+
* Automatically set to -1 when disabled.
|
|
324
|
+
*/
|
|
200
325
|
get tabIndex() {
|
|
201
326
|
return this.disabled ? -1 : this._tabIndex;
|
|
202
327
|
}
|
|
203
328
|
set tabIndex(value) {
|
|
204
329
|
this._tabIndex = value;
|
|
205
330
|
}
|
|
331
|
+
/**
|
|
332
|
+
* Whether the select is disabled.
|
|
333
|
+
* When disabled, the select cannot be opened and its value cannot be changed.
|
|
334
|
+
*/
|
|
206
335
|
get disabled() {
|
|
207
336
|
return this._disabled;
|
|
208
337
|
}
|
|
@@ -225,15 +354,19 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
225
354
|
set focused(value) {
|
|
226
355
|
this._focused = value;
|
|
227
356
|
}
|
|
357
|
+
/** Whether the search returned no results. */
|
|
228
358
|
get isEmptySearchResult() {
|
|
229
359
|
return this.search && this.options.filter((option) => option.selectable).length === 0 && !!this.search.value();
|
|
230
360
|
}
|
|
361
|
+
/** Whether the cleaner (clear button) should be shown. */
|
|
231
362
|
get canShowCleaner() {
|
|
232
363
|
return !this.disabled && this.cleaner && this.selectionModel.hasValue();
|
|
233
364
|
}
|
|
365
|
+
/** Returns the currently selected option(s). Single value or array for multiple selection. */
|
|
234
366
|
get selected() {
|
|
235
367
|
return this.multiSelection ? this.selectionModel.selected : this.selectionModel.selected[0];
|
|
236
368
|
}
|
|
369
|
+
/** Returns the display value for the trigger element. */
|
|
237
370
|
get triggerValue() {
|
|
238
371
|
if (this.empty)
|
|
239
372
|
return '';
|
|
@@ -242,6 +375,7 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
242
375
|
}
|
|
243
376
|
return this.selectionModel.selected[0].viewValue;
|
|
244
377
|
}
|
|
378
|
+
/** Returns all selected options in display order. */
|
|
245
379
|
get triggerValues() {
|
|
246
380
|
if (this.empty) {
|
|
247
381
|
return [];
|
|
@@ -250,14 +384,21 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
250
384
|
if (this.isRtl()) {
|
|
251
385
|
selectedOptions.reverse();
|
|
252
386
|
}
|
|
253
|
-
return selectedOptions;
|
|
387
|
+
return this.triggerValuesLimit > 0 ? selectedOptions.slice(0, this.triggerValuesLimit) : selectedOptions;
|
|
254
388
|
}
|
|
389
|
+
/** Whether no option is currently selected. */
|
|
255
390
|
get empty() {
|
|
256
391
|
return !!this.selectionModel?.isEmpty();
|
|
257
392
|
}
|
|
393
|
+
/** Whether there are no options available. */
|
|
394
|
+
get noOptions() {
|
|
395
|
+
return this.options?.length === 0;
|
|
396
|
+
}
|
|
397
|
+
/** Returns the first selected option that is not disabled. */
|
|
258
398
|
get firstSelected() {
|
|
259
399
|
return this.selectionModel.selected.filter((option) => !option.disabled)[0] || null;
|
|
260
400
|
}
|
|
401
|
+
/** Whether the first selected option is filtered (not visible in the list). */
|
|
261
402
|
get firstFiltered() {
|
|
262
403
|
return !this.options.find((option) => option === this.firstSelected);
|
|
263
404
|
}
|
|
@@ -270,7 +411,7 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
270
411
|
? KbqComponentColors.Error
|
|
271
412
|
: KbqComponentColors.ContrastFade;
|
|
272
413
|
}
|
|
273
|
-
/** Whether multiple choice is enabled
|
|
414
|
+
/** Whether multiple choice is enabled. True if multiple or multiline mode is active. */
|
|
274
415
|
get multiSelection() {
|
|
275
416
|
return this.multiple || this.multiline;
|
|
276
417
|
}
|
|
@@ -306,10 +447,11 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
306
447
|
/** A name for this control that can be used by `kbq-form-field`. */
|
|
307
448
|
this.controlType = 'select';
|
|
308
449
|
this.hiddenItems = 0;
|
|
309
|
-
/** The cached font-size of the trigger element. */
|
|
450
|
+
/** The cached font-size of the trigger element in pixels. */
|
|
310
451
|
this.triggerFontSize = 0;
|
|
452
|
+
/** Previously selected options before the current selection was made. */
|
|
311
453
|
this.previousSelectionModelSelected = [];
|
|
312
|
-
/** The value of the select panel's transform-origin property. */
|
|
454
|
+
/** The value of the select panel's transform-origin property for animations. */
|
|
313
455
|
this.transformOrigin = 'top';
|
|
314
456
|
/** Emits when the panel element is finished transforming in. */
|
|
315
457
|
this.panelDoneAnimatingStream = new Subject();
|
|
@@ -317,7 +459,7 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
317
459
|
this.scrollStrategy = this.scrollStrategyFactory();
|
|
318
460
|
/**
|
|
319
461
|
* The y-offset of the overlay panel in relation to the trigger's top start corner.
|
|
320
|
-
* This must be adjusted to align the selected option text over the trigger text
|
|
462
|
+
* This must be adjusted to align the selected option text over the trigger text
|
|
321
463
|
* when the panel opens. Will change based on the y-position of the selected option.
|
|
322
464
|
*/
|
|
323
465
|
this.offsetY = defaultOffsetY;
|
|
@@ -343,22 +485,42 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
343
485
|
offsetY: -this.offsetY
|
|
344
486
|
}
|
|
345
487
|
];
|
|
488
|
+
/** Template string for hidden items text. Supports {{ number }} placeholder. */
|
|
346
489
|
this.hiddenItemsText = '+{{ number }}';
|
|
490
|
+
/** Determines whether preselected values are displayed. */
|
|
491
|
+
this.showPreselectedValues = false;
|
|
492
|
+
/**
|
|
493
|
+
* Specifies the maximum number of trigger values allowed.
|
|
494
|
+
* This constant limits the size of the trigger values array to ensure performance
|
|
495
|
+
* and prevent excessive memory usage.
|
|
496
|
+
* A value of `0` indicates that there is no limit.
|
|
497
|
+
*/
|
|
498
|
+
this.triggerValuesLimit = 0;
|
|
499
|
+
/** Classes to be passed to the overlay backdrop. */
|
|
347
500
|
this.backdropClass = 'cdk-overlay-transparent-backdrop';
|
|
348
501
|
/**
|
|
349
|
-
* Whether to use a multiline matcher or not. Default is false
|
|
502
|
+
* Whether to use a multiline matcher or not. Default is false.
|
|
503
|
+
* When true, allows multiple lines of text in the selected value display.
|
|
350
504
|
*/
|
|
351
505
|
this.multiline = false;
|
|
352
506
|
this._searchMinOptionsThreshold = this.resolveSearchMinOptionsThreshold(this.defaultOptions?.searchMinOptionsThreshold);
|
|
353
507
|
/** Combined stream of all of the child options' change events. */
|
|
354
508
|
this.optionSelectionChanges = defer(() => {
|
|
355
509
|
if (this.options) {
|
|
356
|
-
return merge(...this.options.map((option) => option.onSelectionChange),
|
|
510
|
+
return merge(...this.options.map((option) => option.onSelectionChange), this.options.changes.pipe(switchMap((list) => list.length ? merge(...list.map((option) => option.onSelectionChange)) : EMPTY)), this.selectionModel.changed.pipe(startWith(null), switchMap(() => {
|
|
511
|
+
const optionsSet = new Set(this.options.toArray());
|
|
512
|
+
const virtualSelected = this.selectionModel.selected.filter((option) => !optionsSet.has(option));
|
|
513
|
+
return virtualSelected.length
|
|
514
|
+
? merge(...virtualSelected.map((option) => option.onSelectionChange))
|
|
515
|
+
: EMPTY;
|
|
516
|
+
})));
|
|
357
517
|
}
|
|
358
518
|
return this._ngZone.onStable.asObservable().pipe(take(1), switchMap(() => this.optionSelectionChanges));
|
|
359
519
|
});
|
|
360
|
-
/** Event emitted when the select panel has been toggled. */
|
|
520
|
+
/** Event emitted when the select panel has been toggled. Emits true when opened, false when closed. */
|
|
361
521
|
this.openedChange = new EventEmitter();
|
|
522
|
+
/** Event emitted before the select panel starts opening. */
|
|
523
|
+
this.beforeOpened = output();
|
|
362
524
|
/** Event emitted when the select has been opened. */
|
|
363
525
|
this.openedStream = this.openedChange.pipe(filter((o) => o), map(() => { }));
|
|
364
526
|
/** Event emitted when the select has been closed. */
|
|
@@ -380,24 +542,33 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
380
542
|
*/
|
|
381
543
|
this.panelWidth = this.defaultOptions?.panelWidth || null;
|
|
382
544
|
/**
|
|
383
|
-
* Minimum width of the panel.
|
|
545
|
+
* Minimum width of the panel in pixels.
|
|
384
546
|
* If minWidth is larger than window width, it will be ignored.
|
|
385
547
|
*/
|
|
386
548
|
this.panelMinWidth = this.defaultOptions?.panelMinWidth ?? 200;
|
|
387
549
|
this._tabIndex = 0;
|
|
388
550
|
this._disabled = false;
|
|
551
|
+
/** Whether the select panel is currently open. */
|
|
389
552
|
this.panelOpen = false;
|
|
390
553
|
this._focused = false;
|
|
554
|
+
/** Subscription to the close event of the overlay. */
|
|
391
555
|
this.closeSubscription = Subscription.EMPTY;
|
|
392
556
|
/** The scroll position of the overlay panel, calculated to center the selected option. */
|
|
393
557
|
this.scrollTop = 0;
|
|
394
|
-
/** Unique id for this input. */
|
|
558
|
+
/** Unique id for this input. Auto-incremented for each instance. */
|
|
395
559
|
this.uid = `kbq-select-${nextUniqueId++}`;
|
|
560
|
+
/** Subject that emits when the component visibility changes. */
|
|
396
561
|
this.visibleChanges = new BehaviorSubject(false);
|
|
562
|
+
/** Flag indicating if the dropdown class has been added to the overlay container. */
|
|
563
|
+
this.classAddedToOverlayContainer = false;
|
|
397
564
|
/** `View -> model callback called when value changes` */
|
|
398
565
|
this.onChange = () => { };
|
|
399
566
|
/** `View -> model callback called when select has been touched` */
|
|
400
567
|
this.onTouched = () => { };
|
|
568
|
+
/**
|
|
569
|
+
* Calculates the number of hidden items in multiple selection mode.
|
|
570
|
+
* Updates the hiddenItems property and triggers change detection.
|
|
571
|
+
*/
|
|
401
572
|
this.calculateHiddenItems = () => {
|
|
402
573
|
if (!this.isBrowser ||
|
|
403
574
|
this.customTrigger ||
|
|
@@ -429,6 +600,7 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
429
600
|
}
|
|
430
601
|
this._changeDetectorRef.markForCheck();
|
|
431
602
|
};
|
|
603
|
+
/** Updates locale parameters from the locale service. */
|
|
432
604
|
this.updateLocaleParams = () => {
|
|
433
605
|
this.hiddenItemsText = this.localeService?.getParams('select').hiddenItemsText;
|
|
434
606
|
this._changeDetectorRef.markForCheck();
|
|
@@ -451,6 +623,7 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
451
623
|
}
|
|
452
624
|
});
|
|
453
625
|
}
|
|
626
|
+
/** Lifecycle hook called after component initialization. Initializes selection model and subscriptions. */
|
|
454
627
|
ngOnInit() {
|
|
455
628
|
this.selectionModel = new SelectionModel(this.multiSelection);
|
|
456
629
|
this.stateChanges.next();
|
|
@@ -481,12 +654,14 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
481
654
|
}
|
|
482
655
|
}, 0));
|
|
483
656
|
}
|
|
657
|
+
/** Lifecycle hook for change detection. Updates visibility and error state. */
|
|
484
658
|
ngDoCheck() {
|
|
485
659
|
this.visibleChanges.next(this.isVisible());
|
|
486
660
|
if (this.ngControl) {
|
|
487
661
|
this.updateErrorState();
|
|
488
662
|
}
|
|
489
663
|
}
|
|
664
|
+
/** Lifecycle hook after content initialization. Sets up key manager and option subscriptions. */
|
|
490
665
|
ngAfterContentInit() {
|
|
491
666
|
this.withVirtualScroll = !!this.cdkVirtualForOf;
|
|
492
667
|
this.initKeyManager();
|
|
@@ -502,10 +677,13 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
502
677
|
.pipe(takeUntilDestroyed(this.destroyRef), delay(0), filter(() => !this.keyManager.activeItem))
|
|
503
678
|
.subscribe(() => this.keyManager.updateActiveItem(0));
|
|
504
679
|
}
|
|
680
|
+
/** Lifecycle hook when component is destroyed. Cleans up subscriptions. */
|
|
505
681
|
ngOnDestroy() {
|
|
506
682
|
this.stateChanges.complete();
|
|
507
683
|
this.closeSubscription.unsubscribe();
|
|
684
|
+
clearTimeout(this.openPanelTimeout);
|
|
508
685
|
}
|
|
686
|
+
/** Updates the error state based on the error state matcher. */
|
|
509
687
|
updateErrorState() {
|
|
510
688
|
const oldState = this.errorState;
|
|
511
689
|
const parent = this.parentFormGroup || this.parentForm;
|
|
@@ -517,19 +695,30 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
517
695
|
this.stateChanges.next();
|
|
518
696
|
}
|
|
519
697
|
}
|
|
698
|
+
/**
|
|
699
|
+
* Formats the hidden items text with the number of hidden items.
|
|
700
|
+
* @param hiddenItemsText Template string with {{ number }} placeholder.
|
|
701
|
+
* @param hiddenItems Number of hidden items to display.
|
|
702
|
+
* @returns Formatted string with the number of hidden items.
|
|
703
|
+
*/
|
|
520
704
|
hiddenItemsTextFormatter(hiddenItemsText, hiddenItems) {
|
|
521
705
|
return hiddenItemsText.replace('{{ number }}', hiddenItems.toString());
|
|
522
706
|
}
|
|
707
|
+
/**
|
|
708
|
+
* Clears the current selection.
|
|
709
|
+
* @param $event Mouse event to prevent default behavior.
|
|
710
|
+
*/
|
|
523
711
|
clearValue($event) {
|
|
524
712
|
// need to prevent opening
|
|
525
713
|
$event.stopPropagation();
|
|
526
714
|
// need to prevent scrolling
|
|
527
715
|
$event.preventDefault();
|
|
528
|
-
this.selectionModel.clear();
|
|
716
|
+
this.selectionModel.clear(false);
|
|
529
717
|
this.keyManager.setActiveItem(-1);
|
|
530
718
|
this.propagateChanges();
|
|
531
719
|
this.focus();
|
|
532
720
|
}
|
|
721
|
+
/** Resets the search component if present. */
|
|
533
722
|
resetSearch() {
|
|
534
723
|
if (!this.search) {
|
|
535
724
|
return;
|
|
@@ -551,11 +740,32 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
551
740
|
this.open();
|
|
552
741
|
}
|
|
553
742
|
}
|
|
554
|
-
/**
|
|
743
|
+
/**
|
|
744
|
+
* Triggers the opening of the panel component.
|
|
745
|
+
* If the component is disabled or the panel is already open, the call is ignored.
|
|
746
|
+
* Otherwise, the (beforeOpened) event is emitted.
|
|
747
|
+
* When no options are available, the panel is opened after a short delay;
|
|
748
|
+
* if options exist, it opens immediately.
|
|
749
|
+
*/
|
|
555
750
|
open() {
|
|
556
|
-
if (this.disabled ||
|
|
751
|
+
if (this.disabled || this.panelOpen)
|
|
557
752
|
return;
|
|
753
|
+
this.beforeOpened.emit();
|
|
754
|
+
if (this.noOptions) {
|
|
755
|
+
clearTimeout(this.openPanelTimeout);
|
|
756
|
+
this.openPanelTimeout = setTimeout(() => this.openPanel(), delayBeforeDisplayingResultWithoutOptions);
|
|
757
|
+
}
|
|
758
|
+
else {
|
|
759
|
+
this.openPanel();
|
|
558
760
|
}
|
|
761
|
+
}
|
|
762
|
+
/**
|
|
763
|
+
* Internal method to open the panel. Handles overlay positioning and sizing.
|
|
764
|
+
* Sets up the overlay dimensions based on trigger size and configured options.
|
|
765
|
+
*/
|
|
766
|
+
openPanel() {
|
|
767
|
+
if (!this.trigger)
|
|
768
|
+
return;
|
|
559
769
|
// add check for form-field bounding rectangles, since it adds extra padding around the trigger
|
|
560
770
|
this.triggerRect = (this.parentFormField?.getConnectedOverlayOrigin().nativeElement || this.trigger.nativeElement).getBoundingClientRect();
|
|
561
771
|
// Note: The computed font-size will be a string pixel value (e.g. "16px").
|
|
@@ -588,24 +798,20 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
588
798
|
if (this.triggerFontSize && this.overlayDir.overlayRef && this.overlayDir.overlayRef.overlayElement) {
|
|
589
799
|
this.overlayDir.overlayRef.overlayElement.style.fontSize = `${this.triggerFontSize}px`;
|
|
590
800
|
}
|
|
591
|
-
|
|
592
|
-
if (overlayContainer.childNodes.length === 1) {
|
|
593
|
-
this._renderer.addClass(overlayContainer, 'cdk-overlay-container_dropdown');
|
|
594
|
-
}
|
|
801
|
+
this.addClassToOverlayContainer();
|
|
595
802
|
});
|
|
596
803
|
}
|
|
597
804
|
/** Closes the overlay panel and focuses the host element. */
|
|
598
805
|
close() {
|
|
599
|
-
if (!this.panelOpen)
|
|
806
|
+
if (!this.panelOpen)
|
|
600
807
|
return;
|
|
601
|
-
}
|
|
602
808
|
// the order of calls is important
|
|
603
809
|
this.resetSearch();
|
|
604
810
|
this.panelOpen = false;
|
|
605
811
|
this.keyManager.withHorizontalOrientation(this.isRtl() ? 'rtl' : 'ltr');
|
|
606
812
|
this._changeDetectorRef.markForCheck();
|
|
607
813
|
this.onTouched();
|
|
608
|
-
this.
|
|
814
|
+
this.removeClassFromOverlayContainer();
|
|
609
815
|
}
|
|
610
816
|
/**
|
|
611
817
|
* Sets the select's value. Part of the ControlValueAccessor interface
|
|
@@ -650,13 +856,21 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
650
856
|
this._changeDetectorRef.markForCheck();
|
|
651
857
|
this.stateChanges.next();
|
|
652
858
|
}
|
|
859
|
+
/**
|
|
860
|
+
* Checks if the current direction is RTL (right-to-left).
|
|
861
|
+
* @returns True if RTL mode is active, false otherwise.
|
|
862
|
+
*/
|
|
653
863
|
isRtl() {
|
|
654
864
|
return this._dir ? this._dir.value === 'rtl' : false;
|
|
655
865
|
}
|
|
866
|
+
/**
|
|
867
|
+
* Handles all keyboard events for the select.
|
|
868
|
+
* Delegates to appropriate handler based on panel state.
|
|
869
|
+
* @param event The keyboard event to handle.
|
|
870
|
+
*/
|
|
656
871
|
handleKeydown(event) {
|
|
657
|
-
if (this.disabled)
|
|
872
|
+
if (this.disabled)
|
|
658
873
|
return;
|
|
659
|
-
}
|
|
660
874
|
if (this.panelOpen) {
|
|
661
875
|
this.handleOpenKeydown(event);
|
|
662
876
|
}
|
|
@@ -664,6 +878,7 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
664
878
|
this.handleClosedKeydown(event);
|
|
665
879
|
}
|
|
666
880
|
}
|
|
881
|
+
/** Handles focus event on the select element. */
|
|
667
882
|
onFocus() {
|
|
668
883
|
if (!this.disabled) {
|
|
669
884
|
this._focused = true;
|
|
@@ -689,6 +904,7 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
689
904
|
}
|
|
690
905
|
/**
|
|
691
906
|
* Callback that is invoked when the overlay panel has been attached.
|
|
907
|
+
* Sets up position change subscription and closing actions.
|
|
692
908
|
*/
|
|
693
909
|
onAttached() {
|
|
694
910
|
this.overlayDir.positionChange.pipe(take(1)).subscribe(() => {
|
|
@@ -700,7 +916,7 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
700
916
|
this.options.changes.pipe(delay(1)).subscribe(() => this.setOverlayPosition());
|
|
701
917
|
this.closeSubscription = this.closingActions().subscribe(() => this.close());
|
|
702
918
|
}
|
|
703
|
-
/** Returns the theme to be used on the panel. */
|
|
919
|
+
/** Returns the theme to be used on the panel based on parent form field color. */
|
|
704
920
|
getPanelTheme() {
|
|
705
921
|
return this.parentFormField ? `kbq-${this.parentFormField.color}` : '';
|
|
706
922
|
}
|
|
@@ -715,14 +931,27 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
715
931
|
onContainerClick() {
|
|
716
932
|
this.focus();
|
|
717
933
|
}
|
|
718
|
-
/**
|
|
934
|
+
/**
|
|
935
|
+
* Handles removal of a matched item in the trigger.
|
|
936
|
+
* @param option The option to remove from selection.
|
|
937
|
+
* @param $event The mouse event that triggered the removal.
|
|
938
|
+
*/
|
|
719
939
|
onRemoveMatcherItem(option, $event) {
|
|
720
940
|
$event.stopPropagation();
|
|
721
941
|
option.deselect();
|
|
722
942
|
}
|
|
943
|
+
/**
|
|
944
|
+
* Gets the height of a single option item.
|
|
945
|
+
* @returns The height in pixels of the first option, or 0 if no options exist.
|
|
946
|
+
*/
|
|
723
947
|
getItemHeight() {
|
|
724
948
|
return this.options.first ? this.options.first.getHeight() : 0;
|
|
725
949
|
}
|
|
950
|
+
/**
|
|
951
|
+
* Handles click events on the select.
|
|
952
|
+
* Closes the panel if click is inside the footer.
|
|
953
|
+
* @param $event The mouse event to handle.
|
|
954
|
+
*/
|
|
726
955
|
handleClick($event) {
|
|
727
956
|
if (this.footer?.nativeElement.contains($event.target)) {
|
|
728
957
|
this.close();
|
|
@@ -761,20 +990,29 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
761
990
|
}
|
|
762
991
|
/** @docs-private */
|
|
763
992
|
shouldShowSearch() {
|
|
764
|
-
return isUndefined(this.searchMinOptionsThreshold) ||
|
|
993
|
+
return (isUndefined(this.searchMinOptionsThreshold) ||
|
|
994
|
+
!!this.search.value() ||
|
|
995
|
+
this.options.length >= this.searchMinOptionsThreshold);
|
|
765
996
|
}
|
|
997
|
+
/** Checks if the component is currently visible in the viewport. */
|
|
766
998
|
isVisible() {
|
|
767
999
|
return this.elementRef.nativeElement.offsetTop < this.elementRef.nativeElement.offsetHeight;
|
|
768
1000
|
}
|
|
1001
|
+
/** Gets the current overlay position index in the container. */
|
|
769
1002
|
currentOverlayPosition() {
|
|
770
1003
|
const element = this.overlayDir.overlayRef.hostElement;
|
|
771
1004
|
return Array.from(this.overlayContainer.getContainerElement().childNodes).findIndex((node) => {
|
|
772
1005
|
return node.firstChild?.['id'] === element.firstChild?.['id'];
|
|
773
1006
|
});
|
|
774
1007
|
}
|
|
1008
|
+
/** Gets the position index of modal overlay in the container. */
|
|
775
1009
|
modalOverlayPosition() {
|
|
776
1010
|
return Array.from(this.overlayContainer.getContainerElement().childNodes).findIndex((childNode) => childNode.classList.contains('kbq-modal-overlay'));
|
|
777
1011
|
}
|
|
1012
|
+
/**
|
|
1013
|
+
* Creates an observable of actions that should close the select panel.
|
|
1014
|
+
* Includes outside pointer events and overlay detachments.
|
|
1015
|
+
*/
|
|
778
1016
|
closingActions() {
|
|
779
1017
|
// used for calling toggle on select from outside of component
|
|
780
1018
|
const outsidePointerEvents = this.overlayDir
|
|
@@ -788,15 +1026,18 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
788
1026
|
}));
|
|
789
1027
|
return merge(outsidePointerEvents, this.overlayDir.overlayRef.detachments());
|
|
790
1028
|
}
|
|
1029
|
+
/** Gets the height of the options container element. */
|
|
791
1030
|
getHeightOfOptionsContainer() {
|
|
792
1031
|
return this.optionsContainer.nativeElement.getClientRects()[0]?.height;
|
|
793
1032
|
}
|
|
1033
|
+
/** Updates the keyboard manager scroll size based on options container height. */
|
|
794
1034
|
updateScrollSize() {
|
|
795
1035
|
if (!this.options.first) {
|
|
796
1036
|
return;
|
|
797
1037
|
}
|
|
798
1038
|
this.keyManager.withScrollSize(Math.floor(this.getHeightOfOptionsContainer() / this.options.first.getHeight()));
|
|
799
1039
|
}
|
|
1040
|
+
/** Calculates the total width of all selected items in the matcher. */
|
|
800
1041
|
getTotalItemsWidthInMatcher() {
|
|
801
1042
|
const triggerClone = this.buildTriggerClone();
|
|
802
1043
|
triggerClone.querySelector('.kbq-select__match-hidden-text')?.remove();
|
|
@@ -807,6 +1048,11 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
807
1048
|
triggerClone.remove();
|
|
808
1049
|
return totalItemsWidth;
|
|
809
1050
|
}
|
|
1051
|
+
/**
|
|
1052
|
+
* Calculates the width of a single item including margins.
|
|
1053
|
+
* @param element The DOM element to measure.
|
|
1054
|
+
* @returns Total width including margins and gap.
|
|
1055
|
+
*/
|
|
810
1056
|
getItemWidth(element) {
|
|
811
1057
|
const computedStyle = this.window.getComputedStyle(element);
|
|
812
1058
|
const width = parseInt(computedStyle.width);
|
|
@@ -828,7 +1074,7 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
828
1074
|
this.keyManager.onKeydown(event);
|
|
829
1075
|
}
|
|
830
1076
|
}
|
|
831
|
-
/** Handles keyboard events when the
|
|
1077
|
+
/** Handles keyboard events when the select is open. */
|
|
832
1078
|
handleOpenKeydown(event) {
|
|
833
1079
|
const keyCode = event.keyCode;
|
|
834
1080
|
const isArrowKey = keyCode === DOWN_ARROW || keyCode === UP_ARROW;
|
|
@@ -879,6 +1125,10 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
879
1125
|
}
|
|
880
1126
|
}
|
|
881
1127
|
}
|
|
1128
|
+
/**
|
|
1129
|
+
* Initializes the selection based on the current value.
|
|
1130
|
+
* Defers execution to avoid change detection errors.
|
|
1131
|
+
*/
|
|
882
1132
|
initializeSelection() {
|
|
883
1133
|
// Defer setting the value in order to avoid the "Expression
|
|
884
1134
|
// has changed after it was checked" errors from Angular.
|
|
@@ -887,8 +1137,9 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
887
1137
|
});
|
|
888
1138
|
}
|
|
889
1139
|
/**
|
|
890
|
-
* Sets the selected option based on a value.
|
|
891
|
-
* found with the designated value, the select trigger is cleared.
|
|
1140
|
+
* Sets the selected option based on a value.
|
|
1141
|
+
* If no option can be found with the designated value, the select trigger is cleared.
|
|
1142
|
+
* @param value The value to select. Can be a single value or array for multiple selection.
|
|
892
1143
|
*/
|
|
893
1144
|
setSelectionByValue(value) {
|
|
894
1145
|
this.previousSelectionModelSelected = this.selectionModel.selected;
|
|
@@ -911,6 +1162,11 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
911
1162
|
}
|
|
912
1163
|
this._changeDetectorRef.markForCheck();
|
|
913
1164
|
}
|
|
1165
|
+
/**
|
|
1166
|
+
* Finds the option that corresponds to the given value.
|
|
1167
|
+
* @param value The value to find.
|
|
1168
|
+
* @returns The matching option or undefined if not found.
|
|
1169
|
+
*/
|
|
914
1170
|
getCorrespondOption(value) {
|
|
915
1171
|
return [
|
|
916
1172
|
...this.options.toArray(),
|
|
@@ -947,6 +1203,9 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
947
1203
|
this.selectionModel.select(kbqVirtualOption);
|
|
948
1204
|
}
|
|
949
1205
|
}
|
|
1206
|
+
else if (this.showPreselectedValues) {
|
|
1207
|
+
this.selectionModel.select(new KbqVirtualOption(value));
|
|
1208
|
+
}
|
|
950
1209
|
return correspondingOption;
|
|
951
1210
|
}
|
|
952
1211
|
/** Sets up a key manager to listen to keyboard events on the overlay panel. */
|
|
@@ -979,7 +1238,7 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
979
1238
|
});
|
|
980
1239
|
// Listen to changes in the internal state of the options and react accordingly.
|
|
981
1240
|
// Handles cases like the labels of the selected options changing.
|
|
982
|
-
merge(...this.options.map((option) => option.stateChanges))
|
|
1241
|
+
(this.options.length ? merge(...this.options.map((option) => option.stateChanges)) : EMPTY)
|
|
983
1242
|
.pipe(takeUntilDestroyed(this.destroyRef), takeUntil(this.options.changes))
|
|
984
1243
|
.subscribe(() => {
|
|
985
1244
|
this._changeDetectorRef.markForCheck();
|
|
@@ -1013,7 +1272,7 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
1013
1272
|
}
|
|
1014
1273
|
this.stateChanges.next();
|
|
1015
1274
|
}
|
|
1016
|
-
/** Sorts the selected values
|
|
1275
|
+
/** Sorts the selected values based on their order in the panel. */
|
|
1017
1276
|
sortValues() {
|
|
1018
1277
|
if (this.multiSelection) {
|
|
1019
1278
|
const options = this.options.toArray();
|
|
@@ -1075,6 +1334,10 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
1075
1334
|
}
|
|
1076
1335
|
});
|
|
1077
1336
|
}
|
|
1337
|
+
/**
|
|
1338
|
+
* Calculates the total width and count of visible items.
|
|
1339
|
+
* @returns Tuple of [totalVisibleItemsWidth, visibleItemsCount].
|
|
1340
|
+
*/
|
|
1078
1341
|
getTotalVisibleItems() {
|
|
1079
1342
|
const triggerClone = this.buildTriggerClone();
|
|
1080
1343
|
this._renderer.setStyle(triggerClone.querySelector('.kbq-select__match-hidden-text'), 'display', 'block');
|
|
@@ -1090,6 +1353,10 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
1090
1353
|
triggerClone.remove();
|
|
1091
1354
|
return [totalVisibleItemsWidth, visibleItemsCount];
|
|
1092
1355
|
}
|
|
1356
|
+
/**
|
|
1357
|
+
* Creates a hidden clone of the trigger element for width calculations.
|
|
1358
|
+
* @returns Clone of the trigger element positioned off-screen.
|
|
1359
|
+
*/
|
|
1093
1360
|
buildTriggerClone() {
|
|
1094
1361
|
const triggerClone = this.trigger.nativeElement.cloneNode(true);
|
|
1095
1362
|
this._renderer.setStyle(triggerClone, 'position', 'absolute');
|
|
@@ -1098,17 +1365,31 @@ class KbqSelect extends KbqAbstractSelect {
|
|
|
1098
1365
|
this._renderer.setStyle(triggerClone, 'left', '0');
|
|
1099
1366
|
return triggerClone;
|
|
1100
1367
|
}
|
|
1101
|
-
/**
|
|
1102
|
-
|
|
1368
|
+
/** Adds the dropdown class to the overlay container when first select opens. */
|
|
1369
|
+
addClassToOverlayContainer() {
|
|
1370
|
+
const overlayContainer = this.overlayContainer?.getContainerElement();
|
|
1371
|
+
if (overlayContainer.childNodes.length === 1) {
|
|
1372
|
+
this.classAddedToOverlayContainer = true;
|
|
1373
|
+
this._renderer.addClass(overlayContainer, 'cdk-overlay-container_dropdown');
|
|
1374
|
+
}
|
|
1375
|
+
}
|
|
1376
|
+
/** Removes the dropdown class from the overlay container when select closes. */
|
|
1377
|
+
removeClassFromOverlayContainer() {
|
|
1378
|
+
if (this.classAddedToOverlayContainer) {
|
|
1379
|
+
this._renderer.removeClass(this.overlayContainer.getContainerElement(), 'cdk-overlay-container_dropdown');
|
|
1380
|
+
}
|
|
1381
|
+
}
|
|
1382
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: KbqSelect, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i1$1.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, host: true, optional: true }, { token: i4.NgControl, optional: true, self: true }, { token: KBQ_SELECT_SCROLL_STRATEGY }, { token: KBQ_LOCALE_SERVICE, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1383
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.20", type: KbqSelect, isStandalone: true, selector: "kbq-select", inputs: { hiddenItemsText: "hiddenItemsText", showPreselectedValues: "showPreselectedValues", triggerValuesLimit: "triggerValuesLimit", panelClass: "panelClass", backdropClass: "backdropClass", errorStateMatcher: "errorStateMatcher", sortComparator: "sortComparator", multiline: ["multiline", "multiline", booleanAttribute], searchMinOptionsThreshold: "searchMinOptionsThreshold", hasBackdrop: "hasBackdrop", placeholder: "placeholder", required: "required", multiple: ["multiple", "multiple", booleanAttribute], compareWith: "compareWith", selectAllHandler: "selectAllHandler", panelWidth: "panelWidth", panelMinWidth: ["panelMinWidth", "panelMinWidth", numberAttribute], value: "value", id: "id", tabIndex: ["tabIndex", "tabIndex", numberAttribute], disabled: ["disabled", "disabled", booleanAttribute], hiddenItemsTextFormatter: "hiddenItemsTextFormatter" }, outputs: { openedChange: "openedChange", beforeOpened: "beforeOpened", openedStream: "opened", closedStream: "closed", selectionChange: "selectionChange", valueChange: "valueChange" }, host: { listeners: { "click": "toggle()", "keydown": "handleKeydown($event)", "focus": "onFocus()", "blur": "onBlur()" }, properties: { "attr.tabindex": "tabIndex", "attr.disabled": "disabled || null", "class.kbq-select_multiple": "multiple", "class.kbq-select_multiline": "multiline", "class.kbq-disabled": "disabled", "class.kbq-invalid": "errorState" }, classAttribute: "kbq-select" }, providers: [
|
|
1103
1384
|
{ provide: KbqFormFieldControl, useExisting: KbqSelect },
|
|
1104
1385
|
{ provide: KBQ_OPTION_PARENT_COMPONENT, useExisting: KbqSelect },
|
|
1105
1386
|
{ provide: KBQ_PARENT_POPUP, useExisting: KbqSelect }
|
|
1106
|
-
], 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, 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_multiline]=\"multiline\"\n [class.kbq-select__trigger_multiple]=\"multiple\"\n [class.kbq-select__trigger_single]=\"!multiple\"\n>\n @if (!!customMatcher) {\n <ng-content select=\"kbq-select-matcher, [kbq-select-matcher]\" />\n } @else {\n <div class=\"kbq-select__matcher\">\n @if (empty) {\n <span class=\"kbq-select__placeholder\">\n {{ placeholder || '\\u00A0' }}\n </span>\n } @else {\n @if (!!customTrigger) {\n <ng-content select=\"kbq-select-trigger, [kbq-select-trigger]\" />\n } @else {\n <div class=\"kbq-select__match-container\">\n @if (multiSelection) {\n <div\n [class.kbq-select__match-list]=\"!multiline\"\n [class.kbq-select__multiline-match-list]=\"multiline\"\n >\n @if (!customTagTemplateRef) {\n @for (option of triggerValues; track option) {\n <kbq-tag\n [color]=\"colorForState\"\n [disabled]=\"option.disabled || disabled\"\n [selectable]=\"false\"\n >\n {{ option.viewValue }}\n @if (!option.disabled && !disabled) {\n <i\n kbq-icon=\"kbq-xmark-s_16\"\n kbqTagRemove\n (click)=\"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\n @if (!multiline) {\n <div\n class=\"kbq-select__match-hidden-text\"\n [style.display]=\"hiddenItems > 0 ? 'block' : 'none'\"\n >\n {{ hiddenItemsTextFormatter(hiddenItemsText, hiddenItems) }}\n </div>\n }\n } @else {\n <span class=\"kbq-select__matcher-text\">\n {{ triggerValue }}\n </span>\n }\n </div>\n }\n }\n\n @if (canShowCleaner) {\n <div\n class=\"kbq-select__cleaner\"\n (click)=\"clearValue($event)\"\n (keydown.enter)=\"clearValue($event)\"\n (keydown.space)=\"clearValue($event)\"\n >\n <ng-content select=\"kbq-cleaner\" />\n </div>\n }\n\n <div class=\"kbq-select__arrow-wrapper\">\n <i kbq-icon=\"kbq-chevron-down-s_16\" class=\"kbq-select__arrow\" [color]=\"colorForState\"></i>\n </div>\n </div>\n }\n</div>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayLockPosition\n [cdkConnectedOverlayBackdropClass]=\"backdropClass\"\n [cdkConnectedOverlayHasBackdrop]=\"hasBackdrop\"\n [cdkConnectedOverlayMinWidth]=\"overlayMinWidth\"\n [cdkConnectedOverlayOffsetY]=\"offsetY\"\n [cdkConnectedOverlayOpen]=\"panelOpen\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin || fallbackOverlayOrigin\"\n [cdkConnectedOverlayPanelClass]=\"overlayPanelClass\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayWidth]=\"overlayWidth\"\n (attach)=\"onAttached()\"\n (backdropClick)=\"close()\"\n (detach)=\"close()\"\n>\n <div\n #panel\n class=\"kbq-select__panel {{ getPanelTheme() }}\"\n cdkMonitorSubtreeFocus\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 && shouldShowSearch()) {\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\"\n [class.kbq-scrollbar]=\"!withVirtualScroll\"\n [@fadeInContent]=\"'showing'\"\n (@fadeInContent.done)=\"panelDoneAnimatingStream.next($event.toState)\"\n >\n @if (isEmptySearchResult) {\n <div class=\"kbq-select__no-options-message\">\n <ng-content select=\"[kbq-select-search-empty-result]\" />\n </div>\n }\n <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__trigger{display:flex;box-sizing:border-box;position:relative;cursor:pointer;min-height:calc(var(--kbq-form-field-size-height) - var(--kbq-size-border-width) * 2)}.kbq-select .kbq-select__trigger:not(.kbq-select__trigger_multiline){height:calc(var(--kbq-form-field-size-height) - var(--kbq-size-border-width) * 2)}.kbq-select .kbq-select__trigger:not(.kbq-select__trigger_multiline) .kbq-select__matcher{overflow:hidden;white-space:nowrap}.kbq-select .kbq-select__matcher{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;flex-grow:1;align-items:center}.kbq-select .kbq-select__matcher>span{flex:1;overflow:hidden}.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:var(--kbq-select-size-single-padding-vertical) var(--kbq-select-size-single-padding-right) var(--kbq-select-size-single-padding-vertical) var(--kbq-select-size-single-padding-left)}.kbq-select .kbq-select__trigger.kbq-select__trigger_multiple:not(.kbq-select__trigger_empty) .kbq-select__matcher{padding:var(--kbq-select-size-multiple-padding-vertical) var(--kbq-select-size-multiple-padding-right) var(--kbq-select-size-multiple-padding-vertical) var(--kbq-select-size-multiple-padding-left)}.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-select-size-multiple-padding-vertical) * 2);max-height:calc(var(--kbq-form-field-size-height) - var(--kbq-select-size-multiple-padding-vertical) * 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__trigger.kbq-select__trigger_multiline:not(.kbq-select__trigger_empty) .kbq-select__match-container{flex-direction:column}.kbq-select .kbq-select__trigger.kbq-select__trigger_multiline:not(.kbq-select__trigger_empty) .kbq-select__matcher{max-width:100%;padding:calc(var(--kbq-select-size-multiple-padding-vertical) - var(--kbq-size-border-width)) var(--kbq-select-size-multiple-padding-right) calc(var(--kbq-select-size-multiple-padding-vertical) - var(--kbq-size-border-width)) var(--kbq-select-size-multiple-padding-left)}.kbq-select .kbq-select__trigger.kbq-select__trigger_multiline:not(.kbq-select__trigger_empty) .kbq-select__cleaner,.kbq-select .kbq-select__trigger.kbq-select__trigger_multiline:not(.kbq-select__trigger_empty) .kbq-select__arrow-wrapper{align-self:flex-start;align-items:center;height:calc(var(--kbq-form-field-size-height) - var(--kbq-size-s));min-width:var(--kbq-form-field-size-addon-width)}.kbq-select .kbq-select__trigger.kbq-select__trigger_multiline:not(.kbq-select__trigger_empty) .kbq-select__multiline-match-list{display:flex;flex-direction:row;flex-wrap:wrap;margin-right:var(--kbq-select-size-multiple-content-gap, var(--kbq-size-xxs));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 40px;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-trigger,.kbq-select [kbq-select-trigger]{width:100%}.kbq-select .kbq-select__arrow-wrapper{display:flex;align-self:center;justify-content:center;min-width:var(--kbq-form-field-size-addon-width)}.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-option{font-size:inherit}.kbq-select__panel .kbq-select__no-options-message{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;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{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;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{box-sizing:initial}.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.kbq-control_has-validate-directive.ng-invalid,.kbq-select.kbq-invalid{color:var(--kbq-foreground-error)}.kbq-select.kbq-control_has-validate-directive.ng-invalid .kbq-select__placeholder,.kbq-select.kbq-invalid .kbq-select__placeholder{color:var(--kbq-form-field-states-error-placeholder)}.kbq-select.kbq-disabled{color:var(--kbq-states-foreground-disabled)}.kbq-select.kbq-disabled .kbq-select__placeholder{color:var(--kbq-form-field-states-disabled-placeholder)}.kbq-select__placeholder{text-overflow:ellipsis;color:var(--kbq-form-field-default-placeholder)}.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-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}\n", ".kbq-select,.kbq-tree-select,.kbq-select__panel{--kbq-select-size-single-padding-left: var(--kbq-form-field-size-infix-padding);--kbq-select-size-single-padding-right: var(--kbq-form-field-size-suffix-padding);--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: 0;--kbq-select-size-multiple-padding-right: 0;--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: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: KbqTag, selector: "kbq-tag, [kbq-tag], kbq-basic-tag, [kbq-basic-tag]", inputs: ["editable", "preventEditSubmit", "selected", "value", "selectable", "removable", "tabindex", "disabled"], outputs: ["editChange", "selectionChange", "destroyed", "removed"], exportAs: ["kbqTag"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdkMonitorFocus, selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]", outputs: ["cdkFocusChange"], exportAs: ["cdkMonitorFocus"] }, { kind: "directive", type: 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: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: KbqIconModule }, { kind: "component", type: i6.KbqIcon, selector: "[kbq-icon]", inputs: ["small", "autoColor", "kbq-icon"] }], animations: [
|
|
1387
|
+
], 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: "searchEmpty", first: true, predicate: KbqSelectSearchEmptyResult, 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, 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_multiline]=\"multiline\"\n [class.kbq-select__trigger_multiple]=\"multiple\"\n [class.kbq-select__trigger_single]=\"!multiple\"\n>\n @if (!!customMatcher) {\n <ng-content select=\"kbq-select-matcher, [kbq-select-matcher]\" />\n } @else {\n <div class=\"kbq-select__matcher\">\n @if (empty) {\n <span class=\"kbq-select__placeholder\">\n {{ placeholder || '\\u00A0' }}\n </span>\n } @else {\n @if (!!customTrigger) {\n <ng-content select=\"kbq-select-trigger, [kbq-select-trigger]\" />\n } @else {\n <div class=\"kbq-select__match-container\">\n @if (multiSelection) {\n <div\n [class.kbq-select__match-list]=\"!multiline\"\n [class.kbq-select__multiline-match-list]=\"multiline\"\n >\n @if (!customTagTemplateRef) {\n @for (option of triggerValues; track option) {\n <kbq-tag\n [color]=\"colorForState\"\n [disabled]=\"option.disabled || disabled\"\n [selectable]=\"false\"\n >\n {{ option.viewValue }}\n @if (!option.disabled && !disabled) {\n <i\n kbq-icon=\"kbq-xmark-s_16\"\n kbqTagRemove\n (click)=\"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\n @if (!multiline) {\n <div\n class=\"kbq-select__match-hidden-text\"\n [style.display]=\"hiddenItems > 0 ? 'block' : 'none'\"\n >\n {{ hiddenItemsTextFormatter(hiddenItemsText, hiddenItems) }}\n </div>\n }\n } @else {\n <span class=\"kbq-select__matcher-text\">\n {{ triggerValue }}\n </span>\n }\n </div>\n }\n }\n\n @if (canShowCleaner) {\n <div\n class=\"kbq-select__cleaner\"\n (click)=\"clearValue($event)\"\n (keydown.enter)=\"clearValue($event)\"\n (keydown.space)=\"clearValue($event)\"\n >\n <ng-content select=\"kbq-cleaner\" />\n </div>\n }\n\n <div class=\"kbq-select__arrow-wrapper\">\n <i kbq-icon=\"kbq-chevron-down-s_16\" class=\"kbq-select__arrow\" [color]=\"colorForState\"></i>\n </div>\n </div>\n }\n</div>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayLockPosition\n [cdkConnectedOverlayBackdropClass]=\"backdropClass\"\n [cdkConnectedOverlayHasBackdrop]=\"hasBackdrop\"\n [cdkConnectedOverlayMinWidth]=\"overlayMinWidth\"\n [cdkConnectedOverlayOffsetY]=\"offsetY\"\n [cdkConnectedOverlayOpen]=\"panelOpen\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin || fallbackOverlayOrigin\"\n [cdkConnectedOverlayPanelClass]=\"overlayPanelClass\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayWidth]=\"overlayWidth\"\n (attach)=\"onAttached()\"\n (backdropClick)=\"close()\"\n (detach)=\"close()\"\n>\n <div\n #panel\n class=\"kbq-select__panel {{ getPanelTheme() }}\"\n cdkMonitorSubtreeFocus\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 && shouldShowSearch()) {\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\"\n [class.kbq-scrollbar]=\"!withVirtualScroll\"\n [@fadeInContent]=\"'showing'\"\n (@fadeInContent.done)=\"panelDoneAnimatingStream.next($event.toState)\"\n >\n @if (isEmptySearchResult) {\n <ng-content select=\"[kbq-select-search-empty-result]\" />\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__trigger{display:flex;box-sizing:border-box;position:relative;cursor:pointer;min-height:calc(var(--kbq-form-field-size-height) - var(--kbq-size-border-width) * 2)}.kbq-select .kbq-select__trigger:not(.kbq-select__trigger_multiline){height:calc(var(--kbq-form-field-size-height) - var(--kbq-size-border-width) * 2)}.kbq-select .kbq-select__trigger:not(.kbq-select__trigger_multiline) .kbq-select__matcher{overflow:hidden;white-space:nowrap}.kbq-select .kbq-select__matcher{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;flex-grow:1;align-items:center}.kbq-select .kbq-select__matcher>span{flex:1;overflow:hidden}.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:var(--kbq-select-size-single-padding-vertical) var(--kbq-select-size-single-padding-right) var(--kbq-select-size-single-padding-vertical) var(--kbq-select-size-single-padding-left)}.kbq-select .kbq-select__trigger.kbq-select__trigger_multiple:not(.kbq-select__trigger_empty) .kbq-select__matcher{padding:var(--kbq-select-size-multiple-padding-vertical) var(--kbq-select-size-multiple-padding-right) var(--kbq-select-size-multiple-padding-vertical) var(--kbq-select-size-multiple-padding-left)}.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-select-size-multiple-padding-vertical) * 2);max-height:calc(var(--kbq-form-field-size-height) - var(--kbq-select-size-multiple-padding-vertical) * 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__trigger.kbq-select__trigger_multiline:not(.kbq-select__trigger_empty) .kbq-select__match-container{flex-direction:column}.kbq-select .kbq-select__trigger.kbq-select__trigger_multiline:not(.kbq-select__trigger_empty) .kbq-select__matcher{max-width:100%;padding:calc(var(--kbq-select-size-multiple-padding-vertical) - var(--kbq-size-border-width)) var(--kbq-select-size-multiple-padding-right) calc(var(--kbq-select-size-multiple-padding-vertical) - var(--kbq-size-border-width)) var(--kbq-select-size-multiple-padding-left)}.kbq-select .kbq-select__trigger.kbq-select__trigger_multiline:not(.kbq-select__trigger_empty) .kbq-select__cleaner,.kbq-select .kbq-select__trigger.kbq-select__trigger_multiline:not(.kbq-select__trigger_empty) .kbq-select__arrow-wrapper{align-self:flex-start;align-items:center;height:calc(var(--kbq-form-field-size-height) - var(--kbq-size-s));min-width:var(--kbq-form-field-size-addon-width)}.kbq-select .kbq-select__trigger.kbq-select__trigger_multiline:not(.kbq-select__trigger_empty) .kbq-select__multiline-match-list{display:flex;flex-direction:row;flex-wrap:wrap;margin-right:var(--kbq-select-size-multiple-content-gap, var(--kbq-size-xxs));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 40px;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-trigger,.kbq-select [kbq-select-trigger]{width:100%}.kbq-select .kbq-select__arrow-wrapper{display:flex;align-self:center;justify-content:center;min-width:var(--kbq-form-field-size-addon-width)}.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-option{font-size:inherit}.kbq-select__panel .kbq-select__no-options-message{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;flex-direction:row;align-items:center;justify-content:center;box-sizing:border-box;position:relative;margin-bottom:var(--kbq-size-3xl);margin-top:var(--kbq-size-3xl);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{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;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{box-sizing:initial}.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.kbq-control_has-validate-directive.ng-invalid,.kbq-select.kbq-invalid{color:var(--kbq-foreground-error)}.kbq-select.kbq-control_has-validate-directive.ng-invalid .kbq-select__placeholder,.kbq-select.kbq-invalid .kbq-select__placeholder{color:var(--kbq-form-field-states-error-placeholder)}.kbq-select.kbq-disabled{color:var(--kbq-states-foreground-disabled)}.kbq-select.kbq-disabled .kbq-select__placeholder{color:var(--kbq-form-field-states-disabled-placeholder)}.kbq-select__placeholder{text-overflow:ellipsis;color:var(--kbq-form-field-default-placeholder)}.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-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}\n", ".kbq-select,.kbq-tree-select,.kbq-select__panel{--kbq-select-size-single-padding-left: 0;--kbq-select-size-single-padding-right: 0;--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: 0;--kbq-select-size-multiple-padding-right: 0;--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: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: KbqTag, selector: "kbq-tag, [kbq-tag], kbq-basic-tag, [kbq-basic-tag]", inputs: ["editable", "preventEditSubmit", "selected", "value", "selectable", "removable", "tabindex", "disabled"], outputs: ["editChange", "selectionChange", "destroyed", "removed"], exportAs: ["kbqTag"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: CdkMonitorFocus, selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]", outputs: ["cdkFocusChange"], exportAs: ["cdkMonitorFocus"] }, { kind: "directive", type: 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: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: KbqIconModule }, { kind: "component", type: i6.KbqIcon, selector: "[kbq-icon]", inputs: ["small", "autoColor", "kbq-icon"] }], animations: [
|
|
1107
1388
|
kbqSelectAnimations.transformPanel,
|
|
1108
1389
|
kbqSelectAnimations.fadeInContent
|
|
1109
1390
|
], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
1110
1391
|
}
|
|
1111
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
1392
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: KbqSelect, decorators: [{
|
|
1112
1393
|
type: Component,
|
|
1113
1394
|
args: [{ selector: 'kbq-select', imports: [
|
|
1114
1395
|
CdkOverlayOrigin,
|
|
@@ -1137,8 +1418,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImpo
|
|
|
1137
1418
|
{ provide: KbqFormFieldControl, useExisting: KbqSelect },
|
|
1138
1419
|
{ provide: KBQ_OPTION_PARENT_COMPONENT, useExisting: KbqSelect },
|
|
1139
1420
|
{ provide: KBQ_PARENT_POPUP, useExisting: KbqSelect }
|
|
1140
|
-
], 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_multiline]=\"multiline\"\n [class.kbq-select__trigger_multiple]=\"multiple\"\n [class.kbq-select__trigger_single]=\"!multiple\"\n>\n @if (!!customMatcher) {\n <ng-content select=\"kbq-select-matcher, [kbq-select-matcher]\" />\n } @else {\n <div class=\"kbq-select__matcher\">\n @if (empty) {\n <span class=\"kbq-select__placeholder\">\n {{ placeholder || '\\u00A0' }}\n </span>\n } @else {\n @if (!!customTrigger) {\n <ng-content select=\"kbq-select-trigger, [kbq-select-trigger]\" />\n } @else {\n <div class=\"kbq-select__match-container\">\n @if (multiSelection) {\n <div\n [class.kbq-select__match-list]=\"!multiline\"\n [class.kbq-select__multiline-match-list]=\"multiline\"\n >\n @if (!customTagTemplateRef) {\n @for (option of triggerValues; track option) {\n <kbq-tag\n [color]=\"colorForState\"\n [disabled]=\"option.disabled || disabled\"\n [selectable]=\"false\"\n >\n {{ option.viewValue }}\n @if (!option.disabled && !disabled) {\n <i\n kbq-icon=\"kbq-xmark-s_16\"\n kbqTagRemove\n (click)=\"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\n @if (!multiline) {\n <div\n class=\"kbq-select__match-hidden-text\"\n [style.display]=\"hiddenItems > 0 ? 'block' : 'none'\"\n >\n {{ hiddenItemsTextFormatter(hiddenItemsText, hiddenItems) }}\n </div>\n }\n } @else {\n <span class=\"kbq-select__matcher-text\">\n {{ triggerValue }}\n </span>\n }\n </div>\n }\n }\n\n @if (canShowCleaner) {\n <div\n class=\"kbq-select__cleaner\"\n (click)=\"clearValue($event)\"\n (keydown.enter)=\"clearValue($event)\"\n (keydown.space)=\"clearValue($event)\"\n >\n <ng-content select=\"kbq-cleaner\" />\n </div>\n }\n\n <div class=\"kbq-select__arrow-wrapper\">\n <i kbq-icon=\"kbq-chevron-down-s_16\" class=\"kbq-select__arrow\" [color]=\"colorForState\"></i>\n </div>\n </div>\n }\n</div>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayLockPosition\n [cdkConnectedOverlayBackdropClass]=\"backdropClass\"\n [cdkConnectedOverlayHasBackdrop]=\"hasBackdrop\"\n [cdkConnectedOverlayMinWidth]=\"overlayMinWidth\"\n [cdkConnectedOverlayOffsetY]=\"offsetY\"\n [cdkConnectedOverlayOpen]=\"panelOpen\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin || fallbackOverlayOrigin\"\n [cdkConnectedOverlayPanelClass]=\"overlayPanelClass\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayWidth]=\"overlayWidth\"\n (attach)=\"onAttached()\"\n (backdropClick)=\"close()\"\n (detach)=\"close()\"\n>\n <div\n #panel\n class=\"kbq-select__panel {{ getPanelTheme() }}\"\n cdkMonitorSubtreeFocus\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 && shouldShowSearch()) {\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\"\n [class.kbq-scrollbar]=\"!withVirtualScroll\"\n [@fadeInContent]=\"'showing'\"\n (@fadeInContent.done)=\"panelDoneAnimatingStream.next($event.toState)\"\n >\n @if (isEmptySearchResult) {\n <div class=\"kbq-select__no-options-message\">\n <ng-content select=\"[kbq-select-search-empty-result]\" />\n </div>\n }\n <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__trigger{display:flex;box-sizing:border-box;position:relative;cursor:pointer;min-height:calc(var(--kbq-form-field-size-height) - var(--kbq-size-border-width) * 2)}.kbq-select .kbq-select__trigger:not(.kbq-select__trigger_multiline){height:calc(var(--kbq-form-field-size-height) - var(--kbq-size-border-width) * 2)}.kbq-select .kbq-select__trigger:not(.kbq-select__trigger_multiline) .kbq-select__matcher{overflow:hidden;white-space:nowrap}.kbq-select .kbq-select__matcher{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;flex-grow:1;align-items:center}.kbq-select .kbq-select__matcher>span{flex:1;overflow:hidden}.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:var(--kbq-select-size-single-padding-vertical) var(--kbq-select-size-single-padding-right) var(--kbq-select-size-single-padding-vertical) var(--kbq-select-size-single-padding-left)}.kbq-select .kbq-select__trigger.kbq-select__trigger_multiple:not(.kbq-select__trigger_empty) .kbq-select__matcher{padding:var(--kbq-select-size-multiple-padding-vertical) var(--kbq-select-size-multiple-padding-right) var(--kbq-select-size-multiple-padding-vertical) var(--kbq-select-size-multiple-padding-left)}.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-select-size-multiple-padding-vertical) * 2);max-height:calc(var(--kbq-form-field-size-height) - var(--kbq-select-size-multiple-padding-vertical) * 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__trigger.kbq-select__trigger_multiline:not(.kbq-select__trigger_empty) .kbq-select__match-container{flex-direction:column}.kbq-select .kbq-select__trigger.kbq-select__trigger_multiline:not(.kbq-select__trigger_empty) .kbq-select__matcher{max-width:100%;padding:calc(var(--kbq-select-size-multiple-padding-vertical) - var(--kbq-size-border-width)) var(--kbq-select-size-multiple-padding-right) calc(var(--kbq-select-size-multiple-padding-vertical) - var(--kbq-size-border-width)) var(--kbq-select-size-multiple-padding-left)}.kbq-select .kbq-select__trigger.kbq-select__trigger_multiline:not(.kbq-select__trigger_empty) .kbq-select__cleaner,.kbq-select .kbq-select__trigger.kbq-select__trigger_multiline:not(.kbq-select__trigger_empty) .kbq-select__arrow-wrapper{align-self:flex-start;align-items:center;height:calc(var(--kbq-form-field-size-height) - var(--kbq-size-s));min-width:var(--kbq-form-field-size-addon-width)}.kbq-select .kbq-select__trigger.kbq-select__trigger_multiline:not(.kbq-select__trigger_empty) .kbq-select__multiline-match-list{display:flex;flex-direction:row;flex-wrap:wrap;margin-right:var(--kbq-select-size-multiple-content-gap, var(--kbq-size-xxs));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 40px;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-trigger,.kbq-select [kbq-select-trigger]{width:100%}.kbq-select .kbq-select__arrow-wrapper{display:flex;align-self:center;justify-content:center;min-width:var(--kbq-form-field-size-addon-width)}.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-option{font-size:inherit}.kbq-select__panel .kbq-select__no-options-message{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;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{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;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{box-sizing:initial}.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.kbq-control_has-validate-directive.ng-invalid,.kbq-select.kbq-invalid{color:var(--kbq-foreground-error)}.kbq-select.kbq-control_has-validate-directive.ng-invalid .kbq-select__placeholder,.kbq-select.kbq-invalid .kbq-select__placeholder{color:var(--kbq-form-field-states-error-placeholder)}.kbq-select.kbq-disabled{color:var(--kbq-states-foreground-disabled)}.kbq-select.kbq-disabled .kbq-select__placeholder{color:var(--kbq-form-field-states-disabled-placeholder)}.kbq-select__placeholder{text-overflow:ellipsis;color:var(--kbq-form-field-default-placeholder)}.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-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}\n", ".kbq-select,.kbq-tree-select,.kbq-select__panel{--kbq-select-size-single-padding-left: var(--kbq-form-field-size-infix-padding);--kbq-select-size-single-padding-right: var(--kbq-form-field-size-suffix-padding);--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: 0;--kbq-select-size-multiple-padding-right: 0;--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"] }]
|
|
1141
|
-
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i1.ErrorStateMatcher }, { type: i0.ElementRef }, { type: i2.OverlayContainer }, { type: i3.Directionality, decorators: [{
|
|
1421
|
+
], 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_multiline]=\"multiline\"\n [class.kbq-select__trigger_multiple]=\"multiple\"\n [class.kbq-select__trigger_single]=\"!multiple\"\n>\n @if (!!customMatcher) {\n <ng-content select=\"kbq-select-matcher, [kbq-select-matcher]\" />\n } @else {\n <div class=\"kbq-select__matcher\">\n @if (empty) {\n <span class=\"kbq-select__placeholder\">\n {{ placeholder || '\\u00A0' }}\n </span>\n } @else {\n @if (!!customTrigger) {\n <ng-content select=\"kbq-select-trigger, [kbq-select-trigger]\" />\n } @else {\n <div class=\"kbq-select__match-container\">\n @if (multiSelection) {\n <div\n [class.kbq-select__match-list]=\"!multiline\"\n [class.kbq-select__multiline-match-list]=\"multiline\"\n >\n @if (!customTagTemplateRef) {\n @for (option of triggerValues; track option) {\n <kbq-tag\n [color]=\"colorForState\"\n [disabled]=\"option.disabled || disabled\"\n [selectable]=\"false\"\n >\n {{ option.viewValue }}\n @if (!option.disabled && !disabled) {\n <i\n kbq-icon=\"kbq-xmark-s_16\"\n kbqTagRemove\n (click)=\"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\n @if (!multiline) {\n <div\n class=\"kbq-select__match-hidden-text\"\n [style.display]=\"hiddenItems > 0 ? 'block' : 'none'\"\n >\n {{ hiddenItemsTextFormatter(hiddenItemsText, hiddenItems) }}\n </div>\n }\n } @else {\n <span class=\"kbq-select__matcher-text\">\n {{ triggerValue }}\n </span>\n }\n </div>\n }\n }\n\n @if (canShowCleaner) {\n <div\n class=\"kbq-select__cleaner\"\n (click)=\"clearValue($event)\"\n (keydown.enter)=\"clearValue($event)\"\n (keydown.space)=\"clearValue($event)\"\n >\n <ng-content select=\"kbq-cleaner\" />\n </div>\n }\n\n <div class=\"kbq-select__arrow-wrapper\">\n <i kbq-icon=\"kbq-chevron-down-s_16\" class=\"kbq-select__arrow\" [color]=\"colorForState\"></i>\n </div>\n </div>\n }\n</div>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayLockPosition\n [cdkConnectedOverlayBackdropClass]=\"backdropClass\"\n [cdkConnectedOverlayHasBackdrop]=\"hasBackdrop\"\n [cdkConnectedOverlayMinWidth]=\"overlayMinWidth\"\n [cdkConnectedOverlayOffsetY]=\"offsetY\"\n [cdkConnectedOverlayOpen]=\"panelOpen\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin || fallbackOverlayOrigin\"\n [cdkConnectedOverlayPanelClass]=\"overlayPanelClass\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayWidth]=\"overlayWidth\"\n (attach)=\"onAttached()\"\n (backdropClick)=\"close()\"\n (detach)=\"close()\"\n>\n <div\n #panel\n class=\"kbq-select__panel {{ getPanelTheme() }}\"\n cdkMonitorSubtreeFocus\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 && shouldShowSearch()) {\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\"\n [class.kbq-scrollbar]=\"!withVirtualScroll\"\n [@fadeInContent]=\"'showing'\"\n (@fadeInContent.done)=\"panelDoneAnimatingStream.next($event.toState)\"\n >\n @if (isEmptySearchResult) {\n <ng-content select=\"[kbq-select-search-empty-result]\" />\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__trigger{display:flex;box-sizing:border-box;position:relative;cursor:pointer;min-height:calc(var(--kbq-form-field-size-height) - var(--kbq-size-border-width) * 2)}.kbq-select .kbq-select__trigger:not(.kbq-select__trigger_multiline){height:calc(var(--kbq-form-field-size-height) - var(--kbq-size-border-width) * 2)}.kbq-select .kbq-select__trigger:not(.kbq-select__trigger_multiline) .kbq-select__matcher{overflow:hidden;white-space:nowrap}.kbq-select .kbq-select__matcher{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;flex-grow:1;align-items:center}.kbq-select .kbq-select__matcher>span{flex:1;overflow:hidden}.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:var(--kbq-select-size-single-padding-vertical) var(--kbq-select-size-single-padding-right) var(--kbq-select-size-single-padding-vertical) var(--kbq-select-size-single-padding-left)}.kbq-select .kbq-select__trigger.kbq-select__trigger_multiple:not(.kbq-select__trigger_empty) .kbq-select__matcher{padding:var(--kbq-select-size-multiple-padding-vertical) var(--kbq-select-size-multiple-padding-right) var(--kbq-select-size-multiple-padding-vertical) var(--kbq-select-size-multiple-padding-left)}.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-select-size-multiple-padding-vertical) * 2);max-height:calc(var(--kbq-form-field-size-height) - var(--kbq-select-size-multiple-padding-vertical) * 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__trigger.kbq-select__trigger_multiline:not(.kbq-select__trigger_empty) .kbq-select__match-container{flex-direction:column}.kbq-select .kbq-select__trigger.kbq-select__trigger_multiline:not(.kbq-select__trigger_empty) .kbq-select__matcher{max-width:100%;padding:calc(var(--kbq-select-size-multiple-padding-vertical) - var(--kbq-size-border-width)) var(--kbq-select-size-multiple-padding-right) calc(var(--kbq-select-size-multiple-padding-vertical) - var(--kbq-size-border-width)) var(--kbq-select-size-multiple-padding-left)}.kbq-select .kbq-select__trigger.kbq-select__trigger_multiline:not(.kbq-select__trigger_empty) .kbq-select__cleaner,.kbq-select .kbq-select__trigger.kbq-select__trigger_multiline:not(.kbq-select__trigger_empty) .kbq-select__arrow-wrapper{align-self:flex-start;align-items:center;height:calc(var(--kbq-form-field-size-height) - var(--kbq-size-s));min-width:var(--kbq-form-field-size-addon-width)}.kbq-select .kbq-select__trigger.kbq-select__trigger_multiline:not(.kbq-select__trigger_empty) .kbq-select__multiline-match-list{display:flex;flex-direction:row;flex-wrap:wrap;margin-right:var(--kbq-select-size-multiple-content-gap, var(--kbq-size-xxs));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 40px;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-trigger,.kbq-select [kbq-select-trigger]{width:100%}.kbq-select .kbq-select__arrow-wrapper{display:flex;align-self:center;justify-content:center;min-width:var(--kbq-form-field-size-addon-width)}.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-option{font-size:inherit}.kbq-select__panel .kbq-select__no-options-message{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;flex-direction:row;align-items:center;justify-content:center;box-sizing:border-box;position:relative;margin-bottom:var(--kbq-size-3xl);margin-top:var(--kbq-size-3xl);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{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;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{box-sizing:initial}.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.kbq-control_has-validate-directive.ng-invalid,.kbq-select.kbq-invalid{color:var(--kbq-foreground-error)}.kbq-select.kbq-control_has-validate-directive.ng-invalid .kbq-select__placeholder,.kbq-select.kbq-invalid .kbq-select__placeholder{color:var(--kbq-form-field-states-error-placeholder)}.kbq-select.kbq-disabled{color:var(--kbq-states-foreground-disabled)}.kbq-select.kbq-disabled .kbq-select__placeholder{color:var(--kbq-form-field-states-disabled-placeholder)}.kbq-select__placeholder{text-overflow:ellipsis;color:var(--kbq-form-field-default-placeholder)}.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-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}\n", ".kbq-select,.kbq-tree-select,.kbq-select__panel{--kbq-select-size-single-padding-left: 0;--kbq-select-size-single-padding-right: 0;--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: 0;--kbq-select-size-multiple-padding-right: 0;--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"] }]
|
|
1422
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i1$1.ErrorStateMatcher }, { type: i0.ElementRef }, { type: i2.OverlayContainer }, { type: i3.Directionality, decorators: [{
|
|
1142
1423
|
type: Optional
|
|
1143
1424
|
}] }, { type: i4.NgForm, decorators: [{
|
|
1144
1425
|
type: Optional
|
|
@@ -1155,7 +1436,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImpo
|
|
|
1155
1436
|
}] }, { type: undefined, decorators: [{
|
|
1156
1437
|
type: Inject,
|
|
1157
1438
|
args: [KBQ_SELECT_SCROLL_STRATEGY]
|
|
1158
|
-
}] }, { type: i1.KbqLocaleService, decorators: [{
|
|
1439
|
+
}] }, { type: i1$1.KbqLocaleService, decorators: [{
|
|
1159
1440
|
type: Optional
|
|
1160
1441
|
}, {
|
|
1161
1442
|
type: Inject,
|
|
@@ -1202,8 +1483,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImpo
|
|
|
1202
1483
|
}], search: [{
|
|
1203
1484
|
type: ContentChild,
|
|
1204
1485
|
args: [KbqSelectSearch, { static: false }]
|
|
1486
|
+
}], searchEmpty: [{
|
|
1487
|
+
type: ContentChild,
|
|
1488
|
+
args: [KbqSelectSearchEmptyResult, { static: false }]
|
|
1205
1489
|
}], hiddenItemsText: [{
|
|
1206
1490
|
type: Input
|
|
1491
|
+
}], showPreselectedValues: [{
|
|
1492
|
+
type: Input
|
|
1493
|
+
}], triggerValuesLimit: [{
|
|
1494
|
+
type: Input
|
|
1207
1495
|
}], panelClass: [{
|
|
1208
1496
|
type: Input
|
|
1209
1497
|
}], backdropClass: [{
|
|
@@ -1262,8 +1550,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImpo
|
|
|
1262
1550
|
}] } });
|
|
1263
1551
|
|
|
1264
1552
|
class KbqSelectModule {
|
|
1265
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.
|
|
1266
|
-
/** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.
|
|
1553
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: KbqSelectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
1554
|
+
/** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.20", ngImport: i0, type: KbqSelectModule, imports: [OverlayModule,
|
|
1267
1555
|
KbqOptionModule,
|
|
1268
1556
|
KbqIconModule,
|
|
1269
1557
|
KbqTagsModule,
|
|
@@ -1277,7 +1565,11 @@ class KbqSelectModule {
|
|
|
1277
1565
|
NgTemplateOutlet,
|
|
1278
1566
|
A11yModule,
|
|
1279
1567
|
KbqSelect,
|
|
1280
|
-
KbqOptionTooltip
|
|
1568
|
+
KbqOptionTooltip,
|
|
1569
|
+
KbqSelectLoading,
|
|
1570
|
+
KbqSelectError,
|
|
1571
|
+
KbqSelectNoOptions,
|
|
1572
|
+
KbqSelectErrorText], exports: [KbqSelect,
|
|
1281
1573
|
KbqOptionTooltip,
|
|
1282
1574
|
KbqOptionModule,
|
|
1283
1575
|
KbqSelectSearch,
|
|
@@ -1285,17 +1577,22 @@ class KbqSelectModule {
|
|
|
1285
1577
|
KbqSelectMatcher,
|
|
1286
1578
|
KbqSelectTrigger,
|
|
1287
1579
|
KbqSelectSearchEmptyResult,
|
|
1288
|
-
|
|
1289
|
-
|
|
1580
|
+
KbqSelectLoading,
|
|
1581
|
+
KbqFormFieldModule,
|
|
1582
|
+
KbqSelectError,
|
|
1583
|
+
KbqSelectNoOptions,
|
|
1584
|
+
KbqSelectErrorText] }); }
|
|
1585
|
+
/** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: KbqSelectModule, providers: [KBQ_SELECT_SCROLL_STRATEGY_PROVIDER], imports: [OverlayModule,
|
|
1290
1586
|
KbqOptionModule,
|
|
1291
1587
|
KbqIconModule,
|
|
1292
1588
|
KbqTagsModule,
|
|
1293
1589
|
KbqToolTipModule,
|
|
1294
1590
|
A11yModule,
|
|
1295
|
-
KbqSelect,
|
|
1591
|
+
KbqSelect,
|
|
1592
|
+
KbqSelectLoading, KbqOptionModule,
|
|
1296
1593
|
KbqFormFieldModule] }); }
|
|
1297
1594
|
}
|
|
1298
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.
|
|
1595
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: KbqSelectModule, decorators: [{
|
|
1299
1596
|
type: NgModule,
|
|
1300
1597
|
args: [{
|
|
1301
1598
|
imports: [
|
|
@@ -1313,7 +1610,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImpo
|
|
|
1313
1610
|
NgTemplateOutlet,
|
|
1314
1611
|
A11yModule,
|
|
1315
1612
|
KbqSelect,
|
|
1316
|
-
KbqOptionTooltip
|
|
1613
|
+
KbqOptionTooltip,
|
|
1614
|
+
KbqSelectLoading,
|
|
1615
|
+
KbqSelectError,
|
|
1616
|
+
KbqSelectNoOptions,
|
|
1617
|
+
KbqSelectErrorText
|
|
1317
1618
|
],
|
|
1318
1619
|
exports: [
|
|
1319
1620
|
KbqSelect,
|
|
@@ -1324,7 +1625,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImpo
|
|
|
1324
1625
|
KbqSelectMatcher,
|
|
1325
1626
|
KbqSelectTrigger,
|
|
1326
1627
|
KbqSelectSearchEmptyResult,
|
|
1327
|
-
|
|
1628
|
+
KbqSelectLoading,
|
|
1629
|
+
KbqFormFieldModule,
|
|
1630
|
+
KbqSelectError,
|
|
1631
|
+
KbqSelectNoOptions,
|
|
1632
|
+
KbqSelectErrorText
|
|
1328
1633
|
],
|
|
1329
1634
|
providers: [KBQ_SELECT_SCROLL_STRATEGY_PROVIDER]
|
|
1330
1635
|
}]
|
|
@@ -1334,5 +1639,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImpo
|
|
|
1334
1639
|
* Generated bundle index. Do not edit.
|
|
1335
1640
|
*/
|
|
1336
1641
|
|
|
1337
|
-
export { KBQ_SELECT_OPTIONS, KbqOptionTooltip, KbqSelect, KbqSelectChange, KbqSelectModule, kbqSelectOptionsProvider };
|
|
1642
|
+
export { KBQ_SELECT_OPTIONS, KbqOptionTooltip, KbqSelect, KbqSelectChange, KbqSelectError, KbqSelectErrorText, KbqSelectLoading, KbqSelectModule, KbqSelectNoOptions, delayBeforeDisplayingResultWithoutOptions, kbqSelectOptionsProvider, minimumTimeToDisplayLoading };
|
|
1338
1643
|
//# sourceMappingURL=koobiq-components-select.mjs.map
|