@progress/kendo-angular-dropdowns 14.0.2-develop.15 → 14.0.2-develop.16

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.
@@ -2,8 +2,8 @@
2
2
  * Copyright © 2023 Progress Software Corporation. All rights reserved.
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
- import { Renderer2, ElementRef, EventEmitter, ViewContainerRef, TemplateRef, OnDestroy, SimpleChanges, OnChanges, ChangeDetectorRef, NgZone, AfterViewInit } from '@angular/core';
6
- import { ControlValueAccessor } from '@angular/forms';
5
+ import { Renderer2, ElementRef, EventEmitter, ViewContainerRef, TemplateRef, OnDestroy, SimpleChanges, OnChanges, ChangeDetectorRef, NgZone, AfterViewInit, Injector } from '@angular/core';
6
+ import { ControlValueAccessor, FormControl } from '@angular/forms';
7
7
  import { SearchBarComponent } from '../common/searchbar.component';
8
8
  import { ItemTemplateDirective } from '../common/templates/item-template.directive';
9
9
  import { HeaderTemplateDirective } from '../common/templates/header-template.directive';
@@ -69,6 +69,7 @@ export declare class AutoCompleteComponent implements ControlValueAccessor, OnDe
69
69
  private renderer;
70
70
  private hostElement;
71
71
  protected touchEnabled: boolean;
72
+ private injector;
72
73
  /**
73
74
  * @hidden
74
75
  */
@@ -354,9 +355,13 @@ export declare class AutoCompleteComponent implements ControlValueAccessor, OnDe
354
355
  * @hidden
355
356
  */
356
357
  get isAdaptive(): boolean;
358
+ /**
359
+ * @hidden
360
+ */
361
+ get formControl(): FormControl;
357
362
  protected onChangeCallback: Function;
358
363
  protected onTouchedCallback: Function;
359
- constructor(localization: LocalizationService, dataService: DataService, popupService: PopupService, selectionService: SelectionService, navigationService: NavigationService, disabledItemsService: DisabledItemsService, _zone: NgZone, cdr: ChangeDetectorRef, renderer: Renderer2, hostElement: ElementRef, touchEnabled: boolean);
364
+ constructor(localization: LocalizationService, dataService: DataService, popupService: PopupService, selectionService: SelectionService, navigationService: NavigationService, disabledItemsService: DisabledItemsService, _zone: NgZone, cdr: ChangeDetectorRef, renderer: Renderer2, hostElement: ElementRef, touchEnabled: boolean, injector: Injector);
360
365
  ngOnInit(): void;
361
366
  ngAfterViewInit(): void;
362
367
  ngOnDestroy(): void;
@@ -474,6 +479,6 @@ export declare class AutoCompleteComponent implements ControlValueAccessor, OnDe
474
479
  private setComponentClasses;
475
480
  private closeActionSheet;
476
481
  private openActionSheet;
477
- static ɵfac: i0.ɵɵFactoryDeclaration<AutoCompleteComponent, [null, null, null, null, null, null, null, null, null, null, { optional: true; }]>;
482
+ static ɵfac: i0.ɵɵFactoryDeclaration<AutoCompleteComponent, [null, null, null, null, null, null, null, null, null, null, { optional: true; }, null]>;
478
483
  static ɵcmp: i0.ɵɵComponentDeclaration<AutoCompleteComponent, "kendo-autocomplete", ["kendoAutoComplete"], { "highlightFirst": "highlightFirst"; "showStickyHeader": "showStickyHeader"; "focusableId": "focusableId"; "data": "data"; "value": "value"; "valueField": "valueField"; "placeholder": "placeholder"; "adaptiveMode": "adaptiveMode"; "title": "title"; "subtitle": "subtitle"; "popupSettings": "popupSettings"; "listHeight": "listHeight"; "loading": "loading"; "clearButton": "clearButton"; "suggest": "suggest"; "disabled": "disabled"; "itemDisabled": "itemDisabled"; "readonly": "readonly"; "tabindex": "tabindex"; "tabIndex": "tabIndex"; "filterable": "filterable"; "virtual": "virtual"; "size": "size"; "rounded": "rounded"; "fillMode": "fillMode"; }, { "valueChange": "valueChange"; "filterChange": "filterChange"; "open": "open"; "opened": "opened"; "close": "close"; "closed": "closed"; "onFocus": "focus"; "onBlur": "blur"; }, ["template", "headerTemplate", "footerTemplate", "noDataTemplate", "groupTemplate", "fixedGroupTemplate"], never>;
479
484
  }
@@ -2,8 +2,8 @@
2
2
  * Copyright © 2023 Progress Software Corporation. All rights reserved.
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
- import { ElementRef, TemplateRef, EventEmitter, ViewContainerRef, OnDestroy, OnChanges, ChangeDetectorRef, NgZone, Renderer2, SimpleChanges, AfterContentChecked, AfterViewInit } from '@angular/core';
6
- import { ControlValueAccessor } from '@angular/forms';
5
+ import { ElementRef, TemplateRef, EventEmitter, ViewContainerRef, OnDestroy, OnChanges, ChangeDetectorRef, NgZone, Renderer2, SimpleChanges, AfterContentChecked, AfterViewInit, Injector } from '@angular/core';
6
+ import { ControlValueAccessor, FormControl } from '@angular/forms';
7
7
  import { SearchBarComponent } from '../common/searchbar.component';
8
8
  import { ItemTemplateDirective } from '../common/templates/item-template.directive';
9
9
  import { HeaderTemplateDirective } from '../common/templates/header-template.directive';
@@ -67,6 +67,7 @@ export declare class ComboBoxComponent implements ControlValueAccessor, AfterVie
67
67
  protected cdr: ChangeDetectorRef;
68
68
  protected renderer: Renderer2;
69
69
  protected touchEnabled: boolean;
70
+ protected injector: Injector;
70
71
  /**
71
72
  * @hidden
72
73
  */
@@ -406,6 +407,10 @@ export declare class ComboBoxComponent implements ControlValueAccessor, AfterVie
406
407
  get isFocused(): boolean;
407
408
  set isFocused(value: boolean);
408
409
  get clearButtonVisiblity(): string;
410
+ /**
411
+ * @hidden
412
+ */
413
+ get formControl(): FormControl;
409
414
  /**
410
415
  * @hidden
411
416
  */
@@ -460,7 +465,7 @@ export declare class ComboBoxComponent implements ControlValueAccessor, AfterVie
460
465
  private _size;
461
466
  private _rounded;
462
467
  private _fillMode;
463
- constructor(wrapper: ElementRef<HTMLElement>, localization: LocalizationService, popupService: PopupService, selectionService: SelectionService, navigationService: NavigationService, disabledItemsService: DisabledItemsService, dataService: DataService, zone: NgZone, cdr: ChangeDetectorRef, renderer: Renderer2, touchEnabled: boolean);
468
+ constructor(wrapper: ElementRef<HTMLElement>, localization: LocalizationService, popupService: PopupService, selectionService: SelectionService, navigationService: NavigationService, disabledItemsService: DisabledItemsService, dataService: DataService, zone: NgZone, cdr: ChangeDetectorRef, renderer: Renderer2, touchEnabled: boolean, injector: Injector);
464
469
  ngOnInit(): void;
465
470
  ngAfterViewInit(): void;
466
471
  private createValueStream;
@@ -622,6 +627,6 @@ export declare class ComboBoxComponent implements ControlValueAccessor, AfterVie
622
627
  private findIndex;
623
628
  private closeActionSheet;
624
629
  private openActionSheet;
625
- static ɵfac: i0.ɵɵFactoryDeclaration<ComboBoxComponent, [null, null, null, null, null, null, null, null, null, null, { optional: true; }]>;
630
+ static ɵfac: i0.ɵɵFactoryDeclaration<ComboBoxComponent, [null, null, null, null, null, null, null, null, null, null, { optional: true; }, null]>;
626
631
  static ɵcmp: i0.ɵɵComponentDeclaration<ComboBoxComponent, "kendo-combobox", ["kendoComboBox"], { "icon": "icon"; "svgIcon": "svgIcon"; "showStickyHeader": "showStickyHeader"; "focusableId": "focusableId"; "allowCustom": "allowCustom"; "data": "data"; "value": "value"; "textField": "textField"; "valueField": "valueField"; "valuePrimitive": "valuePrimitive"; "valueNormalizer": "valueNormalizer"; "placeholder": "placeholder"; "adaptiveMode": "adaptiveMode"; "title": "title"; "subtitle": "subtitle"; "popupSettings": "popupSettings"; "listHeight": "listHeight"; "loading": "loading"; "suggest": "suggest"; "clearButton": "clearButton"; "disabled": "disabled"; "itemDisabled": "itemDisabled"; "readonly": "readonly"; "tabindex": "tabindex"; "tabIndex": "tabIndex"; "filterable": "filterable"; "virtual": "virtual"; "size": "size"; "rounded": "rounded"; "fillMode": "fillMode"; }, { "valueChange": "valueChange"; "selectionChange": "selectionChange"; "filterChange": "filterChange"; "open": "open"; "opened": "opened"; "close": "close"; "closed": "closed"; "onFocus": "focus"; "onBlur": "blur"; }, ["template", "headerTemplate", "footerTemplate", "noDataTemplate", "groupTemplate", "fixedGroupTemplate"], never>;
627
632
  }
@@ -2,7 +2,7 @@
2
2
  * Copyright © 2023 Progress Software Corporation. All rights reserved.
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
- import { AfterViewInit, ChangeDetectorRef, ElementRef, NgZone, OnDestroy, QueryList, Renderer2 } from '@angular/core';
5
+ import { AfterViewInit, ChangeDetectorRef, ElementRef, Injector, NgZone, OnDestroy, QueryList, Renderer2 } from '@angular/core';
6
6
  import { LocalizationService } from '@progress/kendo-angular-l10n';
7
7
  import { PopupService } from '@progress/kendo-angular-popup';
8
8
  import { ComboBoxComponent } from './combobox.component';
@@ -50,7 +50,7 @@ export declare class MultiColumnComboBoxComponent extends ComboBoxComponent impl
50
50
  * @hidden
51
51
  */
52
52
  protected get listContainerClasses(): string[];
53
- constructor(localization: LocalizationService, popupService: PopupService, selectionService: SelectionService, navigationService: NavigationService, disabledItemsService: DisabledItemsService, dataService: DataService, zone: NgZone, changeDetector: ChangeDetectorRef, renderer: Renderer2, wrapper: ElementRef<HTMLElement>, touchEnabled: boolean);
53
+ constructor(localization: LocalizationService, popupService: PopupService, selectionService: SelectionService, navigationService: NavigationService, disabledItemsService: DisabledItemsService, dataService: DataService, zone: NgZone, changeDetector: ChangeDetectorRef, renderer: Renderer2, wrapper: ElementRef<HTMLElement>, touchEnabled: boolean, injector: Injector);
54
54
  ngAfterViewInit(): void;
55
55
  ngOnDestroy(): void;
56
56
  /**
@@ -2,9 +2,9 @@
2
2
  * Copyright © 2023 Progress Software Corporation. All rights reserved.
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
- import { Component, Renderer2, forwardRef, ElementRef, Input, Output, EventEmitter, ContentChild, ViewChild, ViewContainerRef, TemplateRef, HostBinding, isDevMode, ChangeDetectorRef, NgZone, Optional, Inject } from '@angular/core';
5
+ import { Component, Renderer2, forwardRef, ElementRef, Input, Output, EventEmitter, ContentChild, ViewChild, ViewContainerRef, TemplateRef, HostBinding, isDevMode, ChangeDetectorRef, NgZone, Optional, Inject, Injector } from '@angular/core';
6
6
  import { isDocumentAvailable, KendoInput, hasObservers } from '@progress/kendo-angular-common';
7
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
7
+ import { NG_VALUE_ACCESSOR, NgControl } from '@angular/forms';
8
8
  import { validatePackage } from '@progress/kendo-licensing';
9
9
  import { packageMetadata } from '../package-metadata';
10
10
  import { SearchBarComponent } from '../common/searchbar.component';
@@ -78,7 +78,7 @@ export const AUTOCOMPLETE_VALUE_ACCESSOR = {
78
78
  * ```
79
79
  */
80
80
  export class AutoCompleteComponent {
81
- constructor(localization, dataService, popupService, selectionService, navigationService, disabledItemsService, _zone, cdr, renderer, hostElement, touchEnabled) {
81
+ constructor(localization, dataService, popupService, selectionService, navigationService, disabledItemsService, _zone, cdr, renderer, hostElement, touchEnabled, injector) {
82
82
  this.localization = localization;
83
83
  this.dataService = dataService;
84
84
  this.popupService = popupService;
@@ -90,6 +90,7 @@ export class AutoCompleteComponent {
90
90
  this.renderer = renderer;
91
91
  this.hostElement = hostElement;
92
92
  this.touchEnabled = touchEnabled;
93
+ this.injector = injector;
93
94
  /**
94
95
  * @hidden
95
96
  */
@@ -537,6 +538,13 @@ export class AutoCompleteComponent {
537
538
  get isAdaptive() {
538
539
  return this.isAdaptiveModeEnabled && this.windowSize !== 'large';
539
540
  }
541
+ /**
542
+ * @hidden
543
+ */
544
+ get formControl() {
545
+ const ngControl = this.injector.get(NgControl, null);
546
+ return ngControl?.control || null;
547
+ }
540
548
  ngOnInit() {
541
549
  this.renderer.removeAttribute(this.wrapper, "tabindex");
542
550
  this.subs.add(this.localization
@@ -836,7 +844,11 @@ export class AutoCompleteComponent {
836
844
  }
837
845
  this.isFocused = false;
838
846
  const valueHasChanged = this.value !== this.text;
839
- const runInZone = hasObservers(this.onBlur) || hasObservers(this.close) || isUntouched(this.wrapper) || valueHasChanged;
847
+ const runInZone = hasObservers(this.onBlur) ||
848
+ hasObservers(this.close) ||
849
+ isUntouched(this.wrapper) ||
850
+ valueHasChanged ||
851
+ this.formControl?.updateOn === 'blur';
840
852
  if (runInZone) {
841
853
  this._zone.run(() => {
842
854
  if (valueHasChanged) {
@@ -1065,7 +1077,7 @@ export class AutoCompleteComponent {
1065
1077
  this.actionSheetSearchBar.focus();
1066
1078
  }
1067
1079
  }
1068
- AutoCompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AutoCompleteComponent, deps: [{ token: i1.LocalizationService }, { token: i2.DataService }, { token: i3.PopupService }, { token: i4.SelectionService }, { token: i5.NavigationService }, { token: i6.DisabledItemsService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: TOUCH_ENABLED, optional: true }], target: i0.ɵɵFactoryTarget.Component });
1080
+ AutoCompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AutoCompleteComponent, deps: [{ token: i1.LocalizationService }, { token: i2.DataService }, { token: i3.PopupService }, { token: i4.SelectionService }, { token: i5.NavigationService }, { token: i6.DisabledItemsService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: TOUCH_ENABLED, optional: true }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
1069
1081
  AutoCompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: AutoCompleteComponent, selector: "kendo-autocomplete", inputs: { highlightFirst: "highlightFirst", showStickyHeader: "showStickyHeader", focusableId: "focusableId", data: "data", value: "value", valueField: "valueField", placeholder: "placeholder", adaptiveMode: "adaptiveMode", title: "title", subtitle: "subtitle", popupSettings: "popupSettings", listHeight: "listHeight", loading: "loading", clearButton: "clearButton", suggest: "suggest", disabled: "disabled", itemDisabled: "itemDisabled", readonly: "readonly", tabindex: "tabindex", tabIndex: "tabIndex", filterable: "filterable", virtual: "virtual", size: "size", rounded: "rounded", fillMode: "fillMode" }, outputs: { valueChange: "valueChange", filterChange: "filterChange", open: "open", opened: "opened", close: "close", closed: "closed", onFocus: "focus", onBlur: "blur" }, host: { properties: { "class.k-autocomplete": "this.widgetClasses", "class.k-input": "this.widgetClasses", "class.k-disabled": "this.isDisabled", "class.k-loading": "this.isLoading", "attr.dir": "this.dir" } }, providers: [
1070
1082
  AUTOCOMPLETE_VALUE_ACCESSOR,
1071
1083
  DataService,
@@ -1348,7 +1360,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
1348
1360
  }, {
1349
1361
  type: Inject,
1350
1362
  args: [TOUCH_ENABLED]
1351
- }] }]; }, propDecorators: { responsiveRendererComponent: [{
1363
+ }] }, { type: i0.Injector }]; }, propDecorators: { responsiveRendererComponent: [{
1352
1364
  type: ViewChild,
1353
1365
  args: [ResponsiveRendererComponent]
1354
1366
  }], highlightFirst: [{
@@ -2,8 +2,8 @@
2
2
  * Copyright © 2023 Progress Software Corporation. All rights reserved.
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
- import { Component, forwardRef, ElementRef, TemplateRef, Input, Output, EventEmitter, ContentChild, ViewChild, ViewContainerRef, HostBinding, isDevMode, Optional, Inject, ChangeDetectorRef, NgZone, Renderer2 } from '@angular/core';
6
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
5
+ import { Component, forwardRef, ElementRef, TemplateRef, Input, Output, EventEmitter, ContentChild, ViewChild, ViewContainerRef, HostBinding, isDevMode, Optional, Inject, ChangeDetectorRef, NgZone, Renderer2, Injector } from '@angular/core';
6
+ import { NG_VALUE_ACCESSOR, NgControl } from '@angular/forms';
7
7
  import { validatePackage } from '@progress/kendo-licensing';
8
8
  import { packageMetadata } from '../package-metadata';
9
9
  import { SearchBarComponent } from '../common/searchbar.component';
@@ -78,7 +78,7 @@ const DEFAULT_FILL_MODE = 'solid';
78
78
  * ```
79
79
  */
80
80
  export class ComboBoxComponent {
81
- constructor(wrapper, localization, popupService, selectionService, navigationService, disabledItemsService, dataService, zone, cdr, renderer, touchEnabled) {
81
+ constructor(wrapper, localization, popupService, selectionService, navigationService, disabledItemsService, dataService, zone, cdr, renderer, touchEnabled, injector) {
82
82
  this.wrapper = wrapper;
83
83
  this.localization = localization;
84
84
  this.popupService = popupService;
@@ -90,6 +90,7 @@ export class ComboBoxComponent {
90
90
  this.cdr = cdr;
91
91
  this.renderer = renderer;
92
92
  this.touchEnabled = touchEnabled;
93
+ this.injector = injector;
93
94
  /**
94
95
  * @hidden
95
96
  */
@@ -565,6 +566,13 @@ export class ComboBoxComponent {
565
566
  return 'visible';
566
567
  }
567
568
  }
569
+ /**
570
+ * @hidden
571
+ */
572
+ get formControl() {
573
+ const ngControl = this.injector.get(NgControl, null);
574
+ return ngControl?.control || null;
575
+ }
568
576
  /**
569
577
  * @hidden
570
578
  */
@@ -1152,7 +1160,11 @@ export class ComboBoxComponent {
1152
1160
  const currentText = this.searchbar.value;
1153
1161
  const textHasChanged = currentText !== (getter(this.dataItem, this.textField) || '');
1154
1162
  const valueHasChanged = unresolvedSelection || textHasChanged;
1155
- const runInZone = valueHasChanged || hasObservers(this.onBlur) || hasObservers(this.close) || isUntouched(this.wrapper.nativeElement);
1163
+ const runInZone = valueHasChanged ||
1164
+ hasObservers(this.onBlur) ||
1165
+ hasObservers(this.close) ||
1166
+ isUntouched(this.wrapper.nativeElement) ||
1167
+ this.formControl?.updateOn === 'blur';
1156
1168
  if (runInZone) {
1157
1169
  this.zone.run(() => {
1158
1170
  if (valueHasChanged) {
@@ -1451,7 +1463,7 @@ export class ComboBoxComponent {
1451
1463
  this.actionSheetSearchBar.focus();
1452
1464
  }
1453
1465
  }
1454
- ComboBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ComboBoxComponent, deps: [{ token: i0.ElementRef }, { token: i1.LocalizationService }, { token: i2.PopupService }, { token: i3.SelectionService }, { token: i4.NavigationService }, { token: i5.DisabledItemsService }, { token: i6.DataService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: TOUCH_ENABLED, optional: true }], target: i0.ɵɵFactoryTarget.Component });
1466
+ ComboBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ComboBoxComponent, deps: [{ token: i0.ElementRef }, { token: i1.LocalizationService }, { token: i2.PopupService }, { token: i3.SelectionService }, { token: i4.NavigationService }, { token: i5.DisabledItemsService }, { token: i6.DataService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: TOUCH_ENABLED, optional: true }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
1455
1467
  ComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: ComboBoxComponent, selector: "kendo-combobox", inputs: { icon: "icon", svgIcon: "svgIcon", showStickyHeader: "showStickyHeader", focusableId: "focusableId", allowCustom: "allowCustom", data: "data", value: "value", textField: "textField", valueField: "valueField", valuePrimitive: "valuePrimitive", valueNormalizer: "valueNormalizer", placeholder: "placeholder", adaptiveMode: "adaptiveMode", title: "title", subtitle: "subtitle", popupSettings: "popupSettings", listHeight: "listHeight", loading: "loading", suggest: "suggest", clearButton: "clearButton", disabled: "disabled", itemDisabled: "itemDisabled", readonly: "readonly", tabindex: "tabindex", tabIndex: "tabIndex", filterable: "filterable", virtual: "virtual", size: "size", rounded: "rounded", fillMode: "fillMode" }, outputs: { valueChange: "valueChange", selectionChange: "selectionChange", filterChange: "filterChange", open: "open", opened: "opened", close: "close", closed: "closed", onFocus: "focus", onBlur: "blur" }, host: { properties: { "class.k-combobox": "this.widgetClasses", "class.k-input": "this.widgetClasses", "class.k-disabled": "this.isDisabled", "class.k-loading": "this.isLoading", "attr.dir": "this.dir" } }, providers: [
1456
1468
  COMBOBOX_VALUE_ACCESSOR,
1457
1469
  DataService,
@@ -1774,7 +1786,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
1774
1786
  }, {
1775
1787
  type: Inject,
1776
1788
  args: [TOUCH_ENABLED]
1777
- }] }]; }, propDecorators: { icon: [{
1789
+ }] }, { type: i0.Injector }]; }, propDecorators: { icon: [{
1778
1790
  type: Input
1779
1791
  }], svgIcon: [{
1780
1792
  type: Input
@@ -2,7 +2,7 @@
2
2
  * Copyright © 2023 Progress Software Corporation. All rights reserved.
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
- import { ChangeDetectorRef, Component, ContentChildren, ElementRef, forwardRef, HostBinding, Inject, isDevMode, NgZone, QueryList, Renderer2, ViewChild } from '@angular/core';
5
+ import { ChangeDetectorRef, Component, ContentChildren, ElementRef, forwardRef, HostBinding, Inject, Injector, isDevMode, NgZone, QueryList, Renderer2, ViewChild } from '@angular/core';
6
6
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
7
7
  import { isDocumentAvailable, KendoInput } from '@progress/kendo-angular-common';
8
8
  import { L10N_PREFIX, LocalizationService } from '@progress/kendo-angular-l10n';
@@ -37,8 +37,8 @@ import * as i14 from "../common/templates/template-context.directive";
37
37
  * Represents the [Kendo UI MultiColumnComboBox component for Angular]({% slug overview_multicolumncombobox %}).
38
38
  */
39
39
  export class MultiColumnComboBoxComponent extends ComboBoxComponent {
40
- constructor(localization, popupService, selectionService, navigationService, disabledItemsService, dataService, zone, changeDetector, renderer, wrapper, touchEnabled) {
41
- super(wrapper, localization, popupService, selectionService, navigationService, disabledItemsService, dataService, zone, changeDetector, renderer, touchEnabled);
40
+ constructor(localization, popupService, selectionService, navigationService, disabledItemsService, dataService, zone, changeDetector, renderer, wrapper, touchEnabled, injector) {
41
+ super(wrapper, localization, popupService, selectionService, navigationService, disabledItemsService, dataService, zone, changeDetector, renderer, touchEnabled, injector);
42
42
  /**
43
43
  * @hidden
44
44
  */
@@ -161,7 +161,7 @@ export class MultiColumnComboBoxComponent extends ComboBoxComponent {
161
161
  });
162
162
  }
163
163
  }
164
- MultiColumnComboBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MultiColumnComboBoxComponent, deps: [{ token: i1.LocalizationService }, { token: i2.PopupService }, { token: i3.SelectionService }, { token: i4.NavigationService }, { token: i5.DisabledItemsService }, { token: i6.DataService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: TOUCH_ENABLED }], target: i0.ɵɵFactoryTarget.Component });
164
+ MultiColumnComboBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MultiColumnComboBoxComponent, deps: [{ token: i1.LocalizationService }, { token: i2.PopupService }, { token: i3.SelectionService }, { token: i4.NavigationService }, { token: i5.DisabledItemsService }, { token: i6.DataService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: TOUCH_ENABLED }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
165
165
  MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: MultiColumnComboBoxComponent, selector: "kendo-multicolumncombobox", host: { properties: { "class.k-dropdowngrid": "this.hostClasses", "class.k-disabled": "this.isDisabled" } }, providers: [
166
166
  SelectionService,
167
167
  DataService,
@@ -679,7 +679,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
679
679
  }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i2.PopupService }, { type: i3.SelectionService }, { type: i4.NavigationService }, { type: i5.DisabledItemsService }, { type: i6.DataService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: undefined, decorators: [{
680
680
  type: Inject,
681
681
  args: [TOUCH_ENABLED]
682
- }] }]; }, propDecorators: { hostClasses: [{
682
+ }] }, { type: i0.Injector }]; }, propDecorators: { hostClasses: [{
683
683
  type: HostBinding,
684
684
  args: ['class.k-dropdowngrid']
685
685
  }], isDisabled: [{
@@ -1170,7 +1170,8 @@ export class DropDownListComponent {
1170
1170
  hasObservers(this.close) ||
1171
1171
  hasObservers(this.onBlur) ||
1172
1172
  hasObservers(this.filterChange) ||
1173
- isUntouched(this.wrapper.nativeElement)) {
1173
+ isUntouched(this.wrapper.nativeElement) ||
1174
+ this.formControl?.updateOn === 'blur') {
1174
1175
  this._zone.run(() => {
1175
1176
  if (valueHasChanged) {
1176
1177
  this.selectionService.change(this.selectionService.selected[0]);
@@ -700,7 +700,8 @@ export class DropDownTreeComponent {
700
700
  this.isFocused = false;
701
701
  this.togglePopup(false);
702
702
  if (hasObservers(this.onBlur) ||
703
- isUntouched(this.wrapper.nativeElement)) {
703
+ isUntouched(this.wrapper.nativeElement) ||
704
+ this.formControl?.updateOn === 'blur') {
704
705
  this._zone.run(() => {
705
706
  this.onBlur.emit();
706
707
  this.onTouchedCallback();
@@ -948,7 +948,8 @@ export class MultiSelectTreeComponent {
948
948
  this.isFocused = false;
949
949
  this.togglePopup(false);
950
950
  if (hasObservers(this.onBlur) ||
951
- isUntouched(this.wrapper.nativeElement)) {
951
+ isUntouched(this.wrapper.nativeElement) ||
952
+ this.formControl?.updateOn === 'blur') {
952
953
  this._zone.run(() => {
953
954
  this.onBlur.emit();
954
955
  this.onTouchedCallback();
@@ -4,11 +4,11 @@
4
4
  *-------------------------------------------------------------------------------------------*/
5
5
  import { guid, isPresent, isArray, isObjectArray, resolveAllValues, selectedIndices, getter, isNumber, isUntouched, inDropDown, getSizeClass, getRoundedClass, getFillModeClass, animationDuration, isTruthy, windowSize, setListBoxAriaLabelLebBy, setActionSheetTitle, updateActionSheetAdaptiveAppearance } from '../common/util';
6
6
  import { SearchBarComponent } from '../common/searchbar.component';
7
- import { ViewChild, Renderer2, ViewContainerRef, Component, HostBinding, Input, ElementRef, TemplateRef, Output, EventEmitter, isDevMode, forwardRef, ContentChild, ChangeDetectorRef, KeyValueDiffers, NgZone, Optional, Inject } from '@angular/core';
7
+ import { ViewChild, Renderer2, ViewContainerRef, Component, HostBinding, Input, ElementRef, TemplateRef, Output, EventEmitter, isDevMode, forwardRef, ContentChild, ChangeDetectorRef, KeyValueDiffers, NgZone, Optional, Inject, Injector } from '@angular/core';
8
8
  import { Subscription, Subject, of, merge } from 'rxjs';
9
9
  import { catchError, filter, map, tap } from 'rxjs/operators';
10
10
  import { isChanged, isDocumentAvailable, KendoInput, hasObservers, anyChanged } from '@progress/kendo-angular-common';
11
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
11
+ import { NG_VALUE_ACCESSOR, NgControl } from '@angular/forms';
12
12
  import { validatePackage } from '@progress/kendo-licensing';
13
13
  import { packageMetadata } from '../package-metadata';
14
14
  import { SelectionService } from '../common/selection/selection.service';
@@ -81,7 +81,7 @@ const DEFAULT_FILL_MODE = 'solid';
81
81
  * ```
82
82
  */
83
83
  export class MultiSelectComponent {
84
- constructor(wrapper, localization, popupService, dataService, selectionService, navigationService, disabledItemsService, cdr, differs, renderer, _zone, touchEnabled) {
84
+ constructor(wrapper, localization, popupService, dataService, selectionService, navigationService, disabledItemsService, cdr, differs, renderer, _zone, touchEnabled, injector) {
85
85
  this.wrapper = wrapper;
86
86
  this.localization = localization;
87
87
  this.popupService = popupService;
@@ -94,6 +94,7 @@ export class MultiSelectComponent {
94
94
  this.renderer = renderer;
95
95
  this._zone = _zone;
96
96
  this.touchEnabled = touchEnabled;
97
+ this.injector = injector;
97
98
  /**
98
99
  * @hidden
99
100
  */
@@ -321,6 +322,13 @@ export class MultiSelectComponent {
321
322
  get ariaControls() {
322
323
  return this.isOpen ? this.listBoxId : undefined;
323
324
  }
325
+ /**
326
+ * @hidden
327
+ */
328
+ get formControl() {
329
+ const ngControl = this.injector.get(NgControl, null);
330
+ return ngControl?.control || null;
331
+ }
324
332
  /**
325
333
  * Focuses a specific item of the MultiSelect based on a provided index.
326
334
  * If there is a custom item it is positioned at index -1.
@@ -387,7 +395,8 @@ export class MultiSelectComponent {
387
395
  if (hasObservers(this.onBlur) ||
388
396
  hasObservers(this.filterChange) ||
389
397
  hasObservers(this.close) ||
390
- isUntouched(this.wrapper.nativeElement)) {
398
+ isUntouched(this.wrapper.nativeElement) ||
399
+ this.formControl?.updateOn === 'blur') {
391
400
  this._zone.run(() => {
392
401
  this.closePopup();
393
402
  if (!(this.isOpen && this.allowCustom)) {
@@ -1674,7 +1683,7 @@ export class MultiSelectComponent {
1674
1683
  this.actionSheetSearchBar.focus();
1675
1684
  }
1676
1685
  }
1677
- MultiSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MultiSelectComponent, deps: [{ token: i0.ElementRef }, { token: i1.LocalizationService }, { token: i2.PopupService }, { token: i3.DataService }, { token: i4.SelectionService }, { token: i5.NavigationService }, { token: i6.DisabledItemsService }, { token: i0.ChangeDetectorRef }, { token: i0.KeyValueDiffers }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: TOUCH_ENABLED, optional: true }], target: i0.ɵɵFactoryTarget.Component });
1686
+ MultiSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MultiSelectComponent, deps: [{ token: i0.ElementRef }, { token: i1.LocalizationService }, { token: i2.PopupService }, { token: i3.DataService }, { token: i4.SelectionService }, { token: i5.NavigationService }, { token: i6.DisabledItemsService }, { token: i0.ChangeDetectorRef }, { token: i0.KeyValueDiffers }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: TOUCH_ENABLED, optional: true }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
1678
1687
  MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: MultiSelectComponent, selector: "kendo-multiselect", inputs: { showStickyHeader: "showStickyHeader", focusableId: "focusableId", autoClose: "autoClose", loading: "loading", data: "data", value: "value", valueField: "valueField", textField: "textField", tabindex: "tabindex", tabIndex: "tabIndex", size: "size", rounded: "rounded", fillMode: "fillMode", placeholder: "placeholder", adaptiveMode: "adaptiveMode", title: "title", subtitle: "subtitle", disabled: "disabled", itemDisabled: "itemDisabled", checkboxes: "checkboxes", readonly: "readonly", filterable: "filterable", virtual: "virtual", popupSettings: "popupSettings", listHeight: "listHeight", valuePrimitive: "valuePrimitive", clearButton: "clearButton", tagMapper: "tagMapper", allowCustom: "allowCustom", valueNormalizer: "valueNormalizer" }, outputs: { filterChange: "filterChange", valueChange: "valueChange", open: "open", opened: "opened", close: "close", closed: "closed", onFocus: "focus", onBlur: "blur", removeTag: "removeTag" }, host: { properties: { "class.k-multiselect": "this.hostClasses", "class.k-input": "this.hostClasses", "attr.dir": "this.dir", "class.k-disabled": "this.disabledClass", "class.k-loading": "this.isLoading" } }, providers: [
1679
1688
  MULTISELECT_VALUE_ACCESSOR,
1680
1689
  DataService,
@@ -2073,7 +2082,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2073
2082
  }, {
2074
2083
  type: Inject,
2075
2084
  args: [TOUCH_ENABLED]
2076
- }] }]; }, propDecorators: { responsiveRendererComponent: [{
2085
+ }] }, { type: i0.Injector }]; }, propDecorators: { responsiveRendererComponent: [{
2077
2086
  type: ViewChild,
2078
2087
  args: [ResponsiveRendererComponent]
2079
2088
  }], showStickyHeader: [{
@@ -9,7 +9,7 @@ export const packageMetadata = {
9
9
  name: '@progress/kendo-angular-dropdowns',
10
10
  productName: 'Kendo UI for Angular',
11
11
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
12
- publishDate: 1698310847,
13
- version: '14.0.2-develop.15',
12
+ publishDate: 1698414197,
13
+ version: '14.0.2-develop.16',
14
14
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
15
15
  };
@@ -38,8 +38,8 @@ const packageMetadata = {
38
38
  name: '@progress/kendo-angular-dropdowns',
39
39
  productName: 'Kendo UI for Angular',
40
40
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
41
- publishDate: 1698310847,
42
- version: '14.0.2-develop.15',
41
+ publishDate: 1698414197,
42
+ version: '14.0.2-develop.16',
43
43
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
44
44
  };
45
45
 
@@ -2863,7 +2863,7 @@ const AUTOCOMPLETE_VALUE_ACCESSOR = {
2863
2863
  * ```
2864
2864
  */
2865
2865
  class AutoCompleteComponent {
2866
- constructor(localization, dataService, popupService, selectionService, navigationService, disabledItemsService, _zone, cdr, renderer, hostElement, touchEnabled) {
2866
+ constructor(localization, dataService, popupService, selectionService, navigationService, disabledItemsService, _zone, cdr, renderer, hostElement, touchEnabled, injector) {
2867
2867
  this.localization = localization;
2868
2868
  this.dataService = dataService;
2869
2869
  this.popupService = popupService;
@@ -2875,6 +2875,7 @@ class AutoCompleteComponent {
2875
2875
  this.renderer = renderer;
2876
2876
  this.hostElement = hostElement;
2877
2877
  this.touchEnabled = touchEnabled;
2878
+ this.injector = injector;
2878
2879
  /**
2879
2880
  * @hidden
2880
2881
  */
@@ -3325,6 +3326,13 @@ class AutoCompleteComponent {
3325
3326
  get isAdaptive() {
3326
3327
  return this.isAdaptiveModeEnabled && this.windowSize !== 'large';
3327
3328
  }
3329
+ /**
3330
+ * @hidden
3331
+ */
3332
+ get formControl() {
3333
+ const ngControl = this.injector.get(NgControl, null);
3334
+ return (ngControl === null || ngControl === void 0 ? void 0 : ngControl.control) || null;
3335
+ }
3328
3336
  ngOnInit() {
3329
3337
  this.renderer.removeAttribute(this.wrapper, "tabindex");
3330
3338
  this.subs.add(this.localization
@@ -3605,6 +3613,7 @@ class AutoCompleteComponent {
3605
3613
  * @hidden
3606
3614
  */
3607
3615
  handleBlur() {
3616
+ var _a;
3608
3617
  if (!this.isActionSheetExpanded) {
3609
3618
  const focused = this.filterable ? this.selectionService.focused : -1;
3610
3619
  this.searchbar.input.nativeElement.scrollLeft = 0; // Firefox doesn't auto-scroll to the left on blur like other browsers
@@ -3624,7 +3633,11 @@ class AutoCompleteComponent {
3624
3633
  }
3625
3634
  this.isFocused = false;
3626
3635
  const valueHasChanged = this.value !== this.text;
3627
- const runInZone = hasObservers(this.onBlur) || hasObservers(this.close) || isUntouched(this.wrapper) || valueHasChanged;
3636
+ const runInZone = hasObservers(this.onBlur) ||
3637
+ hasObservers(this.close) ||
3638
+ isUntouched(this.wrapper) ||
3639
+ valueHasChanged ||
3640
+ ((_a = this.formControl) === null || _a === void 0 ? void 0 : _a.updateOn) === 'blur';
3628
3641
  if (runInZone) {
3629
3642
  this._zone.run(() => {
3630
3643
  if (valueHasChanged) {
@@ -3853,7 +3866,7 @@ class AutoCompleteComponent {
3853
3866
  this.actionSheetSearchBar.focus();
3854
3867
  }
3855
3868
  }
3856
- AutoCompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AutoCompleteComponent, deps: [{ token: i1.LocalizationService }, { token: DataService }, { token: i2$1.PopupService }, { token: SelectionService }, { token: NavigationService }, { token: DisabledItemsService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: TOUCH_ENABLED, optional: true }], target: i0.ɵɵFactoryTarget.Component });
3869
+ AutoCompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AutoCompleteComponent, deps: [{ token: i1.LocalizationService }, { token: DataService }, { token: i2$1.PopupService }, { token: SelectionService }, { token: NavigationService }, { token: DisabledItemsService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: TOUCH_ENABLED, optional: true }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
3857
3870
  AutoCompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: AutoCompleteComponent, selector: "kendo-autocomplete", inputs: { highlightFirst: "highlightFirst", showStickyHeader: "showStickyHeader", focusableId: "focusableId", data: "data", value: "value", valueField: "valueField", placeholder: "placeholder", adaptiveMode: "adaptiveMode", title: "title", subtitle: "subtitle", popupSettings: "popupSettings", listHeight: "listHeight", loading: "loading", clearButton: "clearButton", suggest: "suggest", disabled: "disabled", itemDisabled: "itemDisabled", readonly: "readonly", tabindex: "tabindex", tabIndex: "tabIndex", filterable: "filterable", virtual: "virtual", size: "size", rounded: "rounded", fillMode: "fillMode" }, outputs: { valueChange: "valueChange", filterChange: "filterChange", open: "open", opened: "opened", close: "close", closed: "closed", onFocus: "focus", onBlur: "blur" }, host: { properties: { "class.k-autocomplete": "this.widgetClasses", "class.k-input": "this.widgetClasses", "class.k-disabled": "this.isDisabled", "class.k-loading": "this.isLoading", "attr.dir": "this.dir" } }, providers: [
3858
3871
  AUTOCOMPLETE_VALUE_ACCESSOR,
3859
3872
  DataService,
@@ -4137,7 +4150,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
4137
4150
  }, {
4138
4151
  type: Inject,
4139
4152
  args: [TOUCH_ENABLED]
4140
- }] }];
4153
+ }] }, { type: i0.Injector }];
4141
4154
  }, propDecorators: { responsiveRendererComponent: [{
4142
4155
  type: ViewChild,
4143
4156
  args: [ResponsiveRendererComponent]
@@ -4344,7 +4357,7 @@ const DEFAULT_FILL_MODE$4 = 'solid';
4344
4357
  * ```
4345
4358
  */
4346
4359
  class ComboBoxComponent {
4347
- constructor(wrapper, localization, popupService, selectionService, navigationService, disabledItemsService, dataService, zone, cdr, renderer, touchEnabled) {
4360
+ constructor(wrapper, localization, popupService, selectionService, navigationService, disabledItemsService, dataService, zone, cdr, renderer, touchEnabled, injector) {
4348
4361
  this.wrapper = wrapper;
4349
4362
  this.localization = localization;
4350
4363
  this.popupService = popupService;
@@ -4356,6 +4369,7 @@ class ComboBoxComponent {
4356
4369
  this.cdr = cdr;
4357
4370
  this.renderer = renderer;
4358
4371
  this.touchEnabled = touchEnabled;
4372
+ this.injector = injector;
4359
4373
  /**
4360
4374
  * @hidden
4361
4375
  */
@@ -4833,6 +4847,13 @@ class ComboBoxComponent {
4833
4847
  return 'visible';
4834
4848
  }
4835
4849
  }
4850
+ /**
4851
+ * @hidden
4852
+ */
4853
+ get formControl() {
4854
+ const ngControl = this.injector.get(NgControl, null);
4855
+ return (ngControl === null || ngControl === void 0 ? void 0 : ngControl.control) || null;
4856
+ }
4836
4857
  /**
4837
4858
  * @hidden
4838
4859
  */
@@ -5413,6 +5434,7 @@ class ComboBoxComponent {
5413
5434
  * @hidden
5414
5435
  */
5415
5436
  handleBlur() {
5437
+ var _a;
5416
5438
  if (!this.isActionSheetExpanded) {
5417
5439
  this._filtering = false;
5418
5440
  this.searchbar.input.nativeElement.scrollLeft = 0; // Firefox doesn't auto-scroll to the left on blur like other browsers
@@ -5421,7 +5443,11 @@ class ComboBoxComponent {
5421
5443
  const currentText = this.searchbar.value;
5422
5444
  const textHasChanged = currentText !== (getter(this.dataItem, this.textField) || '');
5423
5445
  const valueHasChanged = unresolvedSelection || textHasChanged;
5424
- const runInZone = valueHasChanged || hasObservers(this.onBlur) || hasObservers(this.close) || isUntouched(this.wrapper.nativeElement);
5446
+ const runInZone = valueHasChanged ||
5447
+ hasObservers(this.onBlur) ||
5448
+ hasObservers(this.close) ||
5449
+ isUntouched(this.wrapper.nativeElement) ||
5450
+ ((_a = this.formControl) === null || _a === void 0 ? void 0 : _a.updateOn) === 'blur';
5425
5451
  if (runInZone) {
5426
5452
  this.zone.run(() => {
5427
5453
  if (valueHasChanged) {
@@ -5720,7 +5746,7 @@ class ComboBoxComponent {
5720
5746
  this.actionSheetSearchBar.focus();
5721
5747
  }
5722
5748
  }
5723
- ComboBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ComboBoxComponent, deps: [{ token: i0.ElementRef }, { token: i1.LocalizationService }, { token: i2$1.PopupService }, { token: SelectionService }, { token: NavigationService }, { token: DisabledItemsService }, { token: DataService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: TOUCH_ENABLED, optional: true }], target: i0.ɵɵFactoryTarget.Component });
5749
+ ComboBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ComboBoxComponent, deps: [{ token: i0.ElementRef }, { token: i1.LocalizationService }, { token: i2$1.PopupService }, { token: SelectionService }, { token: NavigationService }, { token: DisabledItemsService }, { token: DataService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: TOUCH_ENABLED, optional: true }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
5724
5750
  ComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: ComboBoxComponent, selector: "kendo-combobox", inputs: { icon: "icon", svgIcon: "svgIcon", showStickyHeader: "showStickyHeader", focusableId: "focusableId", allowCustom: "allowCustom", data: "data", value: "value", textField: "textField", valueField: "valueField", valuePrimitive: "valuePrimitive", valueNormalizer: "valueNormalizer", placeholder: "placeholder", adaptiveMode: "adaptiveMode", title: "title", subtitle: "subtitle", popupSettings: "popupSettings", listHeight: "listHeight", loading: "loading", suggest: "suggest", clearButton: "clearButton", disabled: "disabled", itemDisabled: "itemDisabled", readonly: "readonly", tabindex: "tabindex", tabIndex: "tabIndex", filterable: "filterable", virtual: "virtual", size: "size", rounded: "rounded", fillMode: "fillMode" }, outputs: { valueChange: "valueChange", selectionChange: "selectionChange", filterChange: "filterChange", open: "open", opened: "opened", close: "close", closed: "closed", onFocus: "focus", onBlur: "blur" }, host: { properties: { "class.k-combobox": "this.widgetClasses", "class.k-input": "this.widgetClasses", "class.k-disabled": "this.isDisabled", "class.k-loading": "this.isLoading", "attr.dir": "this.dir" } }, providers: [
5725
5751
  COMBOBOX_VALUE_ACCESSOR,
5726
5752
  DataService,
@@ -6044,7 +6070,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
6044
6070
  }, {
6045
6071
  type: Inject,
6046
6072
  args: [TOUCH_ENABLED]
6047
- }] }];
6073
+ }] }, { type: i0.Injector }];
6048
6074
  }, propDecorators: { icon: [{
6049
6075
  type: Input
6050
6076
  }], svgIcon: [{
@@ -7367,6 +7393,7 @@ class DropDownListComponent {
7367
7393
  }
7368
7394
  }
7369
7395
  componentBlur() {
7396
+ var _a;
7370
7397
  if (!this.isActionSheetExpanded) {
7371
7398
  this.isFocused = false;
7372
7399
  const selectionPresent = isPresent(this.selectionService.selected[0]);
@@ -7375,7 +7402,8 @@ class DropDownListComponent {
7375
7402
  hasObservers(this.close) ||
7376
7403
  hasObservers(this.onBlur) ||
7377
7404
  hasObservers(this.filterChange) ||
7378
- isUntouched(this.wrapper.nativeElement)) {
7405
+ isUntouched(this.wrapper.nativeElement) ||
7406
+ ((_a = this.formControl) === null || _a === void 0 ? void 0 : _a.updateOn) === 'blur') {
7379
7407
  this._zone.run(() => {
7380
7408
  if (valueHasChanged) {
7381
7409
  this.selectionService.change(this.selectionService.selected[0]);
@@ -8581,7 +8609,7 @@ const DEFAULT_FILL_MODE$2 = 'solid';
8581
8609
  * ```
8582
8610
  */
8583
8611
  class MultiSelectComponent {
8584
- constructor(wrapper, localization, popupService, dataService, selectionService, navigationService, disabledItemsService, cdr, differs, renderer, _zone, touchEnabled) {
8612
+ constructor(wrapper, localization, popupService, dataService, selectionService, navigationService, disabledItemsService, cdr, differs, renderer, _zone, touchEnabled, injector) {
8585
8613
  this.wrapper = wrapper;
8586
8614
  this.localization = localization;
8587
8615
  this.popupService = popupService;
@@ -8594,6 +8622,7 @@ class MultiSelectComponent {
8594
8622
  this.renderer = renderer;
8595
8623
  this._zone = _zone;
8596
8624
  this.touchEnabled = touchEnabled;
8625
+ this.injector = injector;
8597
8626
  /**
8598
8627
  * @hidden
8599
8628
  */
@@ -8823,6 +8852,13 @@ class MultiSelectComponent {
8823
8852
  get ariaControls() {
8824
8853
  return this.isOpen ? this.listBoxId : undefined;
8825
8854
  }
8855
+ /**
8856
+ * @hidden
8857
+ */
8858
+ get formControl() {
8859
+ const ngControl = this.injector.get(NgControl, null);
8860
+ return (ngControl === null || ngControl === void 0 ? void 0 : ngControl.control) || null;
8861
+ }
8826
8862
  /**
8827
8863
  * Focuses a specific item of the MultiSelect based on a provided index.
8828
8864
  * If there is a custom item it is positioned at index -1.
@@ -8881,6 +8917,7 @@ class MultiSelectComponent {
8881
8917
  * @hidden
8882
8918
  */
8883
8919
  onSearchBarBlur() {
8920
+ var _a;
8884
8921
  if (!this.isActionSheetExpanded) {
8885
8922
  if (!this.isFocused) {
8886
8923
  return;
@@ -8889,7 +8926,8 @@ class MultiSelectComponent {
8889
8926
  if (hasObservers(this.onBlur) ||
8890
8927
  hasObservers(this.filterChange) ||
8891
8928
  hasObservers(this.close) ||
8892
- isUntouched(this.wrapper.nativeElement)) {
8929
+ isUntouched(this.wrapper.nativeElement) ||
8930
+ ((_a = this.formControl) === null || _a === void 0 ? void 0 : _a.updateOn) === 'blur') {
8893
8931
  this._zone.run(() => {
8894
8932
  this.closePopup();
8895
8933
  if (!(this.isOpen && this.allowCustom)) {
@@ -10177,7 +10215,7 @@ class MultiSelectComponent {
10177
10215
  this.actionSheetSearchBar.focus();
10178
10216
  }
10179
10217
  }
10180
- MultiSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MultiSelectComponent, deps: [{ token: i0.ElementRef }, { token: i1.LocalizationService }, { token: i2$1.PopupService }, { token: DataService }, { token: SelectionService }, { token: NavigationService }, { token: DisabledItemsService }, { token: i0.ChangeDetectorRef }, { token: i0.KeyValueDiffers }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: TOUCH_ENABLED, optional: true }], target: i0.ɵɵFactoryTarget.Component });
10218
+ MultiSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MultiSelectComponent, deps: [{ token: i0.ElementRef }, { token: i1.LocalizationService }, { token: i2$1.PopupService }, { token: DataService }, { token: SelectionService }, { token: NavigationService }, { token: DisabledItemsService }, { token: i0.ChangeDetectorRef }, { token: i0.KeyValueDiffers }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: TOUCH_ENABLED, optional: true }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
10181
10219
  MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: MultiSelectComponent, selector: "kendo-multiselect", inputs: { showStickyHeader: "showStickyHeader", focusableId: "focusableId", autoClose: "autoClose", loading: "loading", data: "data", value: "value", valueField: "valueField", textField: "textField", tabindex: "tabindex", tabIndex: "tabIndex", size: "size", rounded: "rounded", fillMode: "fillMode", placeholder: "placeholder", adaptiveMode: "adaptiveMode", title: "title", subtitle: "subtitle", disabled: "disabled", itemDisabled: "itemDisabled", checkboxes: "checkboxes", readonly: "readonly", filterable: "filterable", virtual: "virtual", popupSettings: "popupSettings", listHeight: "listHeight", valuePrimitive: "valuePrimitive", clearButton: "clearButton", tagMapper: "tagMapper", allowCustom: "allowCustom", valueNormalizer: "valueNormalizer" }, outputs: { filterChange: "filterChange", valueChange: "valueChange", open: "open", opened: "opened", close: "close", closed: "closed", onFocus: "focus", onBlur: "blur", removeTag: "removeTag" }, host: { properties: { "class.k-multiselect": "this.hostClasses", "class.k-input": "this.hostClasses", "attr.dir": "this.dir", "class.k-disabled": "this.disabledClass", "class.k-loading": "this.isLoading" } }, providers: [
10182
10220
  MULTISELECT_VALUE_ACCESSOR,
10183
10221
  DataService,
@@ -10577,7 +10615,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10577
10615
  }, {
10578
10616
  type: Inject,
10579
10617
  args: [TOUCH_ENABLED]
10580
- }] }];
10618
+ }] }, { type: i0.Injector }];
10581
10619
  }, propDecorators: { responsiveRendererComponent: [{
10582
10620
  type: ViewChild,
10583
10621
  args: [ResponsiveRendererComponent]
@@ -10870,8 +10908,8 @@ const getRowWidthFromColumnsMeta = (columns) => {
10870
10908
  * Represents the [Kendo UI MultiColumnComboBox component for Angular]({% slug overview_multicolumncombobox %}).
10871
10909
  */
10872
10910
  class MultiColumnComboBoxComponent extends ComboBoxComponent {
10873
- constructor(localization, popupService, selectionService, navigationService, disabledItemsService, dataService, zone, changeDetector, renderer, wrapper, touchEnabled) {
10874
- super(wrapper, localization, popupService, selectionService, navigationService, disabledItemsService, dataService, zone, changeDetector, renderer, touchEnabled);
10911
+ constructor(localization, popupService, selectionService, navigationService, disabledItemsService, dataService, zone, changeDetector, renderer, wrapper, touchEnabled, injector) {
10912
+ super(wrapper, localization, popupService, selectionService, navigationService, disabledItemsService, dataService, zone, changeDetector, renderer, touchEnabled, injector);
10875
10913
  /**
10876
10914
  * @hidden
10877
10915
  */
@@ -10994,7 +11032,7 @@ class MultiColumnComboBoxComponent extends ComboBoxComponent {
10994
11032
  });
10995
11033
  }
10996
11034
  }
10997
- MultiColumnComboBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MultiColumnComboBoxComponent, deps: [{ token: i1.LocalizationService }, { token: i2$1.PopupService }, { token: SelectionService }, { token: NavigationService }, { token: DisabledItemsService }, { token: DataService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: TOUCH_ENABLED }], target: i0.ɵɵFactoryTarget.Component });
11035
+ MultiColumnComboBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MultiColumnComboBoxComponent, deps: [{ token: i1.LocalizationService }, { token: i2$1.PopupService }, { token: SelectionService }, { token: NavigationService }, { token: DisabledItemsService }, { token: DataService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: TOUCH_ENABLED }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
10998
11036
  MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: MultiColumnComboBoxComponent, selector: "kendo-multicolumncombobox", host: { properties: { "class.k-dropdowngrid": "this.hostClasses", "class.k-disabled": "this.isDisabled" } }, providers: [
10999
11037
  SelectionService,
11000
11038
  DataService,
@@ -11513,7 +11551,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11513
11551
  return [{ type: i1.LocalizationService }, { type: i2$1.PopupService }, { type: SelectionService }, { type: NavigationService }, { type: DisabledItemsService }, { type: DataService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: undefined, decorators: [{
11514
11552
  type: Inject,
11515
11553
  args: [TOUCH_ENABLED]
11516
- }] }];
11554
+ }] }, { type: i0.Injector }];
11517
11555
  }, propDecorators: { hostClasses: [{
11518
11556
  type: HostBinding,
11519
11557
  args: ['class.k-dropdowngrid']
@@ -12205,6 +12243,7 @@ class DropDownTreeComponent {
12205
12243
  * @hidden
12206
12244
  */
12207
12245
  handleBlur(e) {
12246
+ var _a;
12208
12247
  if (!this.isActionSheetExpanded) {
12209
12248
  const relatedTarget = e && e.relatedTarget;
12210
12249
  if (this.wrapper.nativeElement.contains(relatedTarget) ||
@@ -12214,7 +12253,8 @@ class DropDownTreeComponent {
12214
12253
  this.isFocused = false;
12215
12254
  this.togglePopup(false);
12216
12255
  if (hasObservers(this.onBlur) ||
12217
- isUntouched(this.wrapper.nativeElement)) {
12256
+ isUntouched(this.wrapper.nativeElement) ||
12257
+ ((_a = this.formControl) === null || _a === void 0 ? void 0 : _a.updateOn) === 'blur') {
12218
12258
  this._zone.run(() => {
12219
12259
  this.onBlur.emit();
12220
12260
  this.onTouchedCallback();
@@ -14647,6 +14687,7 @@ class MultiSelectTreeComponent {
14647
14687
  * @hidden
14648
14688
  */
14649
14689
  handleBlur(e) {
14690
+ var _a;
14650
14691
  if (!this.isActionSheetExpanded) {
14651
14692
  const relatedTarget = e && e.relatedTarget;
14652
14693
  if (this.wrapper.nativeElement.contains(relatedTarget) ||
@@ -14656,7 +14697,8 @@ class MultiSelectTreeComponent {
14656
14697
  this.isFocused = false;
14657
14698
  this.togglePopup(false);
14658
14699
  if (hasObservers(this.onBlur) ||
14659
- isUntouched(this.wrapper.nativeElement)) {
14700
+ isUntouched(this.wrapper.nativeElement) ||
14701
+ ((_a = this.formControl) === null || _a === void 0 ? void 0 : _a.updateOn) === 'blur') {
14660
14702
  this._zone.run(() => {
14661
14703
  this.onBlur.emit();
14662
14704
  this.onTouchedCallback();
@@ -38,8 +38,8 @@ const packageMetadata = {
38
38
  name: '@progress/kendo-angular-dropdowns',
39
39
  productName: 'Kendo UI for Angular',
40
40
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
41
- publishDate: 1698310847,
42
- version: '14.0.2-develop.15',
41
+ publishDate: 1698414197,
42
+ version: '14.0.2-develop.16',
43
43
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
44
44
  };
45
45
 
@@ -2862,7 +2862,7 @@ const AUTOCOMPLETE_VALUE_ACCESSOR = {
2862
2862
  * ```
2863
2863
  */
2864
2864
  class AutoCompleteComponent {
2865
- constructor(localization, dataService, popupService, selectionService, navigationService, disabledItemsService, _zone, cdr, renderer, hostElement, touchEnabled) {
2865
+ constructor(localization, dataService, popupService, selectionService, navigationService, disabledItemsService, _zone, cdr, renderer, hostElement, touchEnabled, injector) {
2866
2866
  this.localization = localization;
2867
2867
  this.dataService = dataService;
2868
2868
  this.popupService = popupService;
@@ -2874,6 +2874,7 @@ class AutoCompleteComponent {
2874
2874
  this.renderer = renderer;
2875
2875
  this.hostElement = hostElement;
2876
2876
  this.touchEnabled = touchEnabled;
2877
+ this.injector = injector;
2877
2878
  /**
2878
2879
  * @hidden
2879
2880
  */
@@ -3321,6 +3322,13 @@ class AutoCompleteComponent {
3321
3322
  get isAdaptive() {
3322
3323
  return this.isAdaptiveModeEnabled && this.windowSize !== 'large';
3323
3324
  }
3325
+ /**
3326
+ * @hidden
3327
+ */
3328
+ get formControl() {
3329
+ const ngControl = this.injector.get(NgControl, null);
3330
+ return ngControl?.control || null;
3331
+ }
3324
3332
  ngOnInit() {
3325
3333
  this.renderer.removeAttribute(this.wrapper, "tabindex");
3326
3334
  this.subs.add(this.localization
@@ -3620,7 +3628,11 @@ class AutoCompleteComponent {
3620
3628
  }
3621
3629
  this.isFocused = false;
3622
3630
  const valueHasChanged = this.value !== this.text;
3623
- const runInZone = hasObservers(this.onBlur) || hasObservers(this.close) || isUntouched(this.wrapper) || valueHasChanged;
3631
+ const runInZone = hasObservers(this.onBlur) ||
3632
+ hasObservers(this.close) ||
3633
+ isUntouched(this.wrapper) ||
3634
+ valueHasChanged ||
3635
+ this.formControl?.updateOn === 'blur';
3624
3636
  if (runInZone) {
3625
3637
  this._zone.run(() => {
3626
3638
  if (valueHasChanged) {
@@ -3849,7 +3861,7 @@ class AutoCompleteComponent {
3849
3861
  this.actionSheetSearchBar.focus();
3850
3862
  }
3851
3863
  }
3852
- AutoCompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AutoCompleteComponent, deps: [{ token: i1.LocalizationService }, { token: DataService }, { token: i2$1.PopupService }, { token: SelectionService }, { token: NavigationService }, { token: DisabledItemsService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: TOUCH_ENABLED, optional: true }], target: i0.ɵɵFactoryTarget.Component });
3864
+ AutoCompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AutoCompleteComponent, deps: [{ token: i1.LocalizationService }, { token: DataService }, { token: i2$1.PopupService }, { token: SelectionService }, { token: NavigationService }, { token: DisabledItemsService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: TOUCH_ENABLED, optional: true }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
3853
3865
  AutoCompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: AutoCompleteComponent, selector: "kendo-autocomplete", inputs: { highlightFirst: "highlightFirst", showStickyHeader: "showStickyHeader", focusableId: "focusableId", data: "data", value: "value", valueField: "valueField", placeholder: "placeholder", adaptiveMode: "adaptiveMode", title: "title", subtitle: "subtitle", popupSettings: "popupSettings", listHeight: "listHeight", loading: "loading", clearButton: "clearButton", suggest: "suggest", disabled: "disabled", itemDisabled: "itemDisabled", readonly: "readonly", tabindex: "tabindex", tabIndex: "tabIndex", filterable: "filterable", virtual: "virtual", size: "size", rounded: "rounded", fillMode: "fillMode" }, outputs: { valueChange: "valueChange", filterChange: "filterChange", open: "open", opened: "opened", close: "close", closed: "closed", onFocus: "focus", onBlur: "blur" }, host: { properties: { "class.k-autocomplete": "this.widgetClasses", "class.k-input": "this.widgetClasses", "class.k-disabled": "this.isDisabled", "class.k-loading": "this.isLoading", "attr.dir": "this.dir" } }, providers: [
3854
3866
  AUTOCOMPLETE_VALUE_ACCESSOR,
3855
3867
  DataService,
@@ -4132,7 +4144,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
4132
4144
  }, {
4133
4145
  type: Inject,
4134
4146
  args: [TOUCH_ENABLED]
4135
- }] }]; }, propDecorators: { responsiveRendererComponent: [{
4147
+ }] }, { type: i0.Injector }]; }, propDecorators: { responsiveRendererComponent: [{
4136
4148
  type: ViewChild,
4137
4149
  args: [ResponsiveRendererComponent]
4138
4150
  }], highlightFirst: [{
@@ -4338,7 +4350,7 @@ const DEFAULT_FILL_MODE$4 = 'solid';
4338
4350
  * ```
4339
4351
  */
4340
4352
  class ComboBoxComponent {
4341
- constructor(wrapper, localization, popupService, selectionService, navigationService, disabledItemsService, dataService, zone, cdr, renderer, touchEnabled) {
4353
+ constructor(wrapper, localization, popupService, selectionService, navigationService, disabledItemsService, dataService, zone, cdr, renderer, touchEnabled, injector) {
4342
4354
  this.wrapper = wrapper;
4343
4355
  this.localization = localization;
4344
4356
  this.popupService = popupService;
@@ -4350,6 +4362,7 @@ class ComboBoxComponent {
4350
4362
  this.cdr = cdr;
4351
4363
  this.renderer = renderer;
4352
4364
  this.touchEnabled = touchEnabled;
4365
+ this.injector = injector;
4353
4366
  /**
4354
4367
  * @hidden
4355
4368
  */
@@ -4825,6 +4838,13 @@ class ComboBoxComponent {
4825
4838
  return 'visible';
4826
4839
  }
4827
4840
  }
4841
+ /**
4842
+ * @hidden
4843
+ */
4844
+ get formControl() {
4845
+ const ngControl = this.injector.get(NgControl, null);
4846
+ return ngControl?.control || null;
4847
+ }
4828
4848
  /**
4829
4849
  * @hidden
4830
4850
  */
@@ -5412,7 +5432,11 @@ class ComboBoxComponent {
5412
5432
  const currentText = this.searchbar.value;
5413
5433
  const textHasChanged = currentText !== (getter(this.dataItem, this.textField) || '');
5414
5434
  const valueHasChanged = unresolvedSelection || textHasChanged;
5415
- const runInZone = valueHasChanged || hasObservers(this.onBlur) || hasObservers(this.close) || isUntouched(this.wrapper.nativeElement);
5435
+ const runInZone = valueHasChanged ||
5436
+ hasObservers(this.onBlur) ||
5437
+ hasObservers(this.close) ||
5438
+ isUntouched(this.wrapper.nativeElement) ||
5439
+ this.formControl?.updateOn === 'blur';
5416
5440
  if (runInZone) {
5417
5441
  this.zone.run(() => {
5418
5442
  if (valueHasChanged) {
@@ -5711,7 +5735,7 @@ class ComboBoxComponent {
5711
5735
  this.actionSheetSearchBar.focus();
5712
5736
  }
5713
5737
  }
5714
- ComboBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ComboBoxComponent, deps: [{ token: i0.ElementRef }, { token: i1.LocalizationService }, { token: i2$1.PopupService }, { token: SelectionService }, { token: NavigationService }, { token: DisabledItemsService }, { token: DataService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: TOUCH_ENABLED, optional: true }], target: i0.ɵɵFactoryTarget.Component });
5738
+ ComboBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ComboBoxComponent, deps: [{ token: i0.ElementRef }, { token: i1.LocalizationService }, { token: i2$1.PopupService }, { token: SelectionService }, { token: NavigationService }, { token: DisabledItemsService }, { token: DataService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: TOUCH_ENABLED, optional: true }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
5715
5739
  ComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: ComboBoxComponent, selector: "kendo-combobox", inputs: { icon: "icon", svgIcon: "svgIcon", showStickyHeader: "showStickyHeader", focusableId: "focusableId", allowCustom: "allowCustom", data: "data", value: "value", textField: "textField", valueField: "valueField", valuePrimitive: "valuePrimitive", valueNormalizer: "valueNormalizer", placeholder: "placeholder", adaptiveMode: "adaptiveMode", title: "title", subtitle: "subtitle", popupSettings: "popupSettings", listHeight: "listHeight", loading: "loading", suggest: "suggest", clearButton: "clearButton", disabled: "disabled", itemDisabled: "itemDisabled", readonly: "readonly", tabindex: "tabindex", tabIndex: "tabIndex", filterable: "filterable", virtual: "virtual", size: "size", rounded: "rounded", fillMode: "fillMode" }, outputs: { valueChange: "valueChange", selectionChange: "selectionChange", filterChange: "filterChange", open: "open", opened: "opened", close: "close", closed: "closed", onFocus: "focus", onBlur: "blur" }, host: { properties: { "class.k-combobox": "this.widgetClasses", "class.k-input": "this.widgetClasses", "class.k-disabled": "this.isDisabled", "class.k-loading": "this.isLoading", "attr.dir": "this.dir" } }, providers: [
5716
5740
  COMBOBOX_VALUE_ACCESSOR,
5717
5741
  DataService,
@@ -6034,7 +6058,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
6034
6058
  }, {
6035
6059
  type: Inject,
6036
6060
  args: [TOUCH_ENABLED]
6037
- }] }]; }, propDecorators: { icon: [{
6061
+ }] }, { type: i0.Injector }]; }, propDecorators: { icon: [{
6038
6062
  type: Input
6039
6063
  }], svgIcon: [{
6040
6064
  type: Input
@@ -7360,7 +7384,8 @@ class DropDownListComponent {
7360
7384
  hasObservers(this.close) ||
7361
7385
  hasObservers(this.onBlur) ||
7362
7386
  hasObservers(this.filterChange) ||
7363
- isUntouched(this.wrapper.nativeElement)) {
7387
+ isUntouched(this.wrapper.nativeElement) ||
7388
+ this.formControl?.updateOn === 'blur') {
7364
7389
  this._zone.run(() => {
7365
7390
  if (valueHasChanged) {
7366
7391
  this.selectionService.change(this.selectionService.selected[0]);
@@ -8564,7 +8589,7 @@ const DEFAULT_FILL_MODE$2 = 'solid';
8564
8589
  * ```
8565
8590
  */
8566
8591
  class MultiSelectComponent {
8567
- constructor(wrapper, localization, popupService, dataService, selectionService, navigationService, disabledItemsService, cdr, differs, renderer, _zone, touchEnabled) {
8592
+ constructor(wrapper, localization, popupService, dataService, selectionService, navigationService, disabledItemsService, cdr, differs, renderer, _zone, touchEnabled, injector) {
8568
8593
  this.wrapper = wrapper;
8569
8594
  this.localization = localization;
8570
8595
  this.popupService = popupService;
@@ -8577,6 +8602,7 @@ class MultiSelectComponent {
8577
8602
  this.renderer = renderer;
8578
8603
  this._zone = _zone;
8579
8604
  this.touchEnabled = touchEnabled;
8605
+ this.injector = injector;
8580
8606
  /**
8581
8607
  * @hidden
8582
8608
  */
@@ -8804,6 +8830,13 @@ class MultiSelectComponent {
8804
8830
  get ariaControls() {
8805
8831
  return this.isOpen ? this.listBoxId : undefined;
8806
8832
  }
8833
+ /**
8834
+ * @hidden
8835
+ */
8836
+ get formControl() {
8837
+ const ngControl = this.injector.get(NgControl, null);
8838
+ return ngControl?.control || null;
8839
+ }
8807
8840
  /**
8808
8841
  * Focuses a specific item of the MultiSelect based on a provided index.
8809
8842
  * If there is a custom item it is positioned at index -1.
@@ -8870,7 +8903,8 @@ class MultiSelectComponent {
8870
8903
  if (hasObservers(this.onBlur) ||
8871
8904
  hasObservers(this.filterChange) ||
8872
8905
  hasObservers(this.close) ||
8873
- isUntouched(this.wrapper.nativeElement)) {
8906
+ isUntouched(this.wrapper.nativeElement) ||
8907
+ this.formControl?.updateOn === 'blur') {
8874
8908
  this._zone.run(() => {
8875
8909
  this.closePopup();
8876
8910
  if (!(this.isOpen && this.allowCustom)) {
@@ -10157,7 +10191,7 @@ class MultiSelectComponent {
10157
10191
  this.actionSheetSearchBar.focus();
10158
10192
  }
10159
10193
  }
10160
- MultiSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MultiSelectComponent, deps: [{ token: i0.ElementRef }, { token: i1.LocalizationService }, { token: i2$1.PopupService }, { token: DataService }, { token: SelectionService }, { token: NavigationService }, { token: DisabledItemsService }, { token: i0.ChangeDetectorRef }, { token: i0.KeyValueDiffers }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: TOUCH_ENABLED, optional: true }], target: i0.ɵɵFactoryTarget.Component });
10194
+ MultiSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MultiSelectComponent, deps: [{ token: i0.ElementRef }, { token: i1.LocalizationService }, { token: i2$1.PopupService }, { token: DataService }, { token: SelectionService }, { token: NavigationService }, { token: DisabledItemsService }, { token: i0.ChangeDetectorRef }, { token: i0.KeyValueDiffers }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: TOUCH_ENABLED, optional: true }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
10161
10195
  MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: MultiSelectComponent, selector: "kendo-multiselect", inputs: { showStickyHeader: "showStickyHeader", focusableId: "focusableId", autoClose: "autoClose", loading: "loading", data: "data", value: "value", valueField: "valueField", textField: "textField", tabindex: "tabindex", tabIndex: "tabIndex", size: "size", rounded: "rounded", fillMode: "fillMode", placeholder: "placeholder", adaptiveMode: "adaptiveMode", title: "title", subtitle: "subtitle", disabled: "disabled", itemDisabled: "itemDisabled", checkboxes: "checkboxes", readonly: "readonly", filterable: "filterable", virtual: "virtual", popupSettings: "popupSettings", listHeight: "listHeight", valuePrimitive: "valuePrimitive", clearButton: "clearButton", tagMapper: "tagMapper", allowCustom: "allowCustom", valueNormalizer: "valueNormalizer" }, outputs: { filterChange: "filterChange", valueChange: "valueChange", open: "open", opened: "opened", close: "close", closed: "closed", onFocus: "focus", onBlur: "blur", removeTag: "removeTag" }, host: { properties: { "class.k-multiselect": "this.hostClasses", "class.k-input": "this.hostClasses", "attr.dir": "this.dir", "class.k-disabled": "this.disabledClass", "class.k-loading": "this.isLoading" } }, providers: [
10162
10196
  MULTISELECT_VALUE_ACCESSOR,
10163
10197
  DataService,
@@ -10556,7 +10590,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10556
10590
  }, {
10557
10591
  type: Inject,
10558
10592
  args: [TOUCH_ENABLED]
10559
- }] }]; }, propDecorators: { responsiveRendererComponent: [{
10593
+ }] }, { type: i0.Injector }]; }, propDecorators: { responsiveRendererComponent: [{
10560
10594
  type: ViewChild,
10561
10595
  args: [ResponsiveRendererComponent]
10562
10596
  }], showStickyHeader: [{
@@ -10848,8 +10882,8 @@ const getRowWidthFromColumnsMeta = (columns) => {
10848
10882
  * Represents the [Kendo UI MultiColumnComboBox component for Angular]({% slug overview_multicolumncombobox %}).
10849
10883
  */
10850
10884
  class MultiColumnComboBoxComponent extends ComboBoxComponent {
10851
- constructor(localization, popupService, selectionService, navigationService, disabledItemsService, dataService, zone, changeDetector, renderer, wrapper, touchEnabled) {
10852
- super(wrapper, localization, popupService, selectionService, navigationService, disabledItemsService, dataService, zone, changeDetector, renderer, touchEnabled);
10885
+ constructor(localization, popupService, selectionService, navigationService, disabledItemsService, dataService, zone, changeDetector, renderer, wrapper, touchEnabled, injector) {
10886
+ super(wrapper, localization, popupService, selectionService, navigationService, disabledItemsService, dataService, zone, changeDetector, renderer, touchEnabled, injector);
10853
10887
  /**
10854
10888
  * @hidden
10855
10889
  */
@@ -10972,7 +11006,7 @@ class MultiColumnComboBoxComponent extends ComboBoxComponent {
10972
11006
  });
10973
11007
  }
10974
11008
  }
10975
- MultiColumnComboBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MultiColumnComboBoxComponent, deps: [{ token: i1.LocalizationService }, { token: i2$1.PopupService }, { token: SelectionService }, { token: NavigationService }, { token: DisabledItemsService }, { token: DataService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: TOUCH_ENABLED }], target: i0.ɵɵFactoryTarget.Component });
11009
+ MultiColumnComboBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MultiColumnComboBoxComponent, deps: [{ token: i1.LocalizationService }, { token: i2$1.PopupService }, { token: SelectionService }, { token: NavigationService }, { token: DisabledItemsService }, { token: DataService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: TOUCH_ENABLED }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
10976
11010
  MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: MultiColumnComboBoxComponent, selector: "kendo-multicolumncombobox", host: { properties: { "class.k-dropdowngrid": "this.hostClasses", "class.k-disabled": "this.isDisabled" } }, providers: [
10977
11011
  SelectionService,
10978
11012
  DataService,
@@ -11490,7 +11524,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11490
11524
  }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i2$1.PopupService }, { type: SelectionService }, { type: NavigationService }, { type: DisabledItemsService }, { type: DataService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: undefined, decorators: [{
11491
11525
  type: Inject,
11492
11526
  args: [TOUCH_ENABLED]
11493
- }] }]; }, propDecorators: { hostClasses: [{
11527
+ }] }, { type: i0.Injector }]; }, propDecorators: { hostClasses: [{
11494
11528
  type: HostBinding,
11495
11529
  args: ['class.k-dropdowngrid']
11496
11530
  }], isDisabled: [{
@@ -12188,7 +12222,8 @@ class DropDownTreeComponent {
12188
12222
  this.isFocused = false;
12189
12223
  this.togglePopup(false);
12190
12224
  if (hasObservers(this.onBlur) ||
12191
- isUntouched(this.wrapper.nativeElement)) {
12225
+ isUntouched(this.wrapper.nativeElement) ||
12226
+ this.formControl?.updateOn === 'blur') {
12192
12227
  this._zone.run(() => {
12193
12228
  this.onBlur.emit();
12194
12229
  this.onTouchedCallback();
@@ -14628,7 +14663,8 @@ class MultiSelectTreeComponent {
14628
14663
  this.isFocused = false;
14629
14664
  this.togglePopup(false);
14630
14665
  if (hasObservers(this.onBlur) ||
14631
- isUntouched(this.wrapper.nativeElement)) {
14666
+ isUntouched(this.wrapper.nativeElement) ||
14667
+ this.formControl?.updateOn === 'blur') {
14632
14668
  this._zone.run(() => {
14633
14669
  this.onBlur.emit();
14634
14670
  this.onTouchedCallback();
@@ -4,8 +4,9 @@
4
4
  *-------------------------------------------------------------------------------------------*/
5
5
  import { AdaptiveMode, WindowSize } from '../common/util';
6
6
  import { SearchBarComponent } from '../common/searchbar.component';
7
- import { Renderer2, ViewContainerRef, ElementRef, TemplateRef, OnDestroy, OnChanges, DoCheck, EventEmitter, AfterContentChecked, AfterViewInit, ChangeDetectorRef, KeyValueDiffers, NgZone, OnInit } from '@angular/core';
7
+ import { Renderer2, ViewContainerRef, ElementRef, TemplateRef, OnDestroy, OnChanges, DoCheck, EventEmitter, AfterContentChecked, AfterViewInit, ChangeDetectorRef, KeyValueDiffers, NgZone, OnInit, Injector } from '@angular/core';
8
8
  import { Observable } from 'rxjs';
9
+ import { FormControl } from '@angular/forms';
9
10
  import { SelectionService, SelectionEvent } from '../common/selection/selection.service';
10
11
  import { PopupSettings } from '../common/models/popup-settings';
11
12
  import { NavigationService } from '../common/navigation/navigation.service';
@@ -68,6 +69,7 @@ export declare class MultiSelectComponent implements OnDestroy, OnChanges, OnIni
68
69
  private renderer;
69
70
  private _zone;
70
71
  private touchEnabled;
72
+ private injector;
71
73
  /**
72
74
  * @hidden
73
75
  */
@@ -104,6 +106,10 @@ export declare class MultiSelectComponent implements OnDestroy, OnChanges, OnIni
104
106
  * @hidden
105
107
  */
106
108
  get ariaControls(): string;
109
+ /**
110
+ * @hidden
111
+ */
112
+ get formControl(): FormControl;
107
113
  /**
108
114
  * Focuses a specific item of the MultiSelect based on a provided index.
109
115
  * If there is a custom item it is positioned at index -1.
@@ -466,7 +472,7 @@ export declare class MultiSelectComponent implements OnDestroy, OnChanges, OnIni
466
472
  private _fillMode;
467
473
  private _subtitle;
468
474
  private _valueHolder;
469
- constructor(wrapper: ElementRef, localization: LocalizationService, popupService: PopupService, dataService: DataService, selectionService: SelectionService, navigationService: NavigationService, disabledItemsService: DisabledItemsService, cdr: ChangeDetectorRef, differs: KeyValueDiffers, renderer: Renderer2, _zone: NgZone, touchEnabled: boolean);
475
+ constructor(wrapper: ElementRef, localization: LocalizationService, popupService: PopupService, dataService: DataService, selectionService: SelectionService, navigationService: NavigationService, disabledItemsService: DisabledItemsService, cdr: ChangeDetectorRef, differs: KeyValueDiffers, renderer: Renderer2, _zone: NgZone, touchEnabled: boolean, injector: Injector);
470
476
  get listContainerClasses(): any[];
471
477
  /**
472
478
  * @hidden
@@ -653,6 +659,6 @@ export declare class MultiSelectComponent implements OnDestroy, OnChanges, OnIni
653
659
  private setComponentClasses;
654
660
  private closeActionSheet;
655
661
  private openActionSheet;
656
- static ɵfac: i0.ɵɵFactoryDeclaration<MultiSelectComponent, [null, null, null, null, null, null, null, null, null, null, null, { optional: true; }]>;
662
+ static ɵfac: i0.ɵɵFactoryDeclaration<MultiSelectComponent, [null, null, null, null, null, null, null, null, null, null, null, { optional: true; }, null]>;
657
663
  static ɵcmp: i0.ɵɵComponentDeclaration<MultiSelectComponent, "kendo-multiselect", ["kendoMultiSelect"], { "showStickyHeader": "showStickyHeader"; "focusableId": "focusableId"; "autoClose": "autoClose"; "loading": "loading"; "data": "data"; "value": "value"; "valueField": "valueField"; "textField": "textField"; "tabindex": "tabindex"; "tabIndex": "tabIndex"; "size": "size"; "rounded": "rounded"; "fillMode": "fillMode"; "placeholder": "placeholder"; "adaptiveMode": "adaptiveMode"; "title": "title"; "subtitle": "subtitle"; "disabled": "disabled"; "itemDisabled": "itemDisabled"; "checkboxes": "checkboxes"; "readonly": "readonly"; "filterable": "filterable"; "virtual": "virtual"; "popupSettings": "popupSettings"; "listHeight": "listHeight"; "valuePrimitive": "valuePrimitive"; "clearButton": "clearButton"; "tagMapper": "tagMapper"; "allowCustom": "allowCustom"; "valueNormalizer": "valueNormalizer"; }, { "filterChange": "filterChange"; "valueChange": "valueChange"; "open": "open"; "opened": "opened"; "close": "close"; "closed": "closed"; "onFocus": "focus"; "onBlur": "blur"; "removeTag": "removeTag"; }, ["template", "customItemTemplate", "groupTemplate", "fixedGroupTemplate", "headerTemplate", "footerTemplate", "tagTemplate", "groupTagTemplate", "noDataTemplate"], never>;
658
664
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@progress/kendo-angular-dropdowns",
3
- "version": "14.0.2-develop.15",
3
+ "version": "14.0.2-develop.16",
4
4
  "description": "A wide variety of native Angular dropdown components including AutoComplete, ComboBox, DropDownList, DropDownTree, MultiColumnComboBox, MultiSelect, and MultiSelectTree ",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "author": "Progress",
@@ -25,18 +25,18 @@
25
25
  "@angular/forms": "13 - 16",
26
26
  "@angular/platform-browser": "13 - 16",
27
27
  "@progress/kendo-licensing": "^1.0.2",
28
- "@progress/kendo-angular-common": "14.0.2-develop.15",
29
- "@progress/kendo-angular-l10n": "14.0.2-develop.15",
30
- "@progress/kendo-angular-popup": "14.0.2-develop.15",
31
- "@progress/kendo-angular-icons": "14.0.2-develop.15",
32
- "@progress/kendo-angular-treeview": "14.0.2-develop.15",
28
+ "@progress/kendo-angular-common": "14.0.2-develop.16",
29
+ "@progress/kendo-angular-l10n": "14.0.2-develop.16",
30
+ "@progress/kendo-angular-popup": "14.0.2-develop.16",
31
+ "@progress/kendo-angular-icons": "14.0.2-develop.16",
32
+ "@progress/kendo-angular-treeview": "14.0.2-develop.16",
33
33
  "rxjs": "^6.5.3 || ^7.0.0",
34
- "@progress/kendo-angular-navigation": "14.0.2-develop.15",
35
- "@progress/kendo-angular-label": "14.0.2-develop.15"
34
+ "@progress/kendo-angular-navigation": "14.0.2-develop.16",
35
+ "@progress/kendo-angular-label": "14.0.2-develop.16"
36
36
  },
37
37
  "dependencies": {
38
38
  "tslib": "^2.3.1",
39
- "@progress/kendo-angular-schematics": "14.0.2-develop.15",
39
+ "@progress/kendo-angular-schematics": "14.0.2-develop.16",
40
40
  "@progress/kendo-common": "^0.2.1"
41
41
  },
42
42
  "schematics": "./schematics/collection.json",
@@ -4,9 +4,9 @@ const schematics_1 = require("@angular-devkit/schematics");
4
4
  function default_1(options) {
5
5
  const finalOptions = Object.assign(Object.assign({}, options), { mainNgModule: 'DropDownsModule', package: 'dropdowns', peerDependencies: {
6
6
  // peers of the treeview
7
- '@progress/kendo-angular-inputs': '14.0.2-develop.15',
7
+ '@progress/kendo-angular-inputs': '14.0.2-develop.16',
8
8
  // peers of inputs
9
- '@progress/kendo-angular-intl': '14.0.2-develop.15',
9
+ '@progress/kendo-angular-intl': '14.0.2-develop.16',
10
10
  '@progress/kendo-drawing': '^1.17.2',
11
11
  // Peer dependency of icons
12
12
  '@progress/kendo-svg-icons': '^2.0.0'