@progress/kendo-angular-dropdowns 11.6.0 → 12.0.0-develop.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/autocomplete/autocomplete.component.d.ts +82 -20
  2. package/comboboxes/combobox.component.d.ts +76 -8
  3. package/comboboxes/multicolumncombobox.component.d.ts +4 -0
  4. package/common/action-sheet.component.d.ts +43 -0
  5. package/common/list.component.d.ts +2 -1
  6. package/common/localization/messages.d.ts +9 -1
  7. package/common/selection/selectable.directive.d.ts +2 -1
  8. package/common/shared.module.d.ts +11 -7
  9. package/common/util.d.ts +39 -2
  10. package/dropdownlist/dropdownlist.component.d.ts +78 -9
  11. package/dropdowntrees/dropdowntree.component.d.ts +80 -8
  12. package/dropdowntrees/multiselecttree.component.d.ts +90 -6
  13. package/esm2020/autocomplete/autocomplete.component.mjs +294 -116
  14. package/esm2020/comboboxes/combobox.component.mjs +251 -60
  15. package/esm2020/comboboxes/multicolumncombobox.component.mjs +110 -119
  16. package/esm2020/common/action-sheet.component.mjs +243 -0
  17. package/esm2020/common/list.component.mjs +11 -2
  18. package/esm2020/common/localization/messages.mjs +5 -1
  19. package/esm2020/common/selection/selectable.directive.mjs +3 -3
  20. package/esm2020/common/shared.module.mjs +13 -6
  21. package/esm2020/common/util.mjs +68 -2
  22. package/esm2020/dropdownlist/dropdownlist.component.mjs +245 -64
  23. package/esm2020/dropdowntrees/dropdowntree.component.mjs +254 -56
  24. package/esm2020/dropdowntrees/multiselecttree.component.mjs +291 -55
  25. package/esm2020/index.mjs +1 -0
  26. package/esm2020/multiselect/multiselect.component.mjs +320 -88
  27. package/esm2020/package-metadata.mjs +2 -2
  28. package/fesm2015/progress-kendo-angular-dropdowns.mjs +2085 -552
  29. package/fesm2020/progress-kendo-angular-dropdowns.mjs +2054 -545
  30. package/index.d.ts +2 -0
  31. package/multiselect/multiselect.component.d.ts +87 -10
  32. package/package.json +9 -8
  33. package/schematics/ngAdd/index.js +2 -2
@@ -4,9 +4,9 @@
4
4
  *-------------------------------------------------------------------------------------------*/
5
5
  import * as i0 from '@angular/core';
6
6
  import { EventEmitter, Component, Input, Output, ViewChild, HostBinding, Directive, Injectable, InjectionToken, HostListener, ViewChildren, forwardRef, isDevMode, ViewContainerRef, Optional, Inject, ContentChild, ContentChildren, ChangeDetectionStrategy, NgModule } from '@angular/core';
7
- import * as i10 from '@progress/kendo-angular-common';
7
+ import * as i9 from '@progress/kendo-angular-common';
8
8
  import { isDocumentAvailable, isSafari, Keys, isChanged, hasObservers, KendoInput, anyChanged, guid as guid$1, ResizeSensorModule, EventsModule } from '@progress/kendo-angular-common';
9
- import * as i13 from '@angular/forms';
9
+ import * as i14 from '@angular/forms';
10
10
  import { NgControl, NG_VALUE_ACCESSOR, FormsModule, ReactiveFormsModule } from '@angular/forms';
11
11
  import { validatePackage } from '@progress/kendo-licensing';
12
12
  import { getter as getter$1, pointers, touchEnabled } from '@progress/kendo-common';
@@ -14,14 +14,20 @@ import { Subscription, merge, fromEvent, Subject, of, interval } from 'rxjs';
14
14
  import * as i1 from '@progress/kendo-angular-l10n';
15
15
  import { ComponentMessages, LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';
16
16
  import { xIcon, caretAltDownIcon, searchIcon, xCircleIcon, plusIcon } from '@progress/kendo-svg-icons';
17
- import * as i2 from '@progress/kendo-angular-popup';
18
- import { PopupModule } from '@progress/kendo-angular-popup';
19
- export { PopupComponent } from '@progress/kendo-angular-popup';
17
+ import * as i2 from '@progress/kendo-angular-navigation';
18
+ import { ActionSheetComponent, ActionSheetModule } from '@progress/kendo-angular-navigation';
19
+ import * as i3 from '@progress/kendo-angular-buttons';
20
+ import { ButtonModule } from '@progress/kendo-angular-buttons';
21
+ import * as i4 from '@progress/kendo-angular-inputs';
22
+ import { TextBoxModule } from '@progress/kendo-angular-inputs';
20
23
  import * as i8 from '@progress/kendo-angular-icons';
21
24
  import { IconsModule } from '@progress/kendo-angular-icons';
22
- import { map, switchMap, take, auditTime, tap, filter, partition, throttleTime, catchError, skipWhile, concatMap, takeUntil, debounceTime } from 'rxjs/operators';
23
- import * as i12 from '@angular/common';
25
+ import * as i13 from '@angular/common';
24
26
  import { CommonModule } from '@angular/common';
27
+ import * as i2$1 from '@progress/kendo-angular-popup';
28
+ import { PopupModule } from '@progress/kendo-angular-popup';
29
+ export { PopupComponent } from '@progress/kendo-angular-popup';
30
+ import { map, switchMap, take, auditTime, tap, filter, partition, throttleTime, catchError, skipWhile, concatMap, takeUntil, debounceTime } from 'rxjs/operators';
25
31
  import * as i1$1 from '@progress/kendo-angular-treeview';
26
32
  import { DataBoundComponent, ExpandableComponent, FlatDataBindingDirective, HierarchyBindingDirective, ExpandDirective, TreeViewModule } from '@progress/kendo-angular-treeview';
27
33
 
@@ -32,8 +38,8 @@ const packageMetadata = {
32
38
  name: '@progress/kendo-angular-dropdowns',
33
39
  productName: 'Kendo UI for Angular',
34
40
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
35
- publishDate: 1680701848,
36
- version: '11.6.0',
41
+ publishDate: 1681902877,
42
+ version: '12.0.0-develop.10',
37
43
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
38
44
  };
39
45
 
@@ -389,13 +395,79 @@ const getTextField = (field, level) => {
389
395
  /**
390
396
  * @hidden
391
397
  */
392
- const getSearchableItems = (treeViewId, popupElement) => {
398
+ const getSearchableItems = (treeViewId, element) => {
393
399
  const nodeSeletor = `kendo-treeview[id='${treeViewId}'] li.k-treeview-item`;
394
- const liElements = Array.from(popupElement.querySelectorAll(nodeSeletor));
400
+ const liElements = Array.from(element.querySelectorAll(nodeSeletor));
395
401
  return liElements.map((liElement) => {
396
402
  return { text: liElement.innerText, index: liElement.getAttribute('data-treeindex') };
397
403
  });
398
404
  };
405
+ /**
406
+ * @hidden
407
+ */
408
+ const windowSize = () => {
409
+ if (typeof window !== 'undefined') {
410
+ if (window.innerWidth > 768) {
411
+ return 'large';
412
+ }
413
+ else if (window.innerWidth > 500) {
414
+ return 'medium';
415
+ }
416
+ else {
417
+ return 'small';
418
+ }
419
+ }
420
+ };
421
+ /**
422
+ * @hidden
423
+ */
424
+ const isTruthy = (value) => !!value;
425
+ /**
426
+ * @hidden
427
+ */
428
+ const updateActionSheetAdaptiveAppearance = (actionSheet, windowSize, renderer) => {
429
+ const element = actionSheet['element'].nativeElement.querySelector('.k-actionsheet');
430
+ const animationContainer = actionSheet['element'].nativeElement.querySelector('.k-child-animation-container');
431
+ if (windowSize === 'medium') {
432
+ renderer.removeClass(element, 'k-actionsheet-fullscreen');
433
+ renderer.addClass(element, 'k-actionsheet-bottom');
434
+ renderer.addClass(element, 'k-adaptive-actionsheet');
435
+ renderer.removeStyle(animationContainer, 'top');
436
+ renderer.removeStyle(animationContainer, 'height');
437
+ renderer.setStyle(animationContainer, 'bottom', '0px');
438
+ }
439
+ else if (windowSize === 'small') {
440
+ renderer.removeClass(element, 'k-actionsheet-bottom');
441
+ renderer.addClass(element, 'k-actionsheet-fullscreen');
442
+ renderer.addClass(element, 'k-adaptive-actionsheet');
443
+ renderer.setStyle(animationContainer, 'bottom', '0px');
444
+ renderer.setStyle(animationContainer, 'height', '100%');
445
+ }
446
+ };
447
+ /**
448
+ * @hidden
449
+ */
450
+ const setListBoxAriaLabelLebBy = (optionsList, element, renderer) => {
451
+ const listBox = optionsList.wrapper.nativeElement.querySelector('kendo-list ul');
452
+ const ariaLabel = element.nativeElement.getAttribute('aria-labelledby');
453
+ if (ariaLabel) {
454
+ renderer.setAttribute(listBox, 'aria-labelledby', ariaLabel);
455
+ }
456
+ };
457
+ /**
458
+ * @hidden
459
+ */
460
+ const setActionSheetTitle = (element, actionSheetTitle) => {
461
+ const ariaLabel = element.nativeElement.getAttribute('aria-labelledby');
462
+ if (!actionSheetTitle && ariaLabel) {
463
+ return document.getElementById(ariaLabel).innerText;
464
+ }
465
+ return actionSheetTitle;
466
+ };
467
+ /**
468
+ * @hidden
469
+ */
470
+ const animationDuration = 300;
399
471
 
400
472
  /**
401
473
  * @hidden
@@ -601,7 +673,7 @@ SearchBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
601
673
  [attr.aria-busy]="isLoading"
602
674
  [attr.aria-invalid]="formControl?.invalid"
603
675
  />
604
- `, isInline: true, directives: [{ type: i10.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }] });
676
+ `, isInline: true, directives: [{ type: i9.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }] });
605
677
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SearchBarComponent, decorators: [{
606
678
  type: Component,
607
679
  args: [{
@@ -1630,6 +1702,233 @@ const normalizeVirtualizationSettings = (settings, defaultOverrides) => {
1630
1702
  */
1631
1703
  const TOUCH_ENABLED = new InjectionToken('dropdowns-touch-enabled');
1632
1704
 
1705
+ /**
1706
+ * @hidden
1707
+ */
1708
+ class ResponsiveRendererComponent {
1709
+ constructor(localization) {
1710
+ this.localization = localization;
1711
+ this.closePopup = new EventEmitter();
1712
+ this.textInputChange = new EventEmitter();
1713
+ this.navigate = new EventEmitter();
1714
+ this.onExpand = new EventEmitter();
1715
+ this.onCollapse = new EventEmitter();
1716
+ this.onApply = new EventEmitter();
1717
+ this.onCancel = new EventEmitter();
1718
+ this.searchBarValue = '';
1719
+ this.animationDuration = animationDuration;
1720
+ this.xIcon = xIcon;
1721
+ }
1722
+ messageFor(key) {
1723
+ return this.localization.get(key);
1724
+ }
1725
+ onValueChange(value) {
1726
+ this.searchBarValue = value;
1727
+ this.textInputChange.emit(value);
1728
+ }
1729
+ }
1730
+ ResponsiveRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ResponsiveRendererComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
1731
+ ResponsiveRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: ResponsiveRendererComponent, selector: "responsive-renderer", inputs: { title: "title", showActionButtons: "showActionButtons", subtitle: "subtitle", size: "size", showTextInput: "showTextInput", sharedPopupActionSheetTemplate: "sharedPopupActionSheetTemplate", isActionSheetExpanded: "isActionSheetExpanded", text: "text", placeholder: "placeholder" }, outputs: { closePopup: "closePopup", textInputChange: "textInputChange", navigate: "navigate", onExpand: "onExpand", onCollapse: "onCollapse", onApply: "onApply", onCancel: "onCancel" }, viewQueries: [{ propertyName: "actionSheet", first: true, predicate: ActionSheetComponent, descendants: true }, { propertyName: "actionSheetSearchBar", first: true, predicate: ["actionSheetSearchBar"], descendants: true }], ngImport: i0, template: `
1732
+ <kendo-actionsheet
1733
+ #actionSheet
1734
+ [animation]="{ duration: animationDuration }"
1735
+ [expanded]="isActionSheetExpanded"
1736
+ (overlayClick)="closePopup.emit()"
1737
+ (keydown)="navigate.emit($event)"
1738
+ (expand)="onExpand.emit()"
1739
+ (collapse)="onCollapse.emit()"
1740
+ >
1741
+ <ng-template kendoActionSheetTemplate>
1742
+ <div class="k-text-center k-actionsheet-titlebar">
1743
+ <div class="k-actionsheet-titlebar-group k-hbox">
1744
+ <div class="k-actionsheet-title">
1745
+ <div class="k-text-center">{{ title }}</div>
1746
+ <div class="k-actionsheet-subtitle k-text-center">{{ subtitle }}</div>
1747
+ </div>
1748
+ <div class="k-actionsheet-actions">
1749
+ <button
1750
+ kendoButton
1751
+ icon="x"
1752
+ [attr.title]="messageFor('clearTitle')"
1753
+ [svgIcon]="xIcon"
1754
+ fillMode="flat"
1755
+ [size]="size"
1756
+ [tabIndex]="-1"
1757
+ aria-hidden="true"
1758
+ innerCssClass="k-button-icon"
1759
+ (click)="closePopup.emit()"
1760
+ ></button>
1761
+ </div>
1762
+ </div>
1763
+ <div class="k-actionsheet-titlebar-group k-actionsheet-filter">
1764
+ <kendo-textbox
1765
+ *ngIf="showTextInput"
1766
+ #actionSheetSearchBar
1767
+ [value]="searchBarValue"
1768
+ [size]="size"
1769
+ placeholder="Filter"
1770
+ class="k-searchbox"
1771
+ autocomplete="off"
1772
+ (valueChange)="onValueChange($event)"
1773
+ >
1774
+ <ng-template kendoTextBoxPrefixTemplate>
1775
+ <kendo-icon name="search"></kendo-icon>
1776
+ </ng-template>
1777
+ </kendo-textbox>
1778
+ </div>
1779
+ </div>
1780
+ <div class="k-actionsheet-content !k-overflow-hidden">
1781
+ <div class="k-list-container">
1782
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
1783
+ </div>
1784
+ </div>
1785
+
1786
+ <div *ngIf="showActionButtons" class="k-actionsheet-footer k-actions k-actions-stretched">
1787
+ <button kendoButton
1788
+ tabindex="0"
1789
+ aria-disabled="false"
1790
+ [size]="size"
1791
+ themeColor="base"
1792
+ (click)="onCancel.emit()"
1793
+ (keydown.enter)="$event.stopImmediatePropagation()">
1794
+ {{messageFor('cancelButton')}}
1795
+ </button>
1796
+ <button kendoButton
1797
+ tabindex="0"
1798
+ aria-disabled="false"
1799
+ [size]="size"
1800
+ themeColor="primary"
1801
+ (click)="onApply.emit()"
1802
+ (keydown.enter)="$event.stopImmediatePropagation()">
1803
+ {{messageFor('applyButton')}}
1804
+ </button>
1805
+ </div>
1806
+ </ng-template>
1807
+ </kendo-actionsheet>
1808
+ `, isInline: true, components: [{ type: i2.ActionSheetComponent, selector: "kendo-actionsheet", inputs: ["title", "subtitle", "items", "cssClass", "animation", "expanded"], outputs: ["expandedChange", "expand", "collapse", "itemClick", "overlayClick"], exportAs: ["kendoActionSheet"] }, { type: i3.Button, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { type: i4.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "errorIcon", "clearButtonIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { type: i8.IconComponent, selector: "kendo-icon", inputs: ["name"], exportAs: ["kendoIcon"] }], directives: [{ type: i2.ActionSheetTemplateDirective, selector: "[kendoActionSheetTemplate]" }, { type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.TextBoxPrefixTemplateDirective, selector: "[kendoTextBoxPrefixTemplate]" }, { type: i13.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
1809
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ResponsiveRendererComponent, decorators: [{
1810
+ type: Component,
1811
+ args: [{
1812
+ selector: 'responsive-renderer',
1813
+ template: `
1814
+ <kendo-actionsheet
1815
+ #actionSheet
1816
+ [animation]="{ duration: animationDuration }"
1817
+ [expanded]="isActionSheetExpanded"
1818
+ (overlayClick)="closePopup.emit()"
1819
+ (keydown)="navigate.emit($event)"
1820
+ (expand)="onExpand.emit()"
1821
+ (collapse)="onCollapse.emit()"
1822
+ >
1823
+ <ng-template kendoActionSheetTemplate>
1824
+ <div class="k-text-center k-actionsheet-titlebar">
1825
+ <div class="k-actionsheet-titlebar-group k-hbox">
1826
+ <div class="k-actionsheet-title">
1827
+ <div class="k-text-center">{{ title }}</div>
1828
+ <div class="k-actionsheet-subtitle k-text-center">{{ subtitle }}</div>
1829
+ </div>
1830
+ <div class="k-actionsheet-actions">
1831
+ <button
1832
+ kendoButton
1833
+ icon="x"
1834
+ [attr.title]="messageFor('clearTitle')"
1835
+ [svgIcon]="xIcon"
1836
+ fillMode="flat"
1837
+ [size]="size"
1838
+ [tabIndex]="-1"
1839
+ aria-hidden="true"
1840
+ innerCssClass="k-button-icon"
1841
+ (click)="closePopup.emit()"
1842
+ ></button>
1843
+ </div>
1844
+ </div>
1845
+ <div class="k-actionsheet-titlebar-group k-actionsheet-filter">
1846
+ <kendo-textbox
1847
+ *ngIf="showTextInput"
1848
+ #actionSheetSearchBar
1849
+ [value]="searchBarValue"
1850
+ [size]="size"
1851
+ placeholder="Filter"
1852
+ class="k-searchbox"
1853
+ autocomplete="off"
1854
+ (valueChange)="onValueChange($event)"
1855
+ >
1856
+ <ng-template kendoTextBoxPrefixTemplate>
1857
+ <kendo-icon name="search"></kendo-icon>
1858
+ </ng-template>
1859
+ </kendo-textbox>
1860
+ </div>
1861
+ </div>
1862
+ <div class="k-actionsheet-content !k-overflow-hidden">
1863
+ <div class="k-list-container">
1864
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
1865
+ </div>
1866
+ </div>
1867
+
1868
+ <div *ngIf="showActionButtons" class="k-actionsheet-footer k-actions k-actions-stretched">
1869
+ <button kendoButton
1870
+ tabindex="0"
1871
+ aria-disabled="false"
1872
+ [size]="size"
1873
+ themeColor="base"
1874
+ (click)="onCancel.emit()"
1875
+ (keydown.enter)="$event.stopImmediatePropagation()">
1876
+ {{messageFor('cancelButton')}}
1877
+ </button>
1878
+ <button kendoButton
1879
+ tabindex="0"
1880
+ aria-disabled="false"
1881
+ [size]="size"
1882
+ themeColor="primary"
1883
+ (click)="onApply.emit()"
1884
+ (keydown.enter)="$event.stopImmediatePropagation()">
1885
+ {{messageFor('applyButton')}}
1886
+ </button>
1887
+ </div>
1888
+ </ng-template>
1889
+ </kendo-actionsheet>
1890
+ `,
1891
+ }]
1892
+ }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; }, propDecorators: { title: [{
1893
+ type: Input
1894
+ }], showActionButtons: [{
1895
+ type: Input
1896
+ }], subtitle: [{
1897
+ type: Input
1898
+ }], size: [{
1899
+ type: Input
1900
+ }], showTextInput: [{
1901
+ type: Input
1902
+ }], sharedPopupActionSheetTemplate: [{
1903
+ type: Input
1904
+ }], isActionSheetExpanded: [{
1905
+ type: Input
1906
+ }], text: [{
1907
+ type: Input
1908
+ }], placeholder: [{
1909
+ type: Input
1910
+ }], closePopup: [{
1911
+ type: Output
1912
+ }], textInputChange: [{
1913
+ type: Output
1914
+ }], navigate: [{
1915
+ type: Output
1916
+ }], onExpand: [{
1917
+ type: Output
1918
+ }], onCollapse: [{
1919
+ type: Output
1920
+ }], onApply: [{
1921
+ type: Output
1922
+ }], onCancel: [{
1923
+ type: Output
1924
+ }], actionSheet: [{
1925
+ type: ViewChild,
1926
+ args: [ActionSheetComponent]
1927
+ }], actionSheetSearchBar: [{
1928
+ type: ViewChild,
1929
+ args: ['actionSheetSearchBar']
1930
+ }] } });
1931
+
1633
1932
  /**
1634
1933
  * @hidden
1635
1934
  */
@@ -1681,8 +1980,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
1681
1980
  class SelectableDirective {
1682
1981
  constructor(selectionService) {
1683
1982
  this.checkboxes = { enabled: false };
1684
- // @HostBinding('attr.offset-index')
1685
- // @Input() public offsetIndex: number;
1686
1983
  this.multipleSelection = false;
1687
1984
  this.selectionService = selectionService;
1688
1985
  }
@@ -1712,7 +2009,7 @@ class SelectableDirective {
1712
2009
  }
1713
2010
  }
1714
2011
  SelectableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SelectableDirective, deps: [{ token: SelectionService }], target: i0.ɵɵFactoryTarget.Directive });
1715
- SelectableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: SelectableDirective, selector: "[kendoDropDownsSelectable]", inputs: { index: "index", checkboxes: "checkboxes", height: "height", multipleSelection: "multipleSelection" }, host: { listeners: { "click": "onClick($event)" }, properties: { "attr.index": "this.index", "style.height.px": "this.height", "style.minHeight.px": "this.height", "class.k-focus": "this.focusedClassName", "class.k-selected": "this.selectedClassName" } }, ngImport: i0 });
2012
+ SelectableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: SelectableDirective, selector: "[kendoDropDownsSelectable]", inputs: { index: "index", checkboxes: "checkboxes", height: "height", isMultiselect: "isMultiselect", multipleSelection: "multipleSelection" }, host: { listeners: { "click": "onClick($event)" }, properties: { "attr.index": "this.index", "style.height.px": "this.height", "style.minHeight.px": "this.height", "class.k-focus": "this.focusedClassName", "class.k-selected": "this.selectedClassName" } }, ngImport: i0 });
1716
2013
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SelectableDirective, decorators: [{
1717
2014
  type: Directive,
1718
2015
  args: [{
@@ -1733,6 +2030,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
1733
2030
  args: ['style.minHeight.px']
1734
2031
  }, {
1735
2032
  type: Input
2033
+ }], isMultiselect: [{
2034
+ type: Input
1736
2035
  }], multipleSelection: [{
1737
2036
  type: Input
1738
2037
  }], focusedClassName: [{
@@ -2099,13 +2398,16 @@ class ListComponent {
2099
2398
  this.renderer.addClass(this.wrapper.nativeElement, getSizeClass('list', this.size));
2100
2399
  }
2101
2400
  }
2401
+ if (this.type === 'dropdowngrid') {
2402
+ this.renderer.setStyle(this.wrapper.nativeElement, 'overflow-y', 'scroll');
2403
+ }
2102
2404
  if (isPresent(this.virtual)) {
2103
2405
  this.renderer.addClass(this.wrapper.nativeElement, this.listVirtualClass);
2104
2406
  }
2105
2407
  }
2106
2408
  }
2107
2409
  ListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ListComponent, deps: [{ token: DataService }, { token: i0.ElementRef }, { token: SelectionService }, { token: DisabledItemsService }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
2108
- ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: ListComponent, selector: "kendo-list", inputs: { selected: "selected", focused: "focused", textField: "textField", valueField: "valueField", height: "height", template: "template", groupTemplate: "groupTemplate", fixedGroupTemplate: "fixedGroupTemplate", show: "show", id: "id", optionPrefix: "optionPrefix", multipleSelection: "multipleSelection", virtual: "virtual", type: "type", checkboxes: "checkboxes", ariaLive: "ariaLive", isMultiselect: "isMultiselect", data: "data", size: "size", rounded: "rounded" }, outputs: { onClick: "onClick", pageChange: "pageChange", listResize: "listResize" }, viewQueries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true, static: true }, { propertyName: "list", first: true, predicate: ["list"], descendants: true, static: true }, { propertyName: "virtualContainer", first: true, predicate: ["virtualContainer"], descendants: true }, { propertyName: "items", predicate: ListItemDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
2410
+ ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: ListComponent, selector: "kendo-list", inputs: { selected: "selected", focused: "focused", textField: "textField", valueField: "valueField", height: "height", template: "template", groupTemplate: "groupTemplate", fixedGroupTemplate: "fixedGroupTemplate", show: "show", id: "id", optionPrefix: "optionPrefix", multipleSelection: "multipleSelection", virtual: "virtual", type: "type", checkboxes: "checkboxes", ariaLive: "ariaLive", isMultiselect: "isMultiselect", isActionSheetExpanded: "isActionSheetExpanded", data: "data", size: "size", rounded: "rounded" }, outputs: { onClick: "onClick", pageChange: "pageChange", listResize: "listResize" }, viewQueries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true, static: true }, { propertyName: "list", first: true, predicate: ["list"], descendants: true, static: true }, { propertyName: "virtualContainer", first: true, predicate: ["virtualContainer"], descendants: true }, { propertyName: "items", predicate: ListItemDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
2109
2411
  <div *ngIf="dataService.grouped"
2110
2412
  [class]="listGroupStickyHeaderClass"
2111
2413
  [ngStyle]="{
@@ -2172,6 +2474,7 @@ ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
2172
2474
  </ng-template>
2173
2475
  <ng-template *ngIf="dataService.grouped" ngFor let-dataItem let-itemIndex="index" [ngForOf]="data">
2174
2476
  <li
2477
+ #li
2175
2478
  *ngIf="dataItem.header && dataItem.index > 0"
2176
2479
  role="group"
2177
2480
  [class]="listGroupItemClass"
@@ -2194,6 +2497,7 @@ ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
2194
2497
  </span>
2195
2498
  </li>
2196
2499
  <li
2500
+ #li
2197
2501
  *ngIf="!dataItem.header"
2198
2502
  role="option"
2199
2503
  kendoDropDownsSelectable
@@ -2231,7 +2535,7 @@ ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
2231
2535
  </div>
2232
2536
  </div>
2233
2537
  </div>
2234
- `, isInline: true, components: [{ type: i10.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }], directives: [{ type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i12.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: ListItemDirective, selector: "\"li[role=option], li[role=group]\"" }, { type: SelectableDirective, selector: "[kendoDropDownsSelectable]", inputs: ["index", "checkboxes", "height", "multipleSelection"] }, { type: i12.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
2538
+ `, isInline: true, components: [{ type: i9.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }], directives: [{ type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i13.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: i13.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: ListItemDirective, selector: "\"li[role=option], li[role=group]\"" }, { type: SelectableDirective, selector: "[kendoDropDownsSelectable]", inputs: ["index", "checkboxes", "height", "isMultiselect", "multipleSelection"] }, { type: i13.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
2235
2539
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ListComponent, decorators: [{
2236
2540
  type: Component,
2237
2541
  args: [{
@@ -2303,6 +2607,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2303
2607
  </ng-template>
2304
2608
  <ng-template *ngIf="dataService.grouped" ngFor let-dataItem let-itemIndex="index" [ngForOf]="data">
2305
2609
  <li
2610
+ #li
2306
2611
  *ngIf="dataItem.header && dataItem.index > 0"
2307
2612
  role="group"
2308
2613
  [class]="listGroupItemClass"
@@ -2325,6 +2630,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2325
2630
  </span>
2326
2631
  </li>
2327
2632
  <li
2633
+ #li
2328
2634
  *ngIf="!dataItem.header"
2329
2635
  role="option"
2330
2636
  kendoDropDownsSelectable
@@ -2398,6 +2704,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2398
2704
  type: Input
2399
2705
  }], isMultiselect: [{
2400
2706
  type: Input
2707
+ }], isActionSheetExpanded: [{
2708
+ type: Input
2401
2709
  }], data: [{
2402
2710
  type: Input
2403
2711
  }], size: [{
@@ -2430,7 +2738,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2430
2738
  class Messages extends ComponentMessages {
2431
2739
  }
2432
2740
  Messages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: Messages, deps: null, target: i0.ɵɵFactoryTarget.Directive });
2433
- Messages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: Messages, inputs: { noDataText: "noDataText", clearTitle: "clearTitle", checkAllText: "checkAllText", selectButtonText: "selectButtonText", filterInputLabel: "filterInputLabel", popupLabel: "popupLabel" }, usesInheritance: true, ngImport: i0 });
2741
+ Messages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: Messages, inputs: { noDataText: "noDataText", clearTitle: "clearTitle", checkAllText: "checkAllText", selectButtonText: "selectButtonText", filterInputLabel: "filterInputLabel", popupLabel: "popupLabel", applyButton: "applyButton", cancelButton: "cancelButton" }, usesInheritance: true, ngImport: i0 });
2434
2742
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: Messages, decorators: [{
2435
2743
  type: Directive
2436
2744
  }], propDecorators: { noDataText: [{
@@ -2445,6 +2753,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2445
2753
  type: Input
2446
2754
  }], popupLabel: [{
2447
2755
  type: Input
2756
+ }], applyButton: [{
2757
+ type: Input
2758
+ }], cancelButton: [{
2759
+ type: Input
2448
2760
  }] } });
2449
2761
 
2450
2762
  /**
@@ -2529,6 +2841,10 @@ class AutoCompleteComponent {
2529
2841
  this.renderer = renderer;
2530
2842
  this.hostElement = hostElement;
2531
2843
  this.touchEnabled = touchEnabled;
2844
+ /**
2845
+ * @hidden
2846
+ */
2847
+ this.animationDuration = animationDuration;
2532
2848
  /**
2533
2849
  * @hidden
2534
2850
  */
@@ -2547,12 +2863,15 @@ class AutoCompleteComponent {
2547
2863
  */
2548
2864
  this.placeholder = "";
2549
2865
  /**
2550
- * Sets the height of the suggestions list. By default, `listHeight` is 200px.
2551
- *
2552
- * > The `listHeight` property affects only the list of suggestions and not the whole popup container.
2553
- * > To set the height of the popup container, use `popupSettings.height`.
2866
+ * Enables or disables the adaptive mode. By default the adaptive rendering is disabled.
2867
+ */
2868
+ this.adaptiveMode = 'none';
2869
+ /**
2870
+ * Sets the title of the ActionSheet that is rendered instead of the Popup when using small screen devices.
2871
+ * By default the ActionSheet title uses the text provided for the label of the AutoComplete.
2554
2872
  */
2555
- this.listHeight = 200;
2873
+ this.title = '';
2874
+ this._listHeight = 200;
2556
2875
  /**
2557
2876
  * @hidden
2558
2877
  *
@@ -2621,12 +2940,17 @@ class AutoCompleteComponent {
2621
2940
  this.widgetClasses = true;
2622
2941
  this.listBoxId = `k-${guid()}`;
2623
2942
  this.optionPrefix = `k-${guid()}`;
2943
+ /**
2944
+ * @hidden
2945
+ */
2946
+ this.windowSize = 'large';
2624
2947
  this.onChangeCallback = noop;
2625
2948
  this.onTouchedCallback = noop;
2626
2949
  this.popupMouseDownHandler = (event) => event.preventDefault();
2627
2950
  this._popupSettings = { animate: true };
2628
2951
  this._open = false;
2629
2952
  this._value = "";
2953
+ this.subs = new Subscription();
2630
2954
  this.valueChangeSubject = new Subject();
2631
2955
  this._isFocused = false;
2632
2956
  this._size = 'medium';
@@ -2640,6 +2964,20 @@ class AutoCompleteComponent {
2640
2964
  this.subscribeTouchEvents();
2641
2965
  this.selectionService.resetSelection([-1]);
2642
2966
  }
2967
+ /**
2968
+ * @hidden
2969
+ */
2970
+ get actionSheet() {
2971
+ var _a;
2972
+ return (_a = this.responsiveRendererComponent) === null || _a === void 0 ? void 0 : _a.actionSheet;
2973
+ }
2974
+ /**
2975
+ * @hidden
2976
+ */
2977
+ get actionSheetSearchBar() {
2978
+ var _a;
2979
+ return (_a = this.responsiveRendererComponent) === null || _a === void 0 ? void 0 : _a.actionSheetSearchBar;
2980
+ }
2643
2981
  get width() {
2644
2982
  let wrapperOffsetWidth = 0;
2645
2983
  if (isDocumentAvailable()) {
@@ -2688,8 +3026,8 @@ class AutoCompleteComponent {
2688
3026
  return this.isOpen ? this.listBoxId : undefined;
2689
3027
  }
2690
3028
  /**
2691
- * Toggles the visibility of the popup.
2692
- * If you use the `toggle` method to open or close the popup, the `open` and `close` events will not be fired.
3029
+ * Toggles the visibility of the popup or actionSheet.
3030
+ * If you use the `toggle` method to open or close the popup or actionSheet, the `open` and `close` events will not be fired.
2693
3031
  *
2694
3032
  * @param open - The state of the popup.
2695
3033
  */
@@ -2700,10 +3038,19 @@ class AutoCompleteComponent {
2700
3038
  });
2701
3039
  }
2702
3040
  /**
2703
- * Returns the current open state of the popup.
3041
+ * Returns the current open state. Returns `true` if the popup or actionSheet is open.
2704
3042
  */
2705
3043
  get isOpen() {
2706
- return this._open;
3044
+ return isTruthy(this._open || this.isActionSheetExpanded);
3045
+ }
3046
+ /**
3047
+ * @hidden
3048
+ */
3049
+ handleClick() {
3050
+ this.windowSize = windowSize();
3051
+ if (this.isAdaptive) {
3052
+ this.togglePopup(true);
3053
+ }
2707
3054
  }
2708
3055
  /**
2709
3056
  * @hidden
@@ -2766,6 +3113,22 @@ class AutoCompleteComponent {
2766
3113
  get value() {
2767
3114
  return this._value || NO_VALUE;
2768
3115
  }
3116
+ /**
3117
+ * Sets the subtitle of the ActionSheet that is rendered instead of the Popup when using small screen devices.
3118
+ * By default the ActionSheet subtitle uses the text provided for the `placeholder` of the AutoComplete.
3119
+ */
3120
+ set subtitle(_subtitle) {
3121
+ this._subtitle = _subtitle;
3122
+ }
3123
+ get subtitle() {
3124
+ return this._subtitle || this.placeholder;
3125
+ }
3126
+ /**
3127
+ * @hidden
3128
+ */
3129
+ get isAdaptiveModeEnabled() {
3130
+ return this.adaptiveMode === 'auto';
3131
+ }
2769
3132
  /**
2770
3133
  * Configures the popup of the AutoComplete.
2771
3134
  *
@@ -2782,6 +3145,24 @@ class AutoCompleteComponent {
2782
3145
  get popupSettings() {
2783
3146
  return this._popupSettings;
2784
3147
  }
3148
+ /**
3149
+ * Sets the height of the options list in the popup. By default, `listHeight` is 200px.
3150
+ *
3151
+ * > The `listHeight` property affects only the list of options and not the whole popup container.
3152
+ * > To set the height of the popup container, use `popupSettings.height`.
3153
+ *
3154
+ * > When using `adaptiveMode` and the screen size is `small` or `medium` the `listHeight` property is set to null.
3155
+ */
3156
+ set listHeight(_listHeight) {
3157
+ this._listHeight = _listHeight;
3158
+ }
3159
+ ;
3160
+ get listHeight() {
3161
+ if (this.isAdaptive) {
3162
+ return;
3163
+ }
3164
+ return this._listHeight;
3165
+ }
2785
3166
  /**
2786
3167
  * Defines a Boolean function that is executed for each data item in the component
2787
3168
  * ([see examples]({% slug disableditems_autocomplete %})).
@@ -2891,21 +3272,41 @@ class AutoCompleteComponent {
2891
3272
  get dir() {
2892
3273
  return this.direction;
2893
3274
  }
3275
+ /**
3276
+ * @hidden
3277
+ */
3278
+ get isActionSheetExpanded() {
3279
+ var _a;
3280
+ return (_a = this.actionSheet) === null || _a === void 0 ? void 0 : _a.expanded;
3281
+ }
3282
+ ;
3283
+ /**
3284
+ * @hidden
3285
+ */
3286
+ get isAdaptive() {
3287
+ return this.isAdaptiveModeEnabled && this.windowSize !== 'large';
3288
+ }
2894
3289
  ngOnInit() {
2895
3290
  this.renderer.removeAttribute(this.wrapper, "tabindex");
2896
- this.localizationChangeSubscription = this.localization
3291
+ this.subs.add(this.localization
2897
3292
  .changes
2898
3293
  .subscribe(({ rtl }) => {
2899
3294
  this.direction = rtl ? 'rtl' : 'ltr';
2900
3295
  this.cdr.detectChanges();
2901
- });
3296
+ }));
2902
3297
  this.setComponentClasses();
2903
3298
  }
3299
+ ngAfterViewInit() {
3300
+ var _a;
3301
+ this.windowSize = windowSize();
3302
+ this.cdr.detectChanges();
3303
+ this.renderer.setAttribute((_a = this.actionSheet) === null || _a === void 0 ? void 0 : _a.element.nativeElement, 'style', '--kendo-actionsheet-height: 60vh; --kendo-actionsheet-max-height: none');
3304
+ }
2904
3305
  ngOnDestroy() {
2905
3306
  this.destroyPopup();
2906
- this.unsubscribeEvents();
2907
- if (this.localizationChangeSubscription) {
2908
- this.localizationChangeSubscription.unsubscribe();
3307
+ this.subs.unsubscribe();
3308
+ if (this.touchstartDisposeHandler) {
3309
+ this.touchstartDisposeHandler();
2909
3310
  }
2910
3311
  }
2911
3312
  ngOnChanges(changes) {
@@ -2929,6 +3330,12 @@ class AutoCompleteComponent {
2929
3330
  messageFor(key) {
2930
3331
  return this.localization.get(key);
2931
3332
  }
3333
+ /**
3334
+ * @hidden
3335
+ */
3336
+ onAdaptiveTextBoxChange(text) {
3337
+ this.search(text);
3338
+ }
2932
3339
  /**
2933
3340
  * @hidden
2934
3341
  */
@@ -2998,7 +3405,14 @@ class AutoCompleteComponent {
2998
3405
  * @hidden
2999
3406
  */
3000
3407
  onResize() {
3001
- if (this._open) {
3408
+ if (this.isAdaptiveModeEnabled && this.windowSize !== windowSize()) {
3409
+ if (this.isOpen) {
3410
+ this.togglePopup(false);
3411
+ }
3412
+ this.windowSize = windowSize();
3413
+ this.cdr.detectChanges();
3414
+ }
3415
+ if (this._open && !this.isActionSheetExpanded) {
3002
3416
  const popupWrapper = this.popupRef.popupElement;
3003
3417
  const { min, max } = this.width;
3004
3418
  popupWrapper.style.minWidth = min;
@@ -3018,13 +3432,7 @@ class AutoCompleteComponent {
3018
3432
  }
3019
3433
  }
3020
3434
  search(text, startFrom = 0) {
3021
- let index;
3022
- if (text.length && this.dataService.itemsCount) {
3023
- index = this.dataService.findIndex(this.findIndexPredicate(text), startFrom);
3024
- }
3025
- else {
3026
- index = -1;
3027
- }
3435
+ const index = this.findIndex(text, startFrom);
3028
3436
  if (this.disabledItemsService.isIndexDisabled(index)) {
3029
3437
  if (index + 1 < this.dataService.itemsCount) {
3030
3438
  this.search(text, index + 1);
@@ -3072,6 +3480,10 @@ class AutoCompleteComponent {
3072
3480
  ((action === NavigationAction.Enter && this.isOpen) || action !== NavigationAction.Enter)) {
3073
3481
  event.preventDefault();
3074
3482
  }
3483
+ if (action === NavigationAction.Tab && this.isActionSheetExpanded) {
3484
+ event.stopImmediatePropagation();
3485
+ this.togglePopup(false);
3486
+ }
3075
3487
  }
3076
3488
  handleEnter(event) {
3077
3489
  const focused = this.selectionService.focused;
@@ -3092,6 +3504,9 @@ class AutoCompleteComponent {
3092
3504
  value = this.searchbar.value;
3093
3505
  }
3094
3506
  }
3507
+ if (this.isActionSheetExpanded && focused >= 0) {
3508
+ this.togglePopup(false);
3509
+ }
3095
3510
  this.change(value);
3096
3511
  }
3097
3512
  handleEscape() {
@@ -3122,6 +3537,17 @@ class AutoCompleteComponent {
3122
3537
  this.search(text);
3123
3538
  }
3124
3539
  }
3540
+ /**
3541
+ * @hidden
3542
+ */
3543
+ onFilterChange(text) {
3544
+ if (this.filterable) {
3545
+ this.filterChange.emit(text);
3546
+ }
3547
+ else if (this.highlightFirst) {
3548
+ this.search(text);
3549
+ }
3550
+ }
3125
3551
  /**
3126
3552
  * @hidden
3127
3553
  */
@@ -3137,37 +3563,39 @@ class AutoCompleteComponent {
3137
3563
  * @hidden
3138
3564
  */
3139
3565
  handleBlur() {
3140
- const focused = this.filterable ? this.selectionService.focused : -1;
3141
- this.searchbar.input.nativeElement.scrollLeft = 0; // Firefox doesn't auto-scroll to the left on blur like other browsers
3142
- let dataItem;
3143
- let text;
3144
- if (focused !== -1) {
3145
- dataItem = this.dataService.itemAt(focused);
3146
- text = getter(dataItem, this.valueField) || "";
3147
- }
3148
- else {
3149
- text = this.searchbar.value;
3150
- }
3151
- const exactMatch = text === this.searchbar.value;
3152
- const insensitiveMatch = text.toLowerCase() === this.searchbar.value.toLowerCase();
3153
- if (!exactMatch && insensitiveMatch) {
3154
- this.selectionService.resetSelection([]);
3155
- }
3156
- this.isFocused = false;
3157
- const valueHasChanged = this.value !== this.text;
3158
- const runInZone = hasObservers(this.onBlur) || hasObservers(this.close) || isUntouched(this.wrapper) || valueHasChanged;
3159
- if (runInZone) {
3160
- this._zone.run(() => {
3161
- if (valueHasChanged) {
3162
- this.change(this.searchbar.value);
3163
- }
3164
- this.onBlur.emit();
3165
- this.onTouchedCallback();
3566
+ if (!this.isActionSheetExpanded) {
3567
+ const focused = this.filterable ? this.selectionService.focused : -1;
3568
+ this.searchbar.input.nativeElement.scrollLeft = 0; // Firefox doesn't auto-scroll to the left on blur like other browsers
3569
+ let dataItem;
3570
+ let text;
3571
+ if (focused !== -1) {
3572
+ dataItem = this.dataService.itemAt(focused);
3573
+ text = getter(dataItem, this.valueField) || "";
3574
+ }
3575
+ else {
3576
+ text = this.searchbar.value;
3577
+ }
3578
+ const exactMatch = text === this.searchbar.value;
3579
+ const insensitiveMatch = text.toLowerCase() === this.searchbar.value.toLowerCase();
3580
+ if (!exactMatch && insensitiveMatch) {
3581
+ this.selectionService.resetSelection([]);
3582
+ }
3583
+ this.isFocused = false;
3584
+ const valueHasChanged = this.value !== this.text;
3585
+ const runInZone = hasObservers(this.onBlur) || hasObservers(this.close) || isUntouched(this.wrapper) || valueHasChanged;
3586
+ if (runInZone) {
3587
+ this._zone.run(() => {
3588
+ if (valueHasChanged) {
3589
+ this.change(this.searchbar.value);
3590
+ }
3591
+ this.onBlur.emit();
3592
+ this.onTouchedCallback();
3593
+ this.togglePopup(false);
3594
+ });
3595
+ }
3596
+ else {
3166
3597
  this.togglePopup(false);
3167
- });
3168
- }
3169
- else {
3170
- this.togglePopup(false);
3598
+ }
3171
3599
  }
3172
3600
  }
3173
3601
  /**
@@ -3185,29 +3613,42 @@ class AutoCompleteComponent {
3185
3613
  if (!isDocumentAvailable()) {
3186
3614
  return;
3187
3615
  }
3188
- this.valueChangeSubscription = this.valueChangeSubject
3616
+ this.subs.add(this.valueChangeSubject
3189
3617
  .subscribe(value => {
3190
3618
  const hasChange = this.value !== value;
3619
+ const index = this.findIndex(value);
3620
+ this.selectionService.focused = index;
3191
3621
  this.value = value;
3192
3622
  this.text = value;
3193
3623
  // emit change after assigning `this.value` => allows the user to modify the component value on `valueChange`
3194
3624
  if (hasChange) {
3195
3625
  this.emitChange(value);
3196
3626
  }
3197
- });
3198
- this.changeSubscription = this.selectionService.onChange.subscribe(this.handleItemChange.bind(this));
3199
- this.focusSubscription = this.selectionService.onFocus.subscribe(this.handleItemFocus.bind(this));
3200
- this.navigationSubscription = merge(this.navigationService.up, this.navigationService.down).subscribe((event) => this.navigate(event.index));
3201
- this.closeSubscription = this.navigationService.close.subscribe(() => this.togglePopup(false));
3202
- this.openSubscription = this.navigationService.open.subscribe(() => this.togglePopup(true));
3203
- this.enterSubscription = this.navigationService.enter.subscribe(this.handleEnter.bind(this));
3204
- this.escSubscription = this.navigationService.esc.subscribe(this.handleEscape.bind(this));
3205
- this.scrollSubscription = merge(this.navigationService.pagedown, this.navigationService.pageup).subscribe((event) => {
3627
+ }));
3628
+ this.subs.add(this.selectionService.onChange.subscribe(this.handleItemChange.bind(this)));
3629
+ this.subs.add(this.selectionService.onFocus.subscribe(this.handleItemFocus.bind(this)));
3630
+ this.subs.add(merge(this.navigationService.up, this.navigationService.down).subscribe((event) => this.navigate(event.index)));
3631
+ this.subs.add(this.navigationService.close.subscribe(() => this.togglePopup(false)));
3632
+ this.subs.add(this.navigationService.open.subscribe(() => this.togglePopup(true)));
3633
+ this.subs.add(this.navigationService.enter.subscribe(this.handleEnter.bind(this)));
3634
+ this.subs.add(this.navigationService.esc.subscribe(this.handleEscape.bind(this)));
3635
+ this.subs.add(merge(this.navigationService.pagedown, this.navigationService.pageup).subscribe((event) => {
3206
3636
  if (this.isOpen) {
3207
3637
  event.originalEvent.preventDefault();
3208
3638
  this.optionsList.scrollWithOnePage(NavigationAction[event.originalEvent.code]);
3209
3639
  }
3210
- });
3640
+ }));
3641
+ }
3642
+ findIndex(value, startFrom = 0) {
3643
+ let index;
3644
+ if (value && value.length && this.dataService.itemsCount) {
3645
+ index = this.dataService.findIndex(this.findIndexPredicate(value), startFrom);
3646
+ }
3647
+ else {
3648
+ index = -1;
3649
+ }
3650
+ ;
3651
+ return index;
3211
3652
  }
3212
3653
  subscribeTouchEvents() {
3213
3654
  if (!isDocumentAvailable() || !this.touchEnabled) {
@@ -3222,23 +3663,6 @@ class AutoCompleteComponent {
3222
3663
  }
3223
3664
  }));
3224
3665
  }
3225
- unsubscribeEvents() {
3226
- if (!isDocumentAvailable()) {
3227
- return;
3228
- }
3229
- this.changeSubscription.unsubscribe();
3230
- this.navigationSubscription.unsubscribe();
3231
- this.closeSubscription.unsubscribe();
3232
- this.openSubscription.unsubscribe();
3233
- this.enterSubscription.unsubscribe();
3234
- this.escSubscription.unsubscribe();
3235
- this.scrollSubscription.unsubscribe();
3236
- this.valueChangeSubscription.unsubscribe();
3237
- this.focusSubscription.unsubscribe();
3238
- if (this.touchstartDisposeHandler) {
3239
- this.touchstartDisposeHandler();
3240
- }
3241
- }
3242
3666
  handleItemChange(event) {
3243
3667
  const index = event.indices.length ? event.indices[0] : undefined;
3244
3668
  this.selectionService.resetSelection([-1]);
@@ -3247,6 +3671,9 @@ class AutoCompleteComponent {
3247
3671
  }
3248
3672
  const text = getter(this.dataService.itemAt(index), this.valueField);
3249
3673
  this.change(text);
3674
+ if (this.isActionSheetExpanded) {
3675
+ this.togglePopup(false);
3676
+ }
3250
3677
  }
3251
3678
  handleItemFocus(_event) {
3252
3679
  const focused = this.selectionService.focused;
@@ -3259,13 +3686,18 @@ class AutoCompleteComponent {
3259
3686
  if (this.virtual) {
3260
3687
  this.virtual.skip = 0;
3261
3688
  }
3262
- const horizontalAlign = this.direction === 'rtl' ? 'right' : 'left';
3263
- const anchorPosition = { horizontal: horizontalAlign, vertical: 'bottom' };
3264
- const popupPosition = { horizontal: horizontalAlign, vertical: 'top' };
3265
- this.popupRef = this.popupService.open({
3266
- anchor: this.wrapper,
3267
- animate: this.popupSettings.animate,
3268
- appendTo: this.appendTo,
3689
+ this.windowSize = windowSize();
3690
+ if (this.isAdaptive) {
3691
+ this.openActionSheet();
3692
+ return;
3693
+ }
3694
+ const horizontalAlign = this.direction === "rtl" ? "right" : "left";
3695
+ const anchorPosition = { horizontal: horizontalAlign, vertical: "bottom" };
3696
+ const popupPosition = { horizontal: horizontalAlign, vertical: "top" };
3697
+ this.popupRef = this.popupService.open({
3698
+ anchor: this.wrapper,
3699
+ animate: this.popupSettings.animate,
3700
+ appendTo: this.appendTo,
3269
3701
  content: this.popupTemplate,
3270
3702
  popupClass: this.listContainerClasses,
3271
3703
  positionMode: 'absolute',
@@ -3283,20 +3715,17 @@ class AutoCompleteComponent {
3283
3715
  this.renderer.setAttribute(popupWrapper, 'role', 'region');
3284
3716
  this.renderer.setAttribute(popupWrapper, 'aria-label', this.messageFor('popupLabel'));
3285
3717
  }
3286
- const listBox = popupWrapper.querySelector('ul.k-list-ul');
3287
- const ariaLabel = this.searchbar.input.nativeElement.getAttribute('aria-labelledby');
3288
- if (ariaLabel) {
3289
- listBox.setAttribute('aria-labelledby', ariaLabel);
3290
- }
3291
- this.popupRef.popupOpen.subscribe(() => {
3718
+ this.subs.add(this.popupRef.popupOpen.subscribe(() => {
3292
3719
  this.cdr.detectChanges();
3720
+ setListBoxAriaLabelLebBy(this.optionsList, this.searchbar.input, this.renderer);
3293
3721
  this.optionsList.scrollToItem(this.selectionService.focused);
3722
+ this.selectionService.focus(this.selectionService.focused);
3294
3723
  this.opened.emit();
3295
- });
3296
- this.popupRef.popupClose.subscribe(() => {
3724
+ }));
3725
+ this.subs.add(this.popupRef.popupClose.subscribe(() => {
3297
3726
  this.closed.emit();
3298
- });
3299
- this.popupRef.popupAnchorViewportLeave.subscribe(() => this.togglePopup(false));
3727
+ }));
3728
+ this.subs.add(this.popupRef.popupAnchorViewportLeave.subscribe(() => this.togglePopup(false)));
3300
3729
  }
3301
3730
  destroyPopup() {
3302
3731
  if (this.popupRef) {
@@ -3309,6 +3738,9 @@ class AutoCompleteComponent {
3309
3738
  _toggle(open) {
3310
3739
  this._open = open;
3311
3740
  this.destroyPopup();
3741
+ if (this.isActionSheetExpanded) {
3742
+ this.closeActionSheet();
3743
+ }
3312
3744
  if (this._open) {
3313
3745
  this.createPopup();
3314
3746
  }
@@ -3359,9 +3791,28 @@ class AutoCompleteComponent {
3359
3791
  this.renderer.addClass(this.wrapper, getFillModeClass('input', this.fillMode));
3360
3792
  }
3361
3793
  }
3794
+ closeActionSheet() {
3795
+ this.actionSheet.toggle(false);
3796
+ this.actionSheetSearchBar.value = '';
3797
+ this.filterable && this.filterChange.emit('');
3798
+ this.searchbar.input.nativeElement.focus();
3799
+ this.closed.emit();
3800
+ }
3801
+ openActionSheet() {
3802
+ this.actionSheet.toggle(true);
3803
+ this.cdr.detectChanges();
3804
+ setListBoxAriaLabelLebBy(this.optionsList, this.searchbar.input, this.renderer);
3805
+ this.title = setActionSheetTitle(this.searchbar.input, this.title);
3806
+ updateActionSheetAdaptiveAppearance(this.actionSheet, this.windowSize, this.renderer);
3807
+ this.cdr.detectChanges();
3808
+ this.opened.emit();
3809
+ this.optionsList.scrollToItem(this.selectionService.focused);
3810
+ this.selectionService.focus(this.selectionService.focused);
3811
+ this.actionSheetSearchBar.focus();
3812
+ }
3362
3813
  }
3363
- AutoCompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AutoCompleteComponent, deps: [{ token: i1.LocalizationService }, { token: DataService }, { token: i2.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 });
3364
- AutoCompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: AutoCompleteComponent, selector: "kendo-autocomplete", inputs: { highlightFirst: "highlightFirst", focusableId: "focusableId", data: "data", value: "value", valueField: "valueField", placeholder: "placeholder", 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: [
3814
+ 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 });
3815
+ AutoCompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: AutoCompleteComponent, selector: "kendo-autocomplete", inputs: { highlightFirst: "highlightFirst", 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: [
3365
3816
  AUTOCOMPLETE_VALUE_ACCESSOR,
3366
3817
  DataService,
3367
3818
  SelectionService,
@@ -3380,7 +3831,7 @@ AutoCompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
3380
3831
  provide: KendoInput,
3381
3832
  useExisting: forwardRef(() => AutoCompleteComponent)
3382
3833
  }
3383
- ], queries: [{ propertyName: "template", first: true, predicate: ItemTemplateDirective, descendants: true }, { propertyName: "headerTemplate", first: true, predicate: HeaderTemplateDirective, descendants: true }, { propertyName: "footerTemplate", first: true, predicate: FooterTemplateDirective, descendants: true }, { propertyName: "noDataTemplate", first: true, predicate: NoDataTemplateDirective, descendants: true }, { propertyName: "groupTemplate", first: true, predicate: GroupTemplateDirective, descendants: true }, { propertyName: "fixedGroupTemplate", first: true, predicate: FixedGroupTemplateDirective, descendants: true }], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "popupTemplate", first: true, predicate: ["popupTemplate"], descendants: true, static: true }, { propertyName: "searchbar", first: true, predicate: SearchBarComponent, descendants: true, static: true }, { propertyName: "optionsList", first: true, predicate: ["optionsList"], descendants: true }], exportAs: ["kendoAutoComplete"], usesOnChanges: true, ngImport: i0, template: `
3834
+ ], queries: [{ propertyName: "template", first: true, predicate: ItemTemplateDirective, descendants: true }, { propertyName: "headerTemplate", first: true, predicate: HeaderTemplateDirective, descendants: true }, { propertyName: "footerTemplate", first: true, predicate: FooterTemplateDirective, descendants: true }, { propertyName: "noDataTemplate", first: true, predicate: NoDataTemplateDirective, descendants: true }, { propertyName: "groupTemplate", first: true, predicate: GroupTemplateDirective, descendants: true }, { propertyName: "fixedGroupTemplate", first: true, predicate: FixedGroupTemplateDirective, descendants: true }], viewQueries: [{ propertyName: "responsiveRendererComponent", first: true, predicate: ResponsiveRendererComponent, descendants: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "popupTemplate", first: true, predicate: ["popupTemplate"], descendants: true, static: true }, { propertyName: "searchbar", first: true, predicate: SearchBarComponent, descendants: true, static: true }, { propertyName: "optionsList", first: true, predicate: ["optionsList"], descendants: true }], exportAs: ["kendoAutoComplete"], usesOnChanges: true, ngImport: i0, template: `
3384
3835
  <ng-container kendoAutoCompleteLocalizedMessages
3385
3836
  i18n-noDataText="kendo.autocomplete.noDataText|The text displayed in the popup when there are no items"
3386
3837
  noDataText="NO DATA FOUND"
@@ -3395,7 +3846,6 @@ AutoCompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
3395
3846
  <kendo-searchbar #searchbar
3396
3847
  [role]="'combobox'"
3397
3848
  [ariaExpanded]="isOpen"
3398
- [ariaControls]="ariaControls"
3399
3849
  [isSuggestable]="suggest"
3400
3850
  [isFilterable]="filterable"
3401
3851
  [isLoading]="isLoading"
@@ -3405,13 +3855,14 @@ AutoCompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
3405
3855
  [userInput]="text"
3406
3856
  [suggestedText]="suggestion"
3407
3857
  [disabled]="disabled"
3408
- [readonly]="readonly"
3858
+ [readonly]="readonly || this.isAdaptive"
3409
3859
  [tabIndex]="tabIndex"
3410
3860
  [placeholder]="placeholder"
3411
3861
  (onNavigate)="handleNavigate($event)"
3412
3862
  (valueChange)="searchBarChange($event)"
3413
3863
  (onBlur)="handleBlur()"
3414
3864
  (onFocus)="handleFocus()"
3865
+ (click)="handleClick()"
3415
3866
  ></kendo-searchbar>
3416
3867
  <span
3417
3868
  *ngIf="!loading && !readonly && (clearButton && text?.length)"
@@ -3431,6 +3882,26 @@ AutoCompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
3431
3882
  </span>
3432
3883
  <span *ngIf="loading" class="k-icon k-i-loading k-input-loading-icon"></span>
3433
3884
  <ng-template #popupTemplate>
3885
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
3886
+ </ng-template>
3887
+ <ng-container #container></ng-container>
3888
+ <kendo-resize-sensor *ngIf="isOpen || isAdaptiveModeEnabled" (resize)="onResize()"></kendo-resize-sensor>
3889
+
3890
+ <!--adaptive rendering-->
3891
+ <responsive-renderer
3892
+ [sharedPopupActionSheetTemplate]="sharedPopupActionSheetTemplate"
3893
+ [isActionSheetExpanded]="isActionSheetExpanded"
3894
+ [title]="title"
3895
+ [showTextInput]="true"
3896
+ [subtitle]="subtitle"
3897
+ (closePopup)="togglePopup(false)"
3898
+ (textInputChange)="onFilterChange($event)"
3899
+ (navigate)="handleNavigate($event)"
3900
+ [placeholder]="placeholder"
3901
+ >
3902
+ </responsive-renderer>
3903
+
3904
+ <ng-template #sharedPopupActionSheetTemplate>
3434
3905
  <!--header template-->
3435
3906
  <ng-template *ngIf="headerTemplate"
3436
3907
  [templateContext]="{
@@ -3474,11 +3945,7 @@ AutoCompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
3474
3945
  }">
3475
3946
  </ng-template>
3476
3947
  </ng-template>
3477
- <ng-template [ngIf]="isOpen">
3478
- <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
3479
- </ng-template>
3480
- <ng-container #container></ng-container>
3481
- `, isInline: true, components: [{ type: SearchBarComponent, selector: "kendo-searchbar", inputs: ["id", "tagListId", "activeDescendant", "disabled", "readonly", "tabIndex", "role", "isLoading", "ariaControls", "ariaExpanded", "isSuggestable", "isFilterable", "userInput", "suggestedText", "placeholder"], outputs: ["valueChange", "onBlur", "onFocus", "onClick", "onNavigate"] }, { type: i8.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "ariaLive", "isMultiselect", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize"] }, { type: i10.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }], directives: [{ type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }] });
3948
+ `, isInline: true, components: [{ type: SearchBarComponent, selector: "kendo-searchbar", inputs: ["id", "tagListId", "activeDescendant", "disabled", "readonly", "tabIndex", "role", "isLoading", "ariaControls", "ariaExpanded", "isSuggestable", "isFilterable", "userInput", "suggestedText", "placeholder"], outputs: ["valueChange", "onBlur", "onFocus", "onClick", "onNavigate"] }, { type: i8.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: i9.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { type: ResponsiveRendererComponent, selector: "responsive-renderer", inputs: ["title", "showActionButtons", "subtitle", "size", "showTextInput", "sharedPopupActionSheetTemplate", "isActionSheetExpanded", "text", "placeholder"], outputs: ["closePopup", "textInputChange", "navigate", "onExpand", "onCollapse", "onApply", "onCancel"] }, { type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "ariaLive", "isMultiselect", "isActionSheetExpanded", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize"] }], directives: [{ type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i13.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }] });
3482
3949
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AutoCompleteComponent, decorators: [{
3483
3950
  type: Component,
3484
3951
  args: [{
@@ -3519,7 +3986,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
3519
3986
  <kendo-searchbar #searchbar
3520
3987
  [role]="'combobox'"
3521
3988
  [ariaExpanded]="isOpen"
3522
- [ariaControls]="ariaControls"
3523
3989
  [isSuggestable]="suggest"
3524
3990
  [isFilterable]="filterable"
3525
3991
  [isLoading]="isLoading"
@@ -3529,13 +3995,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
3529
3995
  [userInput]="text"
3530
3996
  [suggestedText]="suggestion"
3531
3997
  [disabled]="disabled"
3532
- [readonly]="readonly"
3998
+ [readonly]="readonly || this.isAdaptive"
3533
3999
  [tabIndex]="tabIndex"
3534
4000
  [placeholder]="placeholder"
3535
4001
  (onNavigate)="handleNavigate($event)"
3536
4002
  (valueChange)="searchBarChange($event)"
3537
4003
  (onBlur)="handleBlur()"
3538
4004
  (onFocus)="handleFocus()"
4005
+ (click)="handleClick()"
3539
4006
  ></kendo-searchbar>
3540
4007
  <span
3541
4008
  *ngIf="!loading && !readonly && (clearButton && text?.length)"
@@ -3555,6 +4022,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
3555
4022
  </span>
3556
4023
  <span *ngIf="loading" class="k-icon k-i-loading k-input-loading-icon"></span>
3557
4024
  <ng-template #popupTemplate>
4025
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
4026
+ </ng-template>
4027
+ <ng-container #container></ng-container>
4028
+ <kendo-resize-sensor *ngIf="isOpen || isAdaptiveModeEnabled" (resize)="onResize()"></kendo-resize-sensor>
4029
+
4030
+ <!--adaptive rendering-->
4031
+ <responsive-renderer
4032
+ [sharedPopupActionSheetTemplate]="sharedPopupActionSheetTemplate"
4033
+ [isActionSheetExpanded]="isActionSheetExpanded"
4034
+ [title]="title"
4035
+ [showTextInput]="true"
4036
+ [subtitle]="subtitle"
4037
+ (closePopup)="togglePopup(false)"
4038
+ (textInputChange)="onFilterChange($event)"
4039
+ (navigate)="handleNavigate($event)"
4040
+ [placeholder]="placeholder"
4041
+ >
4042
+ </responsive-renderer>
4043
+
4044
+ <ng-template #sharedPopupActionSheetTemplate>
3558
4045
  <!--header template-->
3559
4046
  <ng-template *ngIf="headerTemplate"
3560
4047
  [templateContext]="{
@@ -3598,20 +4085,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
3598
4085
  }">
3599
4086
  </ng-template>
3600
4087
  </ng-template>
3601
- <ng-template [ngIf]="isOpen">
3602
- <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
3603
- </ng-template>
3604
- <ng-container #container></ng-container>
3605
4088
  `
3606
4089
  }]
3607
4090
  }], ctorParameters: function () {
3608
- return [{ type: i1.LocalizationService }, { type: DataService }, { type: i2.PopupService }, { type: SelectionService }, { type: NavigationService }, { type: DisabledItemsService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: undefined, decorators: [{
4091
+ return [{ type: i1.LocalizationService }, { type: DataService }, { type: i2$1.PopupService }, { type: SelectionService }, { type: NavigationService }, { type: DisabledItemsService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: undefined, decorators: [{
3609
4092
  type: Optional
3610
4093
  }, {
3611
4094
  type: Inject,
3612
4095
  args: [TOUCH_ENABLED]
3613
4096
  }] }];
3614
- }, propDecorators: { highlightFirst: [{
4097
+ }, propDecorators: { responsiveRendererComponent: [{
4098
+ type: ViewChild,
4099
+ args: [ResponsiveRendererComponent]
4100
+ }], highlightFirst: [{
3615
4101
  type: Input
3616
4102
  }], focusableId: [{
3617
4103
  type: Input
@@ -3623,6 +4109,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
3623
4109
  type: Input
3624
4110
  }], placeholder: [{
3625
4111
  type: Input
4112
+ }], adaptiveMode: [{
4113
+ type: Input
4114
+ }], title: [{
4115
+ type: Input
4116
+ }], subtitle: [{
4117
+ type: Input
3626
4118
  }], popupSettings: [{
3627
4119
  type: Input
3628
4120
  }], listHeight: [{
@@ -3818,6 +4310,10 @@ class ComboBoxComponent {
3818
4310
  this.cdr = cdr;
3819
4311
  this.renderer = renderer;
3820
4312
  this.touchEnabled = touchEnabled;
4313
+ /**
4314
+ * @hidden
4315
+ */
4316
+ this.animationDuration = animationDuration;
3821
4317
  /**
3822
4318
  * @hidden
3823
4319
  */
@@ -3887,12 +4383,15 @@ class ComboBoxComponent {
3887
4383
  */
3888
4384
  this.placeholder = "";
3889
4385
  /**
3890
- * Sets the height of the suggestions list. By default, `listHeight` is 200px.
3891
- *
3892
- * > The `listHeight` property affects only the list of suggestions and not the whole popup container.
3893
- * > To set the height of the popup container, use `popupSettings.height`.
4386
+ * Enables or disables the adaptive mode. By default the adaptive rendering is disabled.
4387
+ */
4388
+ this.adaptiveMode = 'none';
4389
+ /**
4390
+ * Sets the title of the ActionSheet that is rendered instead of the Popup when using small screen devices.
4391
+ * By default the ActionSheet title uses the text provided for the label of the AutoComplete.
3894
4392
  */
3895
- this.listHeight = 200;
4393
+ this.title = '';
4394
+ this._listHeight = 200;
3896
4395
  /**
3897
4396
  * Enables the auto-completion of the text based on the first data item.
3898
4397
  */
@@ -3967,6 +4466,10 @@ class ComboBoxComponent {
3967
4466
  this.onBlur = new EventEmitter();
3968
4467
  this.widgetClasses = true;
3969
4468
  this._isFocused = false;
4469
+ /**
4470
+ * @hidden
4471
+ */
4472
+ this.windowSize = 'large';
3970
4473
  this.listBoxId = `k-${guid()}`;
3971
4474
  this.optionPrefix = `k-${guid()}`;
3972
4475
  this.onChangeCallback = (_) => { };
@@ -3996,6 +4499,20 @@ class ComboBoxComponent {
3996
4499
  this.direction = localization.rtl ? 'rtl' : 'ltr';
3997
4500
  this.data = [];
3998
4501
  }
4502
+ /**
4503
+ * @hidden
4504
+ */
4505
+ get actionSheet() {
4506
+ var _a;
4507
+ return (_a = this.responsiveRendererComponent) === null || _a === void 0 ? void 0 : _a.actionSheet;
4508
+ }
4509
+ /**
4510
+ * @hidden
4511
+ */
4512
+ get actionSheetSearchBar() {
4513
+ var _a;
4514
+ return (_a = this.responsiveRendererComponent) === null || _a === void 0 ? void 0 : _a.actionSheetSearchBar;
4515
+ }
3999
4516
  set text(text) {
4000
4517
  this._text = isPresent(text) ? text.toString() : "";
4001
4518
  }
@@ -4097,6 +4614,22 @@ class ComboBoxComponent {
4097
4614
  }
4098
4615
  return this._valuePrimitive;
4099
4616
  }
4617
+ /**
4618
+ * Sets the subtitle of the ActionSheet that is rendered instead of the Popup when using small screen devices.
4619
+ * By default the ActionSheet subtitle uses the text provided for the `placeholder` of the AutoComplete.
4620
+ */
4621
+ set subtitle(_subtitle) {
4622
+ this._subtitle = _subtitle;
4623
+ }
4624
+ get subtitle() {
4625
+ return this._subtitle || this.placeholder;
4626
+ }
4627
+ /**
4628
+ * @hidden
4629
+ */
4630
+ get isAdaptiveModeEnabled() {
4631
+ return this.adaptiveMode === 'auto';
4632
+ }
4100
4633
  /**
4101
4634
  * Configures the popup of the ComboBox.
4102
4635
  *
@@ -4113,6 +4646,24 @@ class ComboBoxComponent {
4113
4646
  get popupSettings() {
4114
4647
  return this._popupSettings;
4115
4648
  }
4649
+ /**
4650
+ * Sets the height of the options list in the popup. By default, `listHeight` is 200px.
4651
+ *
4652
+ * > The `listHeight` property affects only the list of options and not the whole popup container.
4653
+ * > To set the height of the popup container, use `popupSettings.height`.
4654
+ *
4655
+ * > When using `adaptiveMode` and the screen size is `small` or `medium` the `listHeight` property is set to null.
4656
+ */
4657
+ set listHeight(_listHeight) {
4658
+ this._listHeight = _listHeight;
4659
+ }
4660
+ ;
4661
+ get listHeight() {
4662
+ if (this.isAdaptive) {
4663
+ return;
4664
+ }
4665
+ return this._listHeight;
4666
+ }
4116
4667
  /**
4117
4668
  * Defines a Boolean function that is executed for each data item in the component
4118
4669
  * ([see examples]({% slug disableditems_combobox %})). Determines whether the item will be disabled.
@@ -4229,6 +4780,20 @@ class ComboBoxComponent {
4229
4780
  return 'visible';
4230
4781
  }
4231
4782
  }
4783
+ /**
4784
+ * @hidden
4785
+ */
4786
+ get isActionSheetExpanded() {
4787
+ var _a;
4788
+ return (_a = this.actionSheet) === null || _a === void 0 ? void 0 : _a.expanded;
4789
+ }
4790
+ ;
4791
+ /**
4792
+ * @hidden
4793
+ */
4794
+ get isAdaptive() {
4795
+ return this.isAdaptiveModeEnabled && this.windowSize !== 'large';
4796
+ }
4232
4797
  get popupWidth() {
4233
4798
  let wrapperOffsetWidth = 0;
4234
4799
  if (isDocumentAvailable()) {
@@ -4251,6 +4816,12 @@ class ComboBoxComponent {
4251
4816
  this.attachSelectClickHandler();
4252
4817
  this.setComponentClasses();
4253
4818
  }
4819
+ ngAfterViewInit() {
4820
+ var _a;
4821
+ this.windowSize = windowSize();
4822
+ this.cdr.detectChanges();
4823
+ this.renderer.setAttribute((_a = this.actionSheet) === null || _a === void 0 ? void 0 : _a.element.nativeElement, 'style', '--kendo-actionsheet-height: 60vh; --kendo-actionsheet-max-height: none');
4824
+ }
4254
4825
  createValueStream() {
4255
4826
  const valueStream = this.valueSubject.pipe(filter((candidate) => {
4256
4827
  const current = getter(this.value, this.valueField);
@@ -4451,7 +5022,7 @@ class ComboBoxComponent {
4451
5022
  }
4452
5023
  }
4453
5024
  /**
4454
- * Toggles the visibility of the popup. If you use the `toggle` method to open or close the popup,
5025
+ * Toggles the visibility of the popup or actionSheet. If you use the `toggle` method to open or close the popup or actionSheet,
4455
5026
  * the `open` and `close` events will not be fired.
4456
5027
  *
4457
5028
  * @param open - The state of the popup.
@@ -4464,10 +5035,19 @@ class ComboBoxComponent {
4464
5035
  });
4465
5036
  }
4466
5037
  /**
4467
- * Returns the current open state of the popup.
5038
+ * Returns the current open state. Returns `true` if the popup or actionSheet is open.
4468
5039
  */
4469
5040
  get isOpen() {
4470
- return this._open;
5041
+ return isTruthy(this._open || this.isActionSheetExpanded);
5042
+ }
5043
+ /**
5044
+ * @hidden
5045
+ */
5046
+ handleClick() {
5047
+ this.windowSize = windowSize();
5048
+ if (this.isAdaptive) {
5049
+ this.togglePopup(true);
5050
+ }
4471
5051
  }
4472
5052
  /**
4473
5053
  * Resets the value of the ComboBox.
@@ -4550,7 +5130,14 @@ class ComboBoxComponent {
4550
5130
  * @hidden
4551
5131
  */
4552
5132
  onResize() {
4553
- if (this.isOpen) {
5133
+ if (this.isAdaptiveModeEnabled && this.windowSize !== windowSize()) {
5134
+ if (this.isOpen) {
5135
+ this.togglePopup(false);
5136
+ }
5137
+ this.windowSize = windowSize();
5138
+ this.cdr.detectChanges();
5139
+ }
5140
+ if (this.isOpen && !this.isActionSheetExpanded) {
4554
5141
  const popupWrapper = this.popupRef.popupElement;
4555
5142
  const { min, max } = this.popupWidth;
4556
5143
  popupWrapper.style.minWidth = min;
@@ -4656,13 +5243,7 @@ class ComboBoxComponent {
4656
5243
  return result;
4657
5244
  }
4658
5245
  search(text, startFrom = 0) {
4659
- let index;
4660
- if (text.length && this.dataService.itemsCount) {
4661
- index = this.dataService.findIndex(this.findIndexPredicate(text), startFrom);
4662
- }
4663
- else {
4664
- index = -1;
4665
- }
5246
+ const index = this.findIndex(text, startFrom);
4666
5247
  if (this.disabledItemsService.isIndexDisabled(index)) {
4667
5248
  if (index + 1 < this.dataService.itemsCount) {
4668
5249
  this.search(text, index + 1);
@@ -4678,6 +5259,18 @@ class ComboBoxComponent {
4678
5259
  }
4679
5260
  }
4680
5261
  }
5262
+ /**
5263
+ * @hidden
5264
+ */
5265
+ onAdaptiveTextBoxChange(text) {
5266
+ if (this.filterable && this.filterText !== text) {
5267
+ this.filterText = text;
5268
+ this.filterChange.emit(text);
5269
+ }
5270
+ else {
5271
+ this.search(text);
5272
+ }
5273
+ }
4681
5274
  /**
4682
5275
  * @hidden
4683
5276
  */
@@ -4735,6 +5328,10 @@ class ComboBoxComponent {
4735
5328
  ((action === NavigationAction.Enter && this.isOpen) || action !== NavigationAction.Enter)) {
4736
5329
  event.preventDefault();
4737
5330
  }
5331
+ if (action === NavigationAction.Tab && this.isActionSheetExpanded) {
5332
+ event.stopImmediatePropagation();
5333
+ this.togglePopup(false);
5334
+ }
4738
5335
  }
4739
5336
  handleEnter() {
4740
5337
  const text = this.text;
@@ -4766,32 +5363,34 @@ class ComboBoxComponent {
4766
5363
  * @hidden
4767
5364
  */
4768
5365
  handleBlur() {
4769
- this._filtering = false;
4770
- this.searchbar.input.nativeElement.scrollLeft = 0; // Firefox doesn't auto-scroll to the left on blur like other browsers
4771
- this.isFocused = false;
4772
- const unresolvedSelection = getter(this.dataItem, this.valueField) !== getter(this.value, this.valueField);
4773
- const currentText = this.searchbar.value;
4774
- const textHasChanged = currentText !== (getter(this.dataItem, this.textField) || '');
4775
- const valueHasChanged = unresolvedSelection || textHasChanged;
4776
- const runInZone = valueHasChanged || hasObservers(this.onBlur) || hasObservers(this.close) || isUntouched(this.wrapper.nativeElement);
4777
- if (runInZone) {
4778
- this.zone.run(() => {
4779
- if (valueHasChanged) {
4780
- const lowerCaseMatch = isPresent(this.focusedItemText) && this.focusedItemText.toLowerCase() === currentText.toLowerCase();
4781
- if (lowerCaseMatch || unresolvedSelection) {
4782
- this.selectionService.change(this.selectionService.focused);
4783
- }
4784
- else {
4785
- this.change(currentText, true);
5366
+ if (!this.isActionSheetExpanded) {
5367
+ this._filtering = false;
5368
+ this.searchbar.input.nativeElement.scrollLeft = 0; // Firefox doesn't auto-scroll to the left on blur like other browsers
5369
+ this.isFocused = false;
5370
+ const unresolvedSelection = getter(this.dataItem, this.valueField) !== getter(this.value, this.valueField);
5371
+ const currentText = this.searchbar.value;
5372
+ const textHasChanged = currentText !== (getter(this.dataItem, this.textField) || '');
5373
+ const valueHasChanged = unresolvedSelection || textHasChanged;
5374
+ const runInZone = valueHasChanged || hasObservers(this.onBlur) || hasObservers(this.close) || isUntouched(this.wrapper.nativeElement);
5375
+ if (runInZone) {
5376
+ this.zone.run(() => {
5377
+ if (valueHasChanged) {
5378
+ const lowerCaseMatch = isPresent(this.focusedItemText) && this.focusedItemText.toLowerCase() === currentText.toLowerCase();
5379
+ if (lowerCaseMatch || unresolvedSelection) {
5380
+ this.selectionService.change(this.selectionService.focused);
5381
+ }
5382
+ else {
5383
+ this.change(currentText, true);
5384
+ }
4786
5385
  }
4787
- }
4788
- this.onBlur.emit();
4789
- this.onTouchedCallback();
5386
+ this.onBlur.emit();
5387
+ this.onTouchedCallback();
5388
+ this.togglePopup(false);
5389
+ });
5390
+ }
5391
+ else {
4790
5392
  this.togglePopup(false);
4791
- });
4792
- }
4793
- else {
4794
- this.togglePopup(false);
5393
+ }
4795
5394
  }
4796
5395
  }
4797
5396
  /**
@@ -4854,6 +5453,9 @@ class ComboBoxComponent {
4854
5453
  }
4855
5454
  else {
4856
5455
  this.valueSubject.next(candidate);
5456
+ if (this.isActionSheetExpanded) {
5457
+ this.togglePopup(false);
5458
+ }
4857
5459
  }
4858
5460
  }
4859
5461
  emitValueChange() {
@@ -4927,6 +5529,11 @@ class ComboBoxComponent {
4927
5529
  if (this.virtual) {
4928
5530
  this.virtual.skip = 0;
4929
5531
  }
5532
+ this.windowSize = windowSize();
5533
+ if (this.isAdaptive) {
5534
+ this.openActionSheet();
5535
+ return;
5536
+ }
4930
5537
  const horizontalAlign = this.direction === "rtl" ? "right" : "left";
4931
5538
  const anchorPosition = { horizontal: horizontalAlign, vertical: "bottom" };
4932
5539
  const popupPosition = { horizontal: horizontalAlign, vertical: "top" };
@@ -4958,7 +5565,9 @@ class ComboBoxComponent {
4958
5565
  }
4959
5566
  this.popupRef.popupOpen.subscribe(() => {
4960
5567
  this.cdr.detectChanges();
5568
+ setListBoxAriaLabelLebBy(this.optionsList, this.searchbar.input, this.renderer);
4961
5569
  this.optionsList.scrollToItem(this.selectionService.focused);
5570
+ this.selectionService.focus(this.selectionService.focused);
4962
5571
  this.opened.emit();
4963
5572
  });
4964
5573
  this.popupRef.popupClose.subscribe(() => {
@@ -4969,7 +5578,11 @@ class ComboBoxComponent {
4969
5578
  _toggle(open) {
4970
5579
  this._open = open;
4971
5580
  this.destroyPopup();
5581
+ if (this.isActionSheetExpanded) {
5582
+ this.closeActionSheet();
5583
+ }
4972
5584
  if (this._open) {
5585
+ this.windowSize = windowSize();
4973
5586
  this.createPopup();
4974
5587
  }
4975
5588
  }
@@ -5025,9 +5638,40 @@ class ComboBoxComponent {
5025
5638
  this.renderer.addClass(this.wrapper.nativeElement, getFillModeClass('input', this.fillMode));
5026
5639
  }
5027
5640
  }
5641
+ findIndex(value, startFrom = 0) {
5642
+ let index;
5643
+ if (value && value.length && this.dataService.itemsCount) {
5644
+ index = this.dataService.findIndex(this.findIndexPredicate(value), startFrom);
5645
+ }
5646
+ else {
5647
+ index = -1;
5648
+ }
5649
+ ;
5650
+ return index;
5651
+ }
5652
+ closeActionSheet() {
5653
+ this.actionSheet.toggle(false);
5654
+ this.actionSheetSearchBar.value = '';
5655
+ this.filterable && this.filterChange.emit('');
5656
+ this.searchbar.input.nativeElement.focus();
5657
+ this.closed.emit();
5658
+ }
5659
+ openActionSheet() {
5660
+ this.windowSize = windowSize();
5661
+ this.actionSheet.toggle(true);
5662
+ this.cdr.detectChanges();
5663
+ setListBoxAriaLabelLebBy(this.optionsList, this.searchbar.input, this.renderer);
5664
+ this.title = setActionSheetTitle(this.searchbar.input, this.title);
5665
+ updateActionSheetAdaptiveAppearance(this.actionSheet, this.windowSize, this.renderer);
5666
+ this.cdr.detectChanges();
5667
+ this.opened.emit();
5668
+ this.optionsList.scrollToItem(this.selectionService.focused);
5669
+ this.selectionService.focus(this.selectionService.focused);
5670
+ this.actionSheetSearchBar.focus();
5671
+ }
5028
5672
  }
5029
- 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: 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 });
5030
- ComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: ComboBoxComponent, selector: "kendo-combobox", inputs: { focusableId: "focusableId", allowCustom: "allowCustom", data: "data", value: "value", textField: "textField", valueField: "valueField", valuePrimitive: "valuePrimitive", valueNormalizer: "valueNormalizer", placeholder: "placeholder", popupSettings: "popupSettings", listHeight: "listHeight", iconClass: "iconClass", 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: [
5673
+ 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 });
5674
+ ComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: ComboBoxComponent, selector: "kendo-combobox", inputs: { 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", iconClass: "iconClass", 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: [
5031
5675
  COMBOBOX_VALUE_ACCESSOR,
5032
5676
  DataService,
5033
5677
  SelectionService,
@@ -5044,7 +5688,7 @@ ComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
5044
5688
  {
5045
5689
  provide: KendoInput, useExisting: forwardRef(() => ComboBoxComponent)
5046
5690
  }
5047
- ], queries: [{ propertyName: "template", first: true, predicate: ItemTemplateDirective, descendants: true }, { propertyName: "headerTemplate", first: true, predicate: HeaderTemplateDirective, descendants: true }, { propertyName: "footerTemplate", first: true, predicate: FooterTemplateDirective, descendants: true }, { propertyName: "noDataTemplate", first: true, predicate: NoDataTemplateDirective, descendants: true }, { propertyName: "groupTemplate", first: true, predicate: GroupTemplateDirective, descendants: true }, { propertyName: "fixedGroupTemplate", first: true, predicate: FixedGroupTemplateDirective, descendants: true }], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "popupTemplate", first: true, predicate: ["popupTemplate"], descendants: true, static: true }, { propertyName: "searchbar", first: true, predicate: SearchBarComponent, descendants: true, static: true }, { propertyName: "optionsList", first: true, predicate: ["optionsList"], descendants: true }, { propertyName: "select", first: true, predicate: ["select"], descendants: true, static: true }], exportAs: ["kendoComboBox"], usesOnChanges: true, ngImport: i0, template: `
5691
+ ], queries: [{ propertyName: "template", first: true, predicate: ItemTemplateDirective, descendants: true }, { propertyName: "headerTemplate", first: true, predicate: HeaderTemplateDirective, descendants: true }, { propertyName: "footerTemplate", first: true, predicate: FooterTemplateDirective, descendants: true }, { propertyName: "noDataTemplate", first: true, predicate: NoDataTemplateDirective, descendants: true }, { propertyName: "groupTemplate", first: true, predicate: GroupTemplateDirective, descendants: true }, { propertyName: "fixedGroupTemplate", first: true, predicate: FixedGroupTemplateDirective, descendants: true }], viewQueries: [{ propertyName: "responsiveRendererComponent", first: true, predicate: ResponsiveRendererComponent, descendants: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "popupTemplate", first: true, predicate: ["popupTemplate"], descendants: true, static: true }, { propertyName: "searchbar", first: true, predicate: SearchBarComponent, descendants: true, static: true }, { propertyName: "optionsList", first: true, predicate: ["optionsList"], descendants: true }, { propertyName: "select", first: true, predicate: ["select"], descendants: true, static: true }], exportAs: ["kendoComboBox"], usesOnChanges: true, ngImport: i0, template: `
5048
5692
  <ng-container kendoComboBoxLocalizedMessages
5049
5693
  i18n-noDataText="kendo.combobox.noDataText|The text displayed in the popup when there are no items"
5050
5694
  noDataText="NO DATA FOUND"
@@ -5071,13 +5715,14 @@ ComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
5071
5715
  [userInput]="text"
5072
5716
  [suggestedText]="getSuggestion()"
5073
5717
  [disabled]="disabled"
5074
- [readonly]="readonly"
5718
+ [readonly]="readonly || isAdaptive"
5075
5719
  [tabIndex]="tabIndex"
5076
5720
  [placeholder]="placeholder"
5077
5721
  (onNavigate)="handleNavigate($event)"
5078
5722
  (valueChange)="searchBarChange($event)"
5079
5723
  (onBlur)="handleBlur()"
5080
5724
  (onFocus)="handleFocus()"
5725
+ (click)="handleClick()"
5081
5726
  ></kendo-searchbar>
5082
5727
  <span
5083
5728
  *ngIf="clearButton && !loading && !disabled && !readonly && text?.length"
@@ -5117,6 +5762,25 @@ ComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
5117
5762
  <span *ngIf="loading || iconClass" class="k-button-icon k-icon" [ngClass]="buttonClasses"></span>
5118
5763
  </button>
5119
5764
  <ng-template #popupTemplate>
5765
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
5766
+ </ng-template>
5767
+ <kendo-resize-sensor *ngIf="isOpen || isAdaptiveModeEnabled" (resize)="onResize()"></kendo-resize-sensor>
5768
+ <ng-container #container></ng-container>
5769
+
5770
+ <!--adaptive rendering-->
5771
+ <responsive-renderer
5772
+ [sharedPopupActionSheetTemplate]="sharedPopupActionSheetTemplate"
5773
+ [isActionSheetExpanded]="isActionSheetExpanded"
5774
+ [title]="title"
5775
+ [showTextInput]="true"
5776
+ [subtitle]="subtitle"
5777
+ (closePopup)="togglePopup(false)"
5778
+ (textInputChange)="onAdaptiveTextBoxChange($event)"
5779
+ (navigate)="handleNavigate($event)"
5780
+ [placeholder]="placeholder"
5781
+ >
5782
+ </responsive-renderer>
5783
+ <ng-template #sharedPopupActionSheetTemplate>
5120
5784
  <!--header template-->
5121
5785
  <ng-template *ngIf="headerTemplate"
5122
5786
  [templateContext]="{
@@ -5160,11 +5824,7 @@ ComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
5160
5824
  }">
5161
5825
  </ng-template>
5162
5826
  </ng-template>
5163
- <ng-template [ngIf]="isOpen">
5164
- <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
5165
- </ng-template>
5166
- <ng-container #container></ng-container>
5167
- `, isInline: true, components: [{ type: SearchBarComponent, selector: "kendo-searchbar", inputs: ["id", "tagListId", "activeDescendant", "disabled", "readonly", "tabIndex", "role", "isLoading", "ariaControls", "ariaExpanded", "isSuggestable", "isFilterable", "userInput", "suggestedText", "placeholder"], outputs: ["valueChange", "onBlur", "onFocus", "onClick", "onNavigate"] }, { type: i8.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "ariaLive", "isMultiselect", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize"] }, { type: i10.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }], directives: [{ type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: i12.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }] });
5827
+ `, isInline: true, components: [{ type: SearchBarComponent, selector: "kendo-searchbar", inputs: ["id", "tagListId", "activeDescendant", "disabled", "readonly", "tabIndex", "role", "isLoading", "ariaControls", "ariaExpanded", "isSuggestable", "isFilterable", "userInput", "suggestedText", "placeholder"], outputs: ["valueChange", "onBlur", "onFocus", "onClick", "onNavigate"] }, { type: i8.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: i9.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { type: ResponsiveRendererComponent, selector: "responsive-renderer", inputs: ["title", "showActionButtons", "subtitle", "size", "showTextInput", "sharedPopupActionSheetTemplate", "isActionSheetExpanded", "text", "placeholder"], outputs: ["closePopup", "textInputChange", "navigate", "onExpand", "onCollapse", "onApply", "onCancel"] }, { type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "ariaLive", "isMultiselect", "isActionSheetExpanded", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize"] }], directives: [{ type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: i13.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i13.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }] });
5168
5828
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ComboBoxComponent, decorators: [{
5169
5829
  type: Component,
5170
5830
  args: [{
@@ -5215,13 +5875,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
5215
5875
  [userInput]="text"
5216
5876
  [suggestedText]="getSuggestion()"
5217
5877
  [disabled]="disabled"
5218
- [readonly]="readonly"
5878
+ [readonly]="readonly || isAdaptive"
5219
5879
  [tabIndex]="tabIndex"
5220
5880
  [placeholder]="placeholder"
5221
5881
  (onNavigate)="handleNavigate($event)"
5222
5882
  (valueChange)="searchBarChange($event)"
5223
5883
  (onBlur)="handleBlur()"
5224
5884
  (onFocus)="handleFocus()"
5885
+ (click)="handleClick()"
5225
5886
  ></kendo-searchbar>
5226
5887
  <span
5227
5888
  *ngIf="clearButton && !loading && !disabled && !readonly && text?.length"
@@ -5261,6 +5922,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
5261
5922
  <span *ngIf="loading || iconClass" class="k-button-icon k-icon" [ngClass]="buttonClasses"></span>
5262
5923
  </button>
5263
5924
  <ng-template #popupTemplate>
5925
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
5926
+ </ng-template>
5927
+ <kendo-resize-sensor *ngIf="isOpen || isAdaptiveModeEnabled" (resize)="onResize()"></kendo-resize-sensor>
5928
+ <ng-container #container></ng-container>
5929
+
5930
+ <!--adaptive rendering-->
5931
+ <responsive-renderer
5932
+ [sharedPopupActionSheetTemplate]="sharedPopupActionSheetTemplate"
5933
+ [isActionSheetExpanded]="isActionSheetExpanded"
5934
+ [title]="title"
5935
+ [showTextInput]="true"
5936
+ [subtitle]="subtitle"
5937
+ (closePopup)="togglePopup(false)"
5938
+ (textInputChange)="onAdaptiveTextBoxChange($event)"
5939
+ (navigate)="handleNavigate($event)"
5940
+ [placeholder]="placeholder"
5941
+ >
5942
+ </responsive-renderer>
5943
+ <ng-template #sharedPopupActionSheetTemplate>
5264
5944
  <!--header template-->
5265
5945
  <ng-template *ngIf="headerTemplate"
5266
5946
  [templateContext]="{
@@ -5304,20 +5984,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
5304
5984
  }">
5305
5985
  </ng-template>
5306
5986
  </ng-template>
5307
- <ng-template [ngIf]="isOpen">
5308
- <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
5309
- </ng-template>
5310
- <ng-container #container></ng-container>
5311
5987
  `
5312
5988
  }]
5313
5989
  }], ctorParameters: function () {
5314
- return [{ type: i0.ElementRef }, { type: i1.LocalizationService }, { type: i2.PopupService }, { type: SelectionService }, { type: NavigationService }, { type: DisabledItemsService }, { type: DataService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
5990
+ return [{ type: i0.ElementRef }, { 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: undefined, decorators: [{
5315
5991
  type: Optional
5316
5992
  }, {
5317
5993
  type: Inject,
5318
5994
  args: [TOUCH_ENABLED]
5319
5995
  }] }];
5320
- }, propDecorators: { focusableId: [{
5996
+ }, propDecorators: { responsiveRendererComponent: [{
5997
+ type: ViewChild,
5998
+ args: [ResponsiveRendererComponent]
5999
+ }], focusableId: [{
5321
6000
  type: Input
5322
6001
  }], allowCustom: [{
5323
6002
  type: Input
@@ -5335,6 +6014,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
5335
6014
  type: Input
5336
6015
  }], placeholder: [{
5337
6016
  type: Input
6017
+ }], adaptiveMode: [{
6018
+ type: Input
6019
+ }], title: [{
6020
+ type: Input
6021
+ }], subtitle: [{
6022
+ type: Input
5338
6023
  }], popupSettings: [{
5339
6024
  type: Input
5340
6025
  }], listHeight: [{
@@ -5552,6 +6237,14 @@ class DropDownListComponent {
5552
6237
  this.cdr = cdr;
5553
6238
  this.touchEnabled = touchEnabled;
5554
6239
  this.injector = injector;
6240
+ /**
6241
+ * @hidden
6242
+ */
6243
+ this.animationDuration = animationDuration;
6244
+ /**
6245
+ * @hidden
6246
+ */
6247
+ this.xIcon = xIcon;
5555
6248
  /**
5556
6249
  * @hidden
5557
6250
  */
@@ -5562,12 +6255,24 @@ class DropDownListComponent {
5562
6255
  this.caretAltDownIcon = caretAltDownIcon;
5563
6256
  this.listBoxId = `k-${guid()}`;
5564
6257
  /**
5565
- * Sets the height of the options list. By default, `listHeight` is 200px.
5566
- *
5567
- * > The `listHeight` property affects only the list of options and not the whole popup container.
5568
- * > To set the height of the popup container, use `popupSettings.height`.
6258
+ * Enables or disables the adaptive mode. By default the adaptive rendering is disabled.
6259
+ */
6260
+ this.adaptiveMode = 'none';
6261
+ /**
6262
+ * Sets the title of the ActionSheet that is rendered instead of the Popup when using small screen devices.
6263
+ * By default the ActionSheet title uses the text provided for the label of the AutoComplete.
5569
6264
  */
5570
- this.listHeight = 200;
6265
+ this.title = '';
6266
+ /**
6267
+ * Sets the subtitle of the ActionSheet that is rendered instead of the Popup when using small screen devices.
6268
+ * By default the ActionSheet subtitle uses the text provided for the `placeholder` of the AutoComplete.
6269
+ */
6270
+ this.subtitle = '';
6271
+ /**
6272
+ * @hidden
6273
+ */
6274
+ this.windowSize = 'large';
6275
+ this._listHeight = 200;
5571
6276
  /**
5572
6277
  * Sets the read-only state of the component.
5573
6278
  */
@@ -5667,6 +6372,20 @@ class DropDownListComponent {
5667
6372
  this.subscribeFocusEvents();
5668
6373
  this.popupMouseDownHandler = this.onMouseDown.bind(this);
5669
6374
  }
6375
+ /**
6376
+ * @hidden
6377
+ */
6378
+ get actionSheet() {
6379
+ var _a;
6380
+ return (_a = this.responsiveRendererComponent) === null || _a === void 0 ? void 0 : _a.actionSheet;
6381
+ }
6382
+ /**
6383
+ * @hidden
6384
+ */
6385
+ get actionSheetSearchBar() {
6386
+ var _a;
6387
+ return (_a = this.responsiveRendererComponent) === null || _a === void 0 ? void 0 : _a.actionSheetSearchBar;
6388
+ }
5670
6389
  get width() {
5671
6390
  const wrapperWidth = isDocumentAvailable() ? this.wrapper.nativeElement.offsetWidth : 0;
5672
6391
  const width = this.popupSettings.width || wrapperWidth;
@@ -5708,6 +6427,14 @@ class DropDownListComponent {
5708
6427
  }
5709
6428
  return appendTo === 'component' ? this.container : appendTo;
5710
6429
  }
6430
+ /**
6431
+ * @hidden
6432
+ */
6433
+ onFilterChange(text) {
6434
+ if (this.filterable) {
6435
+ this.filterChange.emit(text);
6436
+ }
6437
+ }
5711
6438
  /**
5712
6439
  * @hidden
5713
6440
  */
@@ -5755,6 +6482,26 @@ class DropDownListComponent {
5755
6482
  get value() {
5756
6483
  return this._value;
5757
6484
  }
6485
+ /**
6486
+ * @hidden
6487
+ */
6488
+ get isAdaptiveModeEnabled() {
6489
+ return this.adaptiveMode === 'auto';
6490
+ }
6491
+ /**
6492
+ * @hidden
6493
+ */
6494
+ get isActionSheetExpanded() {
6495
+ var _a;
6496
+ return (_a = this.actionSheet) === null || _a === void 0 ? void 0 : _a.expanded;
6497
+ }
6498
+ ;
6499
+ /**
6500
+ * @hidden
6501
+ */
6502
+ get isAdaptive() {
6503
+ return this.isAdaptiveModeEnabled && this.windowSize !== 'large';
6504
+ }
5758
6505
  /**
5759
6506
  * Configures the popup of the DropDownList.
5760
6507
  *
@@ -5771,6 +6518,24 @@ class DropDownListComponent {
5771
6518
  get popupSettings() {
5772
6519
  return this._popupSettings;
5773
6520
  }
6521
+ /**
6522
+ * Sets the height of the options list in the popup. By default, `listHeight` is 200px.
6523
+ *
6524
+ * > The `listHeight` property affects only the list of options and not the whole popup container.
6525
+ * > To set the height of the popup container, use `popupSettings.height`.
6526
+ *
6527
+ * > When using `adaptiveMode` and the screen size is `small` or `medium` the `listHeight` property is set to null.
6528
+ */
6529
+ set listHeight(_listHeight) {
6530
+ this._listHeight = _listHeight;
6531
+ }
6532
+ ;
6533
+ get listHeight() {
6534
+ if (this.isAdaptive) {
6535
+ return;
6536
+ }
6537
+ return this._listHeight;
6538
+ }
5774
6539
  /**
5775
6540
  * Defines a Boolean function that is executed for each data item in the component
5776
6541
  * ([see examples]({% slug disableditems_ddl %})). Determines whether the item will be disabled.
@@ -5915,7 +6680,13 @@ class DropDownListComponent {
5915
6680
  * @hidden
5916
6681
  */
5917
6682
  onResize() {
5918
- if (this._open) {
6683
+ if (this.isAdaptiveModeEnabled && this.windowSize !== windowSize()) {
6684
+ if (this.isOpen) {
6685
+ this.togglePopup(false);
6686
+ }
6687
+ this.windowSize = windowSize();
6688
+ }
6689
+ if (this.isOpen && !this.isActionSheetExpanded) {
5919
6690
  const popupWrapper = this.popupRef.popupElement;
5920
6691
  const { min, max } = this.width;
5921
6692
  popupWrapper.style.minWidth = min;
@@ -5959,7 +6730,10 @@ class DropDownListComponent {
5959
6730
  /**
5960
6731
  * @hidden
5961
6732
  */
5962
- keydown(event) {
6733
+ keydown(event, input) {
6734
+ if (input) {
6735
+ event.stopPropagation();
6736
+ }
5963
6737
  const firstIndex = isPresent(this.defaultItem) ? -1 : 0;
5964
6738
  const focused = isNaN(this.selectionService.focused) ? this.firstFocusableIndex(firstIndex) : this.selectionService.focused;
5965
6739
  let offset = 0;
@@ -6001,6 +6775,9 @@ class DropDownListComponent {
6001
6775
  ) {
6002
6776
  eventData.preventDefault();
6003
6777
  }
6778
+ if (action === NavigationAction.Tab && this.isActionSheetExpanded) {
6779
+ this.togglePopup(false);
6780
+ }
6004
6781
  }
6005
6782
  /**
6006
6783
  * @hidden
@@ -6014,10 +6791,11 @@ class DropDownListComponent {
6014
6791
  /**
6015
6792
  * @hidden
6016
6793
  */
6017
- click(event) {
6018
- event.preventDefault();
6019
- this.focus();
6020
- this.togglePopup(!this.isOpen);
6794
+ click() {
6795
+ if (!this.isActionSheetExpanded) {
6796
+ this.focus();
6797
+ this.togglePopup(!this.isOpen);
6798
+ }
6021
6799
  }
6022
6800
  set isFocused(isFocused) {
6023
6801
  this.renderer[isFocused ? 'addClass' : 'removeClass'](this.wrapper.nativeElement, 'k-focus');
@@ -6036,6 +6814,11 @@ class DropDownListComponent {
6036
6814
  this.assignAriaDescribedBy();
6037
6815
  this.setComponentClasses();
6038
6816
  }
6817
+ ngAfterViewInit() {
6818
+ var _a;
6819
+ this.windowSize = windowSize();
6820
+ this.renderer.setAttribute((_a = this.actionSheet) === null || _a === void 0 ? void 0 : _a.element.nativeElement, 'style', '--kendo-actionsheet-height: 60vh; --kendo-actionsheet-max-height: none');
6821
+ }
6039
6822
  /**
6040
6823
  * @hidden
6041
6824
  * Used by the TextBoxContainer to determine if the component is empty.
@@ -6123,7 +6906,7 @@ class DropDownListComponent {
6123
6906
  }
6124
6907
  }
6125
6908
  /**
6126
- * Toggles the visibility of the popup
6909
+ * Toggles the visibility of the popup or actionSheet
6127
6910
  * ([see example]({% slug openstate_ddl %}#toc-setting-the-initially-opened-component)).
6128
6911
  * If you use the `toggle` method to open or close the popup, the `open` and `close` events will not be fired.
6129
6912
  *
@@ -6140,6 +6923,9 @@ class DropDownListComponent {
6140
6923
  _toggle(open) {
6141
6924
  this._open = open;
6142
6925
  this.destroyPopup();
6926
+ if (this.isActionSheetExpanded) {
6927
+ this.closeActionSheet();
6928
+ }
6143
6929
  if (this._open) {
6144
6930
  this.createPopup();
6145
6931
  }
@@ -6172,10 +6958,10 @@ class DropDownListComponent {
6172
6958
  }
6173
6959
  }
6174
6960
  /**
6175
- * Returns the current open state of the popup.
6961
+ * Returns the current open state. Returns `true` if the popup or actionSheet is open.
6176
6962
  */
6177
6963
  get isOpen() {
6178
- return this._open;
6964
+ return isTruthy(this._open || this.isActionSheetExpanded);
6179
6965
  }
6180
6966
  /**
6181
6967
  * Resets the value of the DropDownList.
@@ -6271,7 +7057,12 @@ class DropDownListComponent {
6271
7057
  if (this.virtual) {
6272
7058
  this.virtual.skip = 0;
6273
7059
  }
6274
- const horizontalAlign = this.direction === "rtl" ? "right" : "left";
7060
+ this.windowSize = windowSize();
7061
+ if (this.isAdaptive) {
7062
+ this.openActionSheet();
7063
+ return;
7064
+ }
7065
+ const horizontalAlign = this.direction === "rtl" ? "right" : "left";
6275
7066
  const anchorPosition = { horizontal: horizontalAlign, vertical: "bottom" };
6276
7067
  const popupPosition = { horizontal: horizontalAlign, vertical: "top" };
6277
7068
  this.popupRef = this.popupService.open({
@@ -6302,7 +7093,9 @@ class DropDownListComponent {
6302
7093
  }
6303
7094
  this.subs.add(this.popupRef.popupOpen.subscribe(() => {
6304
7095
  this.cdr.detectChanges();
7096
+ setListBoxAriaLabelLebBy(this.optionsList, this.wrapper, this.renderer);
6305
7097
  this.optionsList.scrollToItem(this.selectionService.focused);
7098
+ this.selectionService.focus(this.selectionService.focused);
6306
7099
  this.opened.emit();
6307
7100
  }));
6308
7101
  this.subs.add(this.popupRef.popupClose.subscribe(() => {
@@ -6511,26 +7304,28 @@ class DropDownListComponent {
6511
7304
  }
6512
7305
  }
6513
7306
  componentBlur() {
6514
- this.isFocused = false;
6515
- const selectionPresent = isPresent(this.selectionService.selected[0]);
6516
- const valueHasChanged = selectionPresent && getter(this.value, this.valueField) !== getter(this.dataService.itemAt(this.selectionService.selected[0]), this.valueField);
6517
- if (valueHasChanged ||
6518
- hasObservers(this.close) ||
6519
- hasObservers(this.onBlur) ||
6520
- hasObservers(this.filterChange) ||
6521
- isUntouched(this.wrapper.nativeElement)) {
6522
- this._zone.run(() => {
6523
- if (valueHasChanged) {
6524
- this.selectionService.change(this.selectionService.selected[0]);
6525
- }
7307
+ if (!this.isActionSheetExpanded) {
7308
+ this.isFocused = false;
7309
+ const selectionPresent = isPresent(this.selectionService.selected[0]);
7310
+ const valueHasChanged = selectionPresent && getter(this.value, this.valueField) !== getter(this.dataService.itemAt(this.selectionService.selected[0]), this.valueField);
7311
+ if (valueHasChanged ||
7312
+ hasObservers(this.close) ||
7313
+ hasObservers(this.onBlur) ||
7314
+ hasObservers(this.filterChange) ||
7315
+ isUntouched(this.wrapper.nativeElement)) {
7316
+ this._zone.run(() => {
7317
+ if (valueHasChanged) {
7318
+ this.selectionService.change(this.selectionService.selected[0]);
7319
+ }
7320
+ this.togglePopup(false);
7321
+ this.clearFilter();
7322
+ this.onBlur.emit();
7323
+ this.onTouchedCallback();
7324
+ });
7325
+ }
7326
+ else {
6526
7327
  this.togglePopup(false);
6527
- this.clearFilter();
6528
- this.onBlur.emit();
6529
- this.onTouchedCallback();
6530
- });
6531
- }
6532
- else {
6533
- this.togglePopup(false);
7328
+ }
6534
7329
  }
6535
7330
  }
6536
7331
  /**
@@ -6675,6 +7470,15 @@ class DropDownListComponent {
6675
7470
  handleFilter(event) {
6676
7471
  this.filterChange.emit(event.target.value);
6677
7472
  }
7473
+ /**
7474
+ * @hidden
7475
+ */
7476
+ handleClick() {
7477
+ this.windowSize = windowSize();
7478
+ if (this.isAdaptive) {
7479
+ this.togglePopup(true);
7480
+ }
7481
+ }
6678
7482
  /**
6679
7483
  * @hidden
6680
7484
  */
@@ -6702,9 +7506,32 @@ class DropDownListComponent {
6702
7506
  this.renderer.addClass(this.wrapper.nativeElement, getFillModeClass('picker', this.fillMode));
6703
7507
  }
6704
7508
  }
7509
+ closeActionSheet() {
7510
+ this.actionSheet.toggle(false);
7511
+ if (this.filterable) {
7512
+ this.actionSheetSearchBar.value = '';
7513
+ this.filterChange.emit('');
7514
+ }
7515
+ this.closed.emit();
7516
+ }
7517
+ openActionSheet() {
7518
+ this.windowSize = windowSize();
7519
+ this.actionSheet.toggle(true);
7520
+ this.cdr.detectChanges();
7521
+ setListBoxAriaLabelLebBy(this.optionsList, this.wrapper, this.renderer);
7522
+ this.title = setActionSheetTitle(this.wrapper, this.title);
7523
+ updateActionSheetAdaptiveAppearance(this.actionSheet, this.windowSize, this.renderer);
7524
+ this.cdr.detectChanges();
7525
+ this.opened.emit();
7526
+ this.optionsList.scrollToItem(this.selectionService.focused);
7527
+ this.selectionService.focus(this.selectionService.focused);
7528
+ if (this.filterable) {
7529
+ this.actionSheetSearchBar.focus();
7530
+ }
7531
+ }
6705
7532
  }
6706
- DropDownListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: DropDownListComponent, deps: [{ token: i0.ElementRef }, { token: i1.LocalizationService }, { token: i2.PopupService }, { token: SelectionService }, { token: NavigationService }, { token: DisabledItemsService }, { token: DataService }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: TOUCH_ENABLED, optional: true }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
6707
- DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: DropDownListComponent, selector: "kendo-dropdownlist", inputs: { iconClass: "iconClass", loading: "loading", data: "data", value: "value", textField: "textField", valueField: "valueField", popupSettings: "popupSettings", listHeight: "listHeight", defaultItem: "defaultItem", disabled: "disabled", itemDisabled: "itemDisabled", readonly: "readonly", filterable: "filterable", virtual: "virtual", ignoreCase: "ignoreCase", delay: "delay", valuePrimitive: "valuePrimitive", tabindex: "tabindex", tabIndex: "tabIndex", size: "size", rounded: "rounded", fillMode: "fillMode", focusableId: ["id", "focusableId"] }, outputs: { valueChange: "valueChange", filterChange: "filterChange", selectionChange: "selectionChange", open: "open", opened: "opened", close: "close", closed: "closed", onFocus: "focus", onBlur: "blur" }, host: { listeners: { "keydown": "keydown($event)", "keypress": "keypress($event)", "click": "click($event)" }, properties: { "attr.aria-controls": "this.ariaControls", "class.k-dropdownlist": "this.hostClasses", "class.k-picker": "this.hostClasses", "class.k-disabled": "this.isDisabledClass", "attr.disabled": "this.isDisabledAttribute", "class.k-loading": "this.isLoading", "attr.id": "this.focusableId", "attr.dir": "this.dir", "attr.tabindex": "this.hostTabIndex", "attr.readonly": "this.readonlyAttr", "attr.aria-busy": "this.isBusy", "attr.role": "this.role", "attr.aria-haspopup": "this.haspopup", "attr.aria-expanded": "this.isAriaExpanded", "attr.aria-invalid": "this.hostAriaInvalid", "attr.aria-activedescendant": "this.hostAriaActivedescendant" } }, providers: [
7533
+ DropDownListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: DropDownListComponent, deps: [{ token: i0.ElementRef }, { token: i1.LocalizationService }, { token: i2$1.PopupService }, { token: SelectionService }, { token: NavigationService }, { token: DisabledItemsService }, { token: DataService }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: TOUCH_ENABLED, optional: true }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
7534
+ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: DropDownListComponent, selector: "kendo-dropdownlist", inputs: { iconClass: "iconClass", loading: "loading", data: "data", value: "value", textField: "textField", valueField: "valueField", adaptiveMode: "adaptiveMode", title: "title", subtitle: "subtitle", popupSettings: "popupSettings", listHeight: "listHeight", defaultItem: "defaultItem", disabled: "disabled", itemDisabled: "itemDisabled", readonly: "readonly", filterable: "filterable", virtual: "virtual", ignoreCase: "ignoreCase", delay: "delay", valuePrimitive: "valuePrimitive", tabindex: "tabindex", tabIndex: "tabIndex", size: "size", rounded: "rounded", fillMode: "fillMode", focusableId: ["id", "focusableId"] }, outputs: { valueChange: "valueChange", filterChange: "filterChange", selectionChange: "selectionChange", open: "open", opened: "opened", close: "close", closed: "closed", onFocus: "focus", onBlur: "blur" }, host: { listeners: { "keydown": "keydown($event)", "keypress": "keypress($event)", "click": "click()" }, properties: { "attr.aria-controls": "this.ariaControls", "class.k-dropdownlist": "this.hostClasses", "class.k-picker": "this.hostClasses", "class.k-disabled": "this.isDisabledClass", "attr.disabled": "this.isDisabledAttribute", "class.k-loading": "this.isLoading", "attr.id": "this.focusableId", "attr.dir": "this.dir", "attr.tabindex": "this.hostTabIndex", "attr.readonly": "this.readonlyAttr", "attr.aria-busy": "this.isBusy", "attr.role": "this.role", "attr.aria-haspopup": "this.haspopup", "attr.aria-expanded": "this.isAriaExpanded", "attr.aria-invalid": "this.hostAriaInvalid", "attr.aria-activedescendant": "this.hostAriaActivedescendant" } }, providers: [
6708
7535
  DROPDOWNLIST_VALUE_ACCESSOR,
6709
7536
  DataService,
6710
7537
  SelectionService,
@@ -6721,7 +7548,7 @@ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
6721
7548
  {
6722
7549
  provide: KendoInput, useExisting: forwardRef(() => DropDownListComponent)
6723
7550
  }
6724
- ], queries: [{ propertyName: "itemTemplate", first: true, predicate: ItemTemplateDirective, descendants: true }, { propertyName: "groupTemplate", first: true, predicate: GroupTemplateDirective, descendants: true }, { propertyName: "fixedGroupTemplate", first: true, predicate: FixedGroupTemplateDirective, descendants: true }, { propertyName: "valueTemplate", first: true, predicate: ValueTemplateDirective, descendants: true }, { propertyName: "headerTemplate", first: true, predicate: HeaderTemplateDirective, descendants: true }, { propertyName: "footerTemplate", first: true, predicate: FooterTemplateDirective, descendants: true }, { propertyName: "noDataTemplate", first: true, predicate: NoDataTemplateDirective, descendants: true }], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "popupTemplate", first: true, predicate: ["popupTemplate"], descendants: true, static: true }, { propertyName: "optionsList", first: true, predicate: ["optionsList"], descendants: true }], exportAs: ["kendoDropDownList"], usesOnChanges: true, ngImport: i0, template: `
7551
+ ], queries: [{ propertyName: "itemTemplate", first: true, predicate: ItemTemplateDirective, descendants: true }, { propertyName: "groupTemplate", first: true, predicate: GroupTemplateDirective, descendants: true }, { propertyName: "fixedGroupTemplate", first: true, predicate: FixedGroupTemplateDirective, descendants: true }, { propertyName: "valueTemplate", first: true, predicate: ValueTemplateDirective, descendants: true }, { propertyName: "headerTemplate", first: true, predicate: HeaderTemplateDirective, descendants: true }, { propertyName: "footerTemplate", first: true, predicate: FooterTemplateDirective, descendants: true }, { propertyName: "noDataTemplate", first: true, predicate: NoDataTemplateDirective, descendants: true }], viewQueries: [{ propertyName: "responsiveRendererComponent", first: true, predicate: ResponsiveRendererComponent, descendants: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "popupTemplate", first: true, predicate: ["popupTemplate"], descendants: true, static: true }, { propertyName: "optionsList", first: true, predicate: ["optionsList"], descendants: true }], exportAs: ["kendoDropDownList"], usesOnChanges: true, ngImport: i0, template: `
6725
7552
  <ng-container kendoDropDownListLocalizedMessages
6726
7553
  i18n-noDataText="kendo.dropdownlist.noDataText|The text displayed in the popup when there are no items"
6727
7554
  noDataText="NO DATA FOUND"
@@ -6768,8 +7595,26 @@ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
6768
7595
  <span *ngIf="loading || iconClass" class="k-button-icon k-icon" [ngClass]="buttonClasses"></span>
6769
7596
  </button>
6770
7597
  <ng-template #popupTemplate>
7598
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
7599
+ </ng-template>
7600
+ <kendo-resize-sensor *ngIf="isOpen || isAdaptiveModeEnabled" (resize)="onResize()"></kendo-resize-sensor>
7601
+ <ng-container #container></ng-container>
7602
+
7603
+ <!--adaptive rendering-->
7604
+ <responsive-renderer
7605
+ [sharedPopupActionSheetTemplate]="sharedPopupActionSheetTemplate"
7606
+ [isActionSheetExpanded]="isActionSheetExpanded"
7607
+ [title]="title"
7608
+ [showTextInput]="filterable"
7609
+ [subtitle]="subtitle"
7610
+ (closePopup)="togglePopup(false)"
7611
+ (textInputChange)="onFilterChange($event)"
7612
+ >
7613
+ </responsive-renderer>
7614
+
7615
+ <ng-template #sharedPopupActionSheetTemplate>
6771
7616
  <!--filterable-->
6772
- <ng-template [ngIf]="filterable">
7617
+ <ng-template [ngIf]="filterable && !isActionSheetExpanded">
6773
7618
  <div class="k-list-filter" (click)="$event.stopImmediatePropagation()">
6774
7619
  <span
6775
7620
  class="k-searchbox k-input"
@@ -6781,6 +7626,7 @@ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
6781
7626
  [svgIcon]="searchIcon">
6782
7627
  </kendo-icon-wrapper>
6783
7628
  <input
7629
+ #searchInput
6784
7630
  role="searchbox"
6785
7631
  aria-autocomplete="list"
6786
7632
  aria-haspopup="listbox"
@@ -6792,10 +7638,11 @@ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
6792
7638
  [dir]="direction"
6793
7639
  [(ngModel)]="filterText"
6794
7640
  class="k-input-inner"
6795
- (keydown)="keydown($event)"
7641
+ (keydown)="keydown($event, searchInput)"
6796
7642
  (input)="handleFilter($event)"
6797
7643
  (focus)="onFilterFocus()"
6798
- (blur)="blurFilterInput()" />
7644
+ (blur)="blurFilterInput()"
7645
+ (click)="handleClick()" />
6799
7646
  </span>
6800
7647
  </div>
6801
7648
  </ng-template>
@@ -6831,7 +7678,7 @@ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
6831
7678
  templateRef: headerTemplate.templateRef
6832
7679
  }">
6833
7680
  </ng-template>
6834
- <!--list-->
7681
+ <!--list-->
6835
7682
  <kendo-list
6836
7683
  #optionsList
6837
7684
  [id]="listBoxId"
@@ -6868,11 +7715,7 @@ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
6868
7715
  }">
6869
7716
  </ng-template>
6870
7717
  </ng-template>
6871
- <ng-template [ngIf]="isOpen">
6872
- <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
6873
- </ng-template>
6874
- <ng-container #container></ng-container>
6875
- `, isInline: true, components: [{ type: i8.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "ariaLive", "isMultiselect", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize"] }, { type: i10.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }], directives: [{ type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: i12.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i10.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: i13.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: FilterInputDirective, selector: "[filterInput]", inputs: ["filterInput"] }, { type: i13.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i13.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: SelectableDirective, selector: "[kendoDropDownsSelectable]", inputs: ["index", "checkboxes", "height", "multipleSelection"] }] });
7718
+ `, isInline: true, components: [{ type: i8.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: i9.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { type: ResponsiveRendererComponent, selector: "responsive-renderer", inputs: ["title", "showActionButtons", "subtitle", "size", "showTextInput", "sharedPopupActionSheetTemplate", "isActionSheetExpanded", "text", "placeholder"], outputs: ["closePopup", "textInputChange", "navigate", "onExpand", "onCollapse", "onApply", "onCancel"] }, { type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "ariaLive", "isMultiselect", "isActionSheetExpanded", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize"] }], directives: [{ type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: i13.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i9.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: i13.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i14.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: FilterInputDirective, selector: "[filterInput]", inputs: ["filterInput"] }, { type: i14.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i14.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: SelectableDirective, selector: "[kendoDropDownsSelectable]", inputs: ["index", "checkboxes", "height", "isMultiselect", "multipleSelection"] }] });
6876
7719
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: DropDownListComponent, decorators: [{
6877
7720
  type: Component,
6878
7721
  args: [{
@@ -6943,8 +7786,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
6943
7786
  <span *ngIf="loading || iconClass" class="k-button-icon k-icon" [ngClass]="buttonClasses"></span>
6944
7787
  </button>
6945
7788
  <ng-template #popupTemplate>
7789
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
7790
+ </ng-template>
7791
+ <kendo-resize-sensor *ngIf="isOpen || isAdaptiveModeEnabled" (resize)="onResize()"></kendo-resize-sensor>
7792
+ <ng-container #container></ng-container>
7793
+
7794
+ <!--adaptive rendering-->
7795
+ <responsive-renderer
7796
+ [sharedPopupActionSheetTemplate]="sharedPopupActionSheetTemplate"
7797
+ [isActionSheetExpanded]="isActionSheetExpanded"
7798
+ [title]="title"
7799
+ [showTextInput]="filterable"
7800
+ [subtitle]="subtitle"
7801
+ (closePopup)="togglePopup(false)"
7802
+ (textInputChange)="onFilterChange($event)"
7803
+ >
7804
+ </responsive-renderer>
7805
+
7806
+ <ng-template #sharedPopupActionSheetTemplate>
6946
7807
  <!--filterable-->
6947
- <ng-template [ngIf]="filterable">
7808
+ <ng-template [ngIf]="filterable && !isActionSheetExpanded">
6948
7809
  <div class="k-list-filter" (click)="$event.stopImmediatePropagation()">
6949
7810
  <span
6950
7811
  class="k-searchbox k-input"
@@ -6956,6 +7817,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
6956
7817
  [svgIcon]="searchIcon">
6957
7818
  </kendo-icon-wrapper>
6958
7819
  <input
7820
+ #searchInput
6959
7821
  role="searchbox"
6960
7822
  aria-autocomplete="list"
6961
7823
  aria-haspopup="listbox"
@@ -6967,10 +7829,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
6967
7829
  [dir]="direction"
6968
7830
  [(ngModel)]="filterText"
6969
7831
  class="k-input-inner"
6970
- (keydown)="keydown($event)"
7832
+ (keydown)="keydown($event, searchInput)"
6971
7833
  (input)="handleFilter($event)"
6972
7834
  (focus)="onFilterFocus()"
6973
- (blur)="blurFilterInput()" />
7835
+ (blur)="blurFilterInput()"
7836
+ (click)="handleClick()" />
6974
7837
  </span>
6975
7838
  </div>
6976
7839
  </ng-template>
@@ -7006,7 +7869,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
7006
7869
  templateRef: headerTemplate.templateRef
7007
7870
  }">
7008
7871
  </ng-template>
7009
- <!--list-->
7872
+ <!--list-->
7010
7873
  <kendo-list
7011
7874
  #optionsList
7012
7875
  [id]="listBoxId"
@@ -7043,20 +7906,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
7043
7906
  }">
7044
7907
  </ng-template>
7045
7908
  </ng-template>
7046
- <ng-template [ngIf]="isOpen">
7047
- <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
7048
- </ng-template>
7049
- <ng-container #container></ng-container>
7050
7909
  `
7051
7910
  }]
7052
7911
  }], ctorParameters: function () {
7053
- return [{ type: i0.ElementRef }, { type: i1.LocalizationService }, { type: i2.PopupService }, { type: SelectionService }, { type: NavigationService }, { type: DisabledItemsService }, { type: DataService }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
7912
+ return [{ type: i0.ElementRef }, { type: i1.LocalizationService }, { type: i2$1.PopupService }, { type: SelectionService }, { type: NavigationService }, { type: DisabledItemsService }, { type: DataService }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
7054
7913
  type: Optional
7055
7914
  }, {
7056
7915
  type: Inject,
7057
7916
  args: [TOUCH_ENABLED]
7058
7917
  }] }, { type: i0.Injector }];
7059
- }, propDecorators: { ariaControls: [{
7918
+ }, propDecorators: { responsiveRendererComponent: [{
7919
+ type: ViewChild,
7920
+ args: [ResponsiveRendererComponent]
7921
+ }], ariaControls: [{
7060
7922
  type: HostBinding,
7061
7923
  args: ['attr.aria-controls']
7062
7924
  }], iconClass: [{
@@ -7071,6 +7933,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
7071
7933
  type: Input
7072
7934
  }], valueField: [{
7073
7935
  type: Input
7936
+ }], adaptiveMode: [{
7937
+ type: Input
7938
+ }], title: [{
7939
+ type: Input
7940
+ }], subtitle: [{
7941
+ type: Input
7074
7942
  }], popupSettings: [{
7075
7943
  type: Input
7076
7944
  }], listHeight: [{
@@ -7213,7 +8081,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
7213
8081
  args: ['keypress', ['$event']]
7214
8082
  }], click: [{
7215
8083
  type: HostListener,
7216
- args: ['click', ['$event']]
8084
+ args: ['click']
7217
8085
  }] } });
7218
8086
 
7219
8087
  /**
@@ -7504,7 +8372,7 @@ TagListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versi
7504
8372
  </span>
7505
8373
  </div>
7506
8374
  <ng-content></ng-content>
7507
- `, isInline: true, components: [{ type: i8.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }], directives: [{ type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i12.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }] });
8375
+ `, isInline: true, components: [{ type: i8.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }], directives: [{ type: i13.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i13.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }] });
7508
8376
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TagListComponent, decorators: [{
7509
8377
  type: Component,
7510
8378
  args: [{
@@ -7652,6 +8520,10 @@ class MultiSelectComponent {
7652
8520
  this.renderer = renderer;
7653
8521
  this._zone = _zone;
7654
8522
  this.touchEnabled = touchEnabled;
8523
+ /**
8524
+ * @hidden
8525
+ */
8526
+ this.animationDuration = animationDuration;
7655
8527
  /**
7656
8528
  * @hidden
7657
8529
  */
@@ -7679,6 +8551,15 @@ class MultiSelectComponent {
7679
8551
  * Specifies the [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.
7680
8552
  */
7681
8553
  this.tabindex = 0;
8554
+ /**
8555
+ * Enables or disables the adaptive mode. By default the adaptive rendering is disabled.
8556
+ */
8557
+ this.adaptiveMode = 'none';
8558
+ /**
8559
+ * Sets the title of the ActionSheet that is rendered instead of the Popup when using small screen devices.
8560
+ * By default the ActionSheet title uses the text provided for the label of the AutoComplete.
8561
+ */
8562
+ this.title = '';
7682
8563
  /**
7683
8564
  * Sets the disabled state of the component.
7684
8565
  */
@@ -7691,13 +8572,7 @@ class MultiSelectComponent {
7691
8572
  * Enables the [filtering]({% slug filtering_multiselect %}) functionality of the MultiSelect.
7692
8573
  */
7693
8574
  this.filterable = false;
7694
- /**
7695
- * Sets the height of the suggestions list. By default, `listHeight` is 200px.
7696
- *
7697
- * > The `listHeight` property affects only the list of suggestions and not the whole popup container.
7698
- * > To set the height of the popup container, use `popupSettings.height`.
7699
- */
7700
- this.listHeight = 200;
8575
+ this._listHeight = 200;
7701
8576
  /**
7702
8577
  * If set to `true`, renders a button on hovering over the component.
7703
8578
  * Clicking this button resets the value of the component to an empty array and triggers the `change` event.
@@ -7820,6 +8695,10 @@ class MultiSelectComponent {
7820
8695
  */
7821
8696
  this.removeTag = new EventEmitter();
7822
8697
  this.hostClasses = true;
8698
+ /**
8699
+ * @hidden
8700
+ */
8701
+ this.windowSize = 'large';
7823
8702
  this.initialized = false;
7824
8703
  this._size = 'medium';
7825
8704
  this._rounded = 'medium';
@@ -7834,7 +8713,7 @@ class MultiSelectComponent {
7834
8713
  this._isFocused = false;
7835
8714
  this.selectedDataItems = [];
7836
8715
  this.customValueSubject = new Subject();
7837
- this.observableSubscriptions = new Subscription();
8716
+ this.subs = new Subscription();
7838
8717
  validatePackage(packageMetadata);
7839
8718
  this.popupMouseDownHandler = this.onMouseDown.bind(this);
7840
8719
  this.data = [];
@@ -7842,6 +8721,20 @@ class MultiSelectComponent {
7842
8721
  this.subscribeEvents();
7843
8722
  this.subscribeTouchEvents();
7844
8723
  }
8724
+ /**
8725
+ * @hidden
8726
+ */
8727
+ get actionSheet() {
8728
+ var _a;
8729
+ return (_a = this.responsiveRendererComponent) === null || _a === void 0 ? void 0 : _a.actionSheet;
8730
+ }
8731
+ /**
8732
+ * @hidden
8733
+ */
8734
+ get actionSheetSearchBar() {
8735
+ var _a;
8736
+ return (_a = this.responsiveRendererComponent) === null || _a === void 0 ? void 0 : _a.actionSheetSearchBar;
8737
+ }
7845
8738
  /**
7846
8739
  * @hidden
7847
8740
  */
@@ -7884,6 +8777,16 @@ class MultiSelectComponent {
7884
8777
  }
7885
8778
  }
7886
8779
  }
8780
+ /**
8781
+ * @hidden
8782
+ */
8783
+ onAdaptiveTextBoxChange(text) {
8784
+ if (this.filterable) {
8785
+ this.filterChange.emit(text);
8786
+ return;
8787
+ }
8788
+ this.searchTextAndFocus(text);
8789
+ }
7887
8790
  /**
7888
8791
  * Blurs the MultiSelect.
7889
8792
  */
@@ -7896,28 +8799,30 @@ class MultiSelectComponent {
7896
8799
  * @hidden
7897
8800
  */
7898
8801
  onSearchBarBlur() {
7899
- if (!this.isFocused) {
7900
- return;
7901
- }
7902
- this.isFocused = false;
7903
- if (hasObservers(this.onBlur) ||
7904
- hasObservers(this.filterChange) ||
7905
- hasObservers(this.close) ||
7906
- isUntouched(this.wrapper.nativeElement)) {
7907
- this._zone.run(() => {
7908
- this.closePopup();
7909
- if (!(this.isOpen && this.allowCustom)) {
8802
+ if (!this.isActionSheetExpanded) {
8803
+ if (!this.isFocused) {
8804
+ return;
8805
+ }
8806
+ this.isFocused = false;
8807
+ if (hasObservers(this.onBlur) ||
8808
+ hasObservers(this.filterChange) ||
8809
+ hasObservers(this.close) ||
8810
+ isUntouched(this.wrapper.nativeElement)) {
8811
+ this._zone.run(() => {
8812
+ this.closePopup();
8813
+ if (!(this.isOpen && this.allowCustom)) {
8814
+ this.clearFilter();
8815
+ }
8816
+ this.onBlur.emit();
8817
+ this.onTouchedCallback();
8818
+ });
8819
+ }
8820
+ else {
8821
+ if (!this.allowCustom) {
7910
8822
  this.clearFilter();
7911
8823
  }
7912
- this.onBlur.emit();
7913
- this.onTouchedCallback();
7914
- });
7915
- }
7916
- else {
7917
- if (!this.allowCustom) {
7918
- this.clearFilter();
8824
+ this.closePopup();
7919
8825
  }
7920
- this.closePopup();
7921
8826
  }
7922
8827
  }
7923
8828
  /**
@@ -7930,7 +8835,14 @@ class MultiSelectComponent {
7930
8835
  * @hidden
7931
8836
  */
7932
8837
  onResize() {
7933
- if (this._open) {
8838
+ if (this.isAdaptiveModeEnabled && this.windowSize !== windowSize()) {
8839
+ if (this.isOpen) {
8840
+ this.togglePopup(false);
8841
+ }
8842
+ this.windowSize = windowSize();
8843
+ this.cdr.detectChanges();
8844
+ }
8845
+ if (this.isOpen && !this.isActionSheetExpanded) {
7934
8846
  const popupWrapper = this.popupRef.popupElement;
7935
8847
  const { min, max } = this.width;
7936
8848
  popupWrapper.style.minWidth = min;
@@ -8071,6 +8983,22 @@ class MultiSelectComponent {
8071
8983
  get placeholder() {
8072
8984
  return this.selectedDataItems.length ? '' : this._placeholder;
8073
8985
  }
8986
+ /**
8987
+ * Sets the subtitle of the ActionSheet that is rendered instead of the Popup when using small screen devices.
8988
+ * By default the ActionSheet subtitle uses the text provided for the `placeholder` of the AutoComplete.
8989
+ */
8990
+ set subtitle(_subtitle) {
8991
+ this._subtitle = _subtitle;
8992
+ }
8993
+ get subtitle() {
8994
+ return this._subtitle || this.placeholder;
8995
+ }
8996
+ /**
8997
+ * @hidden
8998
+ */
8999
+ get isAdaptiveModeEnabled() {
9000
+ return this.adaptiveMode === 'auto';
9001
+ }
8074
9002
  /**
8075
9003
  * Defines a Boolean function that is executed for each data item in the component
8076
9004
  * ([see examples]({% slug disableditems_multiselect %})). Determines whether the item will be disabled.
@@ -8115,6 +9043,24 @@ class MultiSelectComponent {
8115
9043
  get popupSettings() {
8116
9044
  return this._popupSettings;
8117
9045
  }
9046
+ /**
9047
+ * Sets the height of the options list in the popup. By default, `listHeight` is 200px.
9048
+ *
9049
+ * > The `listHeight` property affects only the list of options and not the whole popup container.
9050
+ * > To set the height of the popup container, use `popupSettings.height`.
9051
+ *
9052
+ * > When using `adaptiveMode` and the screen size is `small` or `medium` the `listHeight` property is set to null.
9053
+ */
9054
+ set listHeight(_listHeight) {
9055
+ this._listHeight = _listHeight;
9056
+ }
9057
+ ;
9058
+ get listHeight() {
9059
+ if (this.isAdaptive) {
9060
+ return;
9061
+ }
9062
+ return this._listHeight;
9063
+ }
8118
9064
  /**
8119
9065
  * Specifies the type of the selected value.
8120
9066
  * If set to `true`, the selected value has to be of the primitive type
@@ -8138,6 +9084,20 @@ class MultiSelectComponent {
8138
9084
  get isLoading() {
8139
9085
  return this.loading;
8140
9086
  }
9087
+ /**
9088
+ * @hidden
9089
+ */
9090
+ get isActionSheetExpanded() {
9091
+ var _a;
9092
+ return (_a = this.actionSheet) === null || _a === void 0 ? void 0 : _a.expanded;
9093
+ }
9094
+ ;
9095
+ /**
9096
+ * @hidden
9097
+ */
9098
+ get isAdaptive() {
9099
+ return this.isAdaptiveModeEnabled && this.windowSize !== 'large';
9100
+ }
8141
9101
  get listContainerClasses() {
8142
9102
  const containerClasses = ['k-list-container', 'k-reset'];
8143
9103
  if (this.popupSettings.popupClass) {
@@ -8188,6 +9148,21 @@ class MultiSelectComponent {
8188
9148
  return 'visible';
8189
9149
  }
8190
9150
  }
9151
+ /**
9152
+ * @hidden
9153
+ */
9154
+ applyValue() {
9155
+ this.value = this._valueHolder;
9156
+ this.emitValueChange();
9157
+ this.togglePopup(false);
9158
+ }
9159
+ /**
9160
+ * @hidden
9161
+ */
9162
+ cancelValue() {
9163
+ this._valueHolder = [];
9164
+ this.togglePopup(false);
9165
+ }
8191
9166
  /**
8192
9167
  * @hidden
8193
9168
  */
@@ -8219,8 +9194,12 @@ class MultiSelectComponent {
8219
9194
  event.added.forEach((itemIndex) => {
8220
9195
  const dataItem = this.dataService.itemAt(itemIndex);
8221
9196
  const newItem = (this.valuePrimitive && isPresent(dataItem) && isPresent(dataItem[this.valueField])) ? dataItem[this.valueField] : dataItem;
9197
+ this._valueHolder = this.value.filter(filter);
8222
9198
  if (newItem) {
8223
- this.value = [...this.value, newItem];
9199
+ this._valueHolder = [...this.value, newItem];
9200
+ if (!this.isAdaptive) {
9201
+ this.value = this._valueHolder;
9202
+ }
8224
9203
  }
8225
9204
  });
8226
9205
  }
@@ -8228,7 +9207,10 @@ class MultiSelectComponent {
8228
9207
  event.removed.forEach((itemIndex) => {
8229
9208
  const dataItem = this.dataService.itemAt(itemIndex);
8230
9209
  const filter = (item) => getter(item, this.valueField) !== getter(dataItem, this.valueField);
8231
- this.value = this.value.filter(filter);
9210
+ this._valueHolder = this.value.filter(filter);
9211
+ if (!this.isAdaptive) {
9212
+ this.value = this._valueHolder;
9213
+ }
8232
9214
  });
8233
9215
  this.cdr.detectChanges();
8234
9216
  }
@@ -8243,17 +9225,25 @@ class MultiSelectComponent {
8243
9225
  if (isPresent(event.added)) {
8244
9226
  const dataItem = this.dataService.itemAt(event.added);
8245
9227
  const newItem = (this.valuePrimitive && isPresent(dataItem) && isPresent(dataItem[this.valueField])) ? dataItem[this.valueField] : dataItem;
8246
- this.value = [...this.value, newItem];
9228
+ this._valueHolder = [...this.value, newItem];
9229
+ if (!this.isAdaptive) {
9230
+ this.value = this._valueHolder;
9231
+ }
8247
9232
  }
8248
9233
  if (isPresent(event.removed)) {
8249
9234
  const dataItem = this.dataService.itemAt(event.removed);
8250
9235
  const filter = (item) => getter(item, this.valueField) !== getter(dataItem, this.valueField);
8251
- this.value = this.value.filter(filter);
9236
+ this._valueHolder = this.value.filter(filter);
9237
+ if (!this.isAdaptive) {
9238
+ this.value = this._valueHolder;
9239
+ }
8252
9240
  this.selectionService.focused = event.removed;
8253
9241
  this.cdr.detectChanges();
8254
9242
  }
8255
9243
  }
8256
- this.emitValueChange();
9244
+ if (!this.isAdaptive) {
9245
+ this.emitValueChange();
9246
+ }
8257
9247
  }
8258
9248
  /**
8259
9249
  * @hidden
@@ -8338,6 +9328,9 @@ class MultiSelectComponent {
8338
9328
  const navigateInput = this.text && event.keyCode !== Keys.ArrowDown && event.keyCode !== Keys.ArrowUp;
8339
9329
  const selectValue = this.text && event.keyCode === Keys.Enter || event.keyCode === Keys.Escape;
8340
9330
  const deleteTag = !this.text && event.keyCode === Keys.Backspace && this.tags.length > 0;
9331
+ if (event.keyCode === Keys.Backspace && this.isActionSheetExpanded) {
9332
+ return;
9333
+ }
8341
9334
  if (deleteTag) {
8342
9335
  this.handleBackspace();
8343
9336
  return;
@@ -8355,7 +9348,8 @@ class MultiSelectComponent {
8355
9348
  originalEvent: eventData
8356
9349
  });
8357
9350
  if (action !== NavigationAction.Undefined &&
8358
- ((action === NavigationAction.Enter && this.isOpen) || action !== NavigationAction.Enter)) {
9351
+ ((action === NavigationAction.Enter && this.isOpen) || action !== NavigationAction.Enter) &&
9352
+ (!this.isActionSheetExpanded && action === NavigationAction.Tab)) {
8359
9353
  event.preventDefault();
8360
9354
  }
8361
9355
  }
@@ -8412,11 +9406,11 @@ class MultiSelectComponent {
8412
9406
  ngOnInit() {
8413
9407
  this.renderer.removeAttribute(this.wrapper.nativeElement, "tabindex");
8414
9408
  this.createCustomValueStream();
8415
- this.localizationChangeSubscription = this.localization
9409
+ this.subs.add(this.localization
8416
9410
  .changes.subscribe(({ rtl }) => {
8417
9411
  this.direction = rtl ? 'rtl' : 'ltr';
8418
9412
  this.cdr.markForCheck();
8419
- });
9413
+ }));
8420
9414
  this.setState(this.value);
8421
9415
  this.setComponentClasses();
8422
9416
  this.initialized = true;
@@ -8435,18 +9429,22 @@ class MultiSelectComponent {
8435
9429
  }
8436
9430
  }
8437
9431
  ngAfterViewInit() {
9432
+ var _a;
9433
+ this.windowSize = windowSize();
9434
+ this.cdr.detectChanges();
8438
9435
  this.searchbar.setInputSize();
8439
- this.observableSubscriptions.add(this.renderer.listen(this.wrapper.nativeElement, 'mousedown', this.handleMousedown.bind(this)));
8440
- this.observableSubscriptions.add(this.renderer.listen(this.wrapper.nativeElement, 'keydown', this.handleKeydown.bind(this)));
9436
+ this.subs.add(this.renderer.listen(this.wrapper.nativeElement, 'mousedown', this.handleMousedown.bind(this)));
9437
+ this.subs.add(this.renderer.listen(this.wrapper.nativeElement, 'keydown', this.handleKeydown.bind(this)));
9438
+ this.renderer.setAttribute((_a = this.actionSheet) === null || _a === void 0 ? void 0 : _a.element.nativeElement, 'style', '--kendo-actionsheet-height: 60vh; --kendo-actionsheet-max-height: none');
8441
9439
  }
8442
9440
  ngOnDestroy() {
8443
9441
  this._toggle(false);
8444
9442
  this.unsubscribeEvents();
8445
9443
  }
8446
9444
  /**
8447
- * Toggles the visibility of the popup
9445
+ * Toggles the visibility of the popup or actionSheet
8448
9446
  * ([see example]({% slug openstate_multiselect %}#toc-setting-the-initially-opened-component)).
8449
- * If you use the `toggle` method to open or close the popup, the respective `open` and `close` events will not be fired.
9447
+ * If you use the `toggle` method to open or close the popup or actionSheet, the respective `open` and `close` events will not be fired.
8450
9448
  *
8451
9449
  * @param open - The state of the popup.
8452
9450
  */
@@ -8460,10 +9458,10 @@ class MultiSelectComponent {
8460
9458
  });
8461
9459
  }
8462
9460
  /**
8463
- * Returns the current open state of the popup.
9461
+ * Returns the current open state. Returns `true` if the popup or actionSheet is open.
8464
9462
  */
8465
9463
  get isOpen() {
8466
- return this._open;
9464
+ return isTruthy(this._open || this.isActionSheetExpanded);
8467
9465
  }
8468
9466
  /**
8469
9467
  * Resets the value of the MultiSelect.
@@ -8512,6 +9510,15 @@ class MultiSelectComponent {
8512
9510
  this.tags = this.tagMapper(this.selectedDataItems.slice(0));
8513
9511
  this.cdr.markForCheck();
8514
9512
  }
9513
+ /**
9514
+ * @hidden
9515
+ */
9516
+ handleClick() {
9517
+ this.windowSize = windowSize();
9518
+ if (this.isAdaptive) {
9519
+ this.togglePopup(true);
9520
+ }
9521
+ }
8515
9522
  set isFocused(isFocused) {
8516
9523
  this.renderer[isFocused ? 'addClass' : 'removeClass'](this.wrapper.nativeElement, 'k-focus');
8517
9524
  this._isFocused = isFocused;
@@ -8550,7 +9557,7 @@ class MultiSelectComponent {
8550
9557
  this.optionsList.scrollWithOnePage(NavigationAction[event.originalEvent.code]);
8551
9558
  }
8552
9559
  })
8553
- ].forEach(s => this.observableSubscriptions.add(s));
9560
+ ].forEach(s => this.subs.add(s));
8554
9561
  }
8555
9562
  subscribeTouchEvents() {
8556
9563
  if (!isDocumentAvailable() || !this.touchEnabled) {
@@ -8574,13 +9581,10 @@ class MultiSelectComponent {
8574
9581
  if (!isDocumentAvailable()) {
8575
9582
  return;
8576
9583
  }
8577
- this.observableSubscriptions.unsubscribe();
9584
+ this.subs.unsubscribe();
8578
9585
  if (this.customValueSubscription) {
8579
9586
  this.customValueSubscription.unsubscribe();
8580
9587
  }
8581
- if (this.localizationChangeSubscription) {
8582
- this.localizationChangeSubscription.unsubscribe();
8583
- }
8584
9588
  if (this.touchstartDisposeHandler) {
8585
9589
  this.touchstartDisposeHandler();
8586
9590
  }
@@ -8695,7 +9699,7 @@ class MultiSelectComponent {
8695
9699
  }
8696
9700
  handleItemChange(event) {
8697
9701
  this.change(event);
8698
- if (this.autoClose && !event.preventClosingPopup) {
9702
+ if (this.autoClose && !event.preventClosingPopup && !this.isActionSheetExpanded) {
8699
9703
  this.togglePopup(false);
8700
9704
  }
8701
9705
  if (this.autoClose || !this.filterable) {
@@ -8703,21 +9707,23 @@ class MultiSelectComponent {
8703
9707
  }
8704
9708
  }
8705
9709
  handleMousedown(event) {
8706
- const inputElement = this.searchbar.input.nativeElement;
8707
- if (event.button === 0) {
8708
- if (this.isFocused && this.isOpen && event.target === inputElement) {
8709
- return;
8710
- }
8711
- if (!this.touchEnabled || (this.touchEnabled && event.target.tagName !== 'SPAN')) {
8712
- this.searchbar.focus();
8713
- }
8714
- // The check is needed otherwise when appended to the component, the popup reopens on click
8715
- // https://github.com/telerik/kendo-angular/issues/3738
8716
- if ((this.popupRef && this.popupRef.popupElement.contains(event.target))) {
8717
- return;
9710
+ if (!this.isActionSheetExpanded) {
9711
+ const inputElement = this.searchbar.input.nativeElement;
9712
+ if (event.button === 0) {
9713
+ if (this.isFocused && this.isOpen && event.target === inputElement) {
9714
+ return;
9715
+ }
9716
+ if (!this.touchEnabled || (this.touchEnabled && event.target.tagName !== 'SPAN')) {
9717
+ this.searchbar.focus();
9718
+ }
9719
+ // The check is needed otherwise when appended to the component, the popup reopens on click
9720
+ // https://github.com/telerik/kendo-angular/issues/3738
9721
+ if ((this.popupRef && this.popupRef.popupElement.contains(event.target))) {
9722
+ return;
9723
+ }
9724
+ event.preventDefault();
9725
+ this.togglePopup(!this.isOpen);
8718
9726
  }
8719
- event.preventDefault();
8720
- this.togglePopup(!this.isOpen);
8721
9727
  }
8722
9728
  }
8723
9729
  handleKeydown(event) {
@@ -8746,7 +9752,7 @@ class MultiSelectComponent {
8746
9752
  else {
8747
9753
  service.add(focusedIndex);
8748
9754
  }
8749
- if (this.autoClose) {
9755
+ if (this.autoClose && !this.isActionSheetExpanded) {
8750
9756
  this.togglePopup(false);
8751
9757
  }
8752
9758
  if (this.autoClose || !this.filterable) {
@@ -8917,6 +9923,9 @@ class MultiSelectComponent {
8917
9923
  this.togglePopup(true);
8918
9924
  this.focusedTagIndex = undefined;
8919
9925
  }
9926
+ /**
9927
+ * @hidden
9928
+ */
8920
9929
  togglePopup(open) {
8921
9930
  const isDisabled = this.disabled || this.readonly;
8922
9931
  const sameState = this.isOpen === open;
@@ -8941,6 +9950,10 @@ class MultiSelectComponent {
8941
9950
  _toggle(open) {
8942
9951
  this._open = open;
8943
9952
  this.destroyPopup();
9953
+ if (this.isActionSheetExpanded) {
9954
+ this.closeActionSheet();
9955
+ this.focus();
9956
+ }
8944
9957
  if (this._open) {
8945
9958
  this.createPopup();
8946
9959
  }
@@ -8957,6 +9970,11 @@ class MultiSelectComponent {
8957
9970
  if (this.virtual) {
8958
9971
  this.virtual.skip = 0;
8959
9972
  }
9973
+ this.windowSize = windowSize();
9974
+ if (this.isAdaptive) {
9975
+ this.openActionSheet();
9976
+ return;
9977
+ }
8960
9978
  const horizontalAlign = this.direction === "rtl" ? "right" : "left";
8961
9979
  const anchorPosition = { horizontal: horizontalAlign, vertical: "bottom" };
8962
9980
  const popupPosition = { horizontal: horizontalAlign, vertical: "top" };
@@ -8988,7 +10006,9 @@ class MultiSelectComponent {
8988
10006
  }
8989
10007
  this.popupRef.popupOpen.subscribe(() => {
8990
10008
  this.cdr.detectChanges();
10009
+ setListBoxAriaLabelLebBy(this.optionsList, this.searchbar.input, this.renderer);
8991
10010
  this.optionsList.scrollToItem(this.selectionService.focused);
10011
+ this.selectionService.focus(this.selectionService.focused);
8992
10012
  this.opened.emit();
8993
10013
  });
8994
10014
  this.popupRef.popupClose.subscribe(() => {
@@ -9042,9 +10062,28 @@ class MultiSelectComponent {
9042
10062
  this.renderer.addClass(this.wrapper.nativeElement, getFillModeClass('input', this.fillMode));
9043
10063
  }
9044
10064
  }
10065
+ closeActionSheet() {
10066
+ this.actionSheet.toggle(false);
10067
+ this.actionSheetSearchBar.value = '';
10068
+ this.filterable && this.filterChange.emit('');
10069
+ this.closed.emit();
10070
+ }
10071
+ openActionSheet() {
10072
+ this.windowSize = windowSize();
10073
+ this.actionSheet.toggle(true);
10074
+ this.cdr.detectChanges();
10075
+ setListBoxAriaLabelLebBy(this.optionsList, this.searchbar.input, this.renderer);
10076
+ this.title = setActionSheetTitle(this.searchbar.input, this.title);
10077
+ updateActionSheetAdaptiveAppearance(this.actionSheet, this.windowSize, this.renderer);
10078
+ this.cdr.detectChanges();
10079
+ this.opened.emit();
10080
+ this.optionsList.scrollToItem(this.selectionService.focused);
10081
+ this.selectionService.focus(this.selectionService.focused);
10082
+ this.actionSheetSearchBar.focus();
10083
+ }
9045
10084
  }
9046
- 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: 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 });
9047
- MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: MultiSelectComponent, selector: "kendo-multiselect", inputs: { 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", 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: [
10085
+ 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 });
10086
+ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: MultiSelectComponent, selector: "kendo-multiselect", inputs: { 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: [
9048
10087
  MULTISELECT_VALUE_ACCESSOR,
9049
10088
  DataService,
9050
10089
  SelectionService,
@@ -9061,7 +10100,7 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
9061
10100
  {
9062
10101
  provide: KendoInput, useExisting: forwardRef(() => MultiSelectComponent)
9063
10102
  }
9064
- ], queries: [{ propertyName: "template", first: true, predicate: ItemTemplateDirective, descendants: true }, { propertyName: "customItemTemplate", first: true, predicate: CustomItemTemplateDirective, descendants: true }, { propertyName: "groupTemplate", first: true, predicate: GroupTemplateDirective, descendants: true }, { propertyName: "fixedGroupTemplate", first: true, predicate: FixedGroupTemplateDirective, descendants: true }, { propertyName: "headerTemplate", first: true, predicate: HeaderTemplateDirective, descendants: true }, { propertyName: "footerTemplate", first: true, predicate: FooterTemplateDirective, descendants: true }, { propertyName: "tagTemplate", first: true, predicate: TagTemplateDirective, descendants: true }, { propertyName: "groupTagTemplate", first: true, predicate: GroupTagTemplateDirective, descendants: true }, { propertyName: "noDataTemplate", first: true, predicate: NoDataTemplateDirective, descendants: true }], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "searchbar", first: true, predicate: SearchBarComponent, descendants: true, static: true }, { propertyName: "popupTemplate", first: true, predicate: ["popupTemplate"], descendants: true, static: true }, { propertyName: "optionsList", first: true, predicate: ["optionsList"], descendants: true }], exportAs: ["kendoMultiSelect"], usesOnChanges: true, ngImport: i0, template: `
10103
+ ], queries: [{ propertyName: "template", first: true, predicate: ItemTemplateDirective, descendants: true }, { propertyName: "customItemTemplate", first: true, predicate: CustomItemTemplateDirective, descendants: true }, { propertyName: "groupTemplate", first: true, predicate: GroupTemplateDirective, descendants: true }, { propertyName: "fixedGroupTemplate", first: true, predicate: FixedGroupTemplateDirective, descendants: true }, { propertyName: "headerTemplate", first: true, predicate: HeaderTemplateDirective, descendants: true }, { propertyName: "footerTemplate", first: true, predicate: FooterTemplateDirective, descendants: true }, { propertyName: "tagTemplate", first: true, predicate: TagTemplateDirective, descendants: true }, { propertyName: "groupTagTemplate", first: true, predicate: GroupTagTemplateDirective, descendants: true }, { propertyName: "noDataTemplate", first: true, predicate: NoDataTemplateDirective, descendants: true }], viewQueries: [{ propertyName: "responsiveRendererComponent", first: true, predicate: ResponsiveRendererComponent, descendants: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "searchbar", first: true, predicate: SearchBarComponent, descendants: true, static: true }, { propertyName: "popupTemplate", first: true, predicate: ["popupTemplate"], descendants: true, static: true }, { propertyName: "optionsList", first: true, predicate: ["optionsList"], descendants: true }], exportAs: ["kendoMultiSelect"], usesOnChanges: true, ngImport: i0, template: `
9065
10104
  <ng-container kendoMultiSelectLocalizedMessages
9066
10105
  i18n-noDataText="kendo.multiselect.noDataText|The text displayed in the popup when there are no items"
9067
10106
  noDataText="NO DATA FOUND"
@@ -9071,6 +10110,12 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
9071
10110
 
9072
10111
  i18n-popupLabel="kendo.multiselect.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
9073
10112
  popupLabel="Options list"
10113
+
10114
+ i18n-applyButton="kendo.multiselect.applyButton|The text of the Apply button in the action sheet"
10115
+ applyButton="Apply"
10116
+
10117
+ i18n-cancelButton="kendo.multiselect.cancelButton|The text of the Cancel button in the action sheet"
10118
+ cancelButton="Cancel"
9074
10119
  >
9075
10120
  </ng-container>
9076
10121
  <kendo-taglist
@@ -9101,13 +10146,14 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
9101
10146
  [activeDescendant]="activeDescendant"
9102
10147
  [userInput]="text"
9103
10148
  [disabled]="disabled"
9104
- [readonly]="readonly"
10149
+ [readonly]="readonly || this.isAdaptive"
9105
10150
  [tabIndex]="tabIndex"
9106
10151
  [placeholder]="placeholder"
9107
10152
  (onNavigate)="handleNavigate($event)"
9108
10153
  (valueChange)="handleFilter($event)"
9109
10154
  (onBlur)="onSearchBarBlur()"
9110
10155
  (onFocus)="onSearchBarFocus()"
10156
+ (click)="handleClick()"
9111
10157
  >
9112
10158
  </kendo-searchbar>
9113
10159
  </kendo-taglist>
@@ -9134,6 +10180,29 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
9134
10180
  >
9135
10181
  </span>
9136
10182
  <ng-template #popupTemplate>
10183
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
10184
+ </ng-template>
10185
+ <kendo-resize-sensor *ngIf="isOpen || isAdaptiveModeEnabled" (resize)="onResize()"></kendo-resize-sensor>
10186
+ <ng-container #container></ng-container>
10187
+
10188
+ <!--adaptive rendering-->
10189
+ <responsive-renderer
10190
+ [sharedPopupActionSheetTemplate]="sharedPopupActionSheetTemplate"
10191
+ [isActionSheetExpanded]="isActionSheetExpanded"
10192
+ [title]="title"
10193
+ [showTextInput]="true"
10194
+ [showActionButtons]="true"
10195
+ [subtitle]="subtitle"
10196
+ (closePopup)="togglePopup(false)"
10197
+ (textInputChange)="onAdaptiveTextBoxChange($event)"
10198
+ [placeholder]="placeholder"
10199
+ (navigate)="handleNavigate($event)"
10200
+ (onApply)="applyValue()"
10201
+ (onCancel)="cancelValue()"
10202
+ >
10203
+ </responsive-renderer>
10204
+
10205
+ <ng-template #sharedPopupActionSheetTemplate>
9137
10206
  <!--header template-->
9138
10207
  <ng-template *ngIf="headerTemplate"
9139
10208
  [templateContext]="{
@@ -9172,17 +10241,18 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
9172
10241
  [data]="data"
9173
10242
  [textField]="textField"
9174
10243
  [valueField]="valueField"
9175
- [height]="listHeight"
9176
10244
  [template]="template"
9177
10245
  [groupTemplate]="groupTemplate"
9178
10246
  [fixedGroupTemplate]="fixedGroupTemplate"
10247
+ [height]="listHeight"
9179
10248
  [show]="isOpen"
9180
10249
  [multipleSelection]="true"
9181
10250
  [virtual]="virtual"
9182
10251
  (pageChange)="pageChange($event)"
9183
10252
  [checkboxes]="checkboxes"
9184
10253
  [isMultiselect]="true"
9185
- >
10254
+ [isActionSheetExpanded]="isActionSheetExpanded"
10255
+ >
9186
10256
  </kendo-list>
9187
10257
  <!--no data template-->
9188
10258
  <div class="k-no-data" *ngIf="data.length === 0">
@@ -9202,11 +10272,7 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
9202
10272
  }">
9203
10273
  </ng-template>
9204
10274
  </ng-template>
9205
- <ng-template [ngIf]="isOpen">
9206
- <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
9207
- </ng-template>
9208
- <ng-container #container></ng-container>
9209
- `, isInline: true, components: [{ type: TagListComponent, selector: "kendo-taglist", inputs: ["tags", "textField", "valueField", "valueDepth", "focused", "template", "groupTemplate", "disabled", "tagPrefix", "id", "size", "rounded", "fillMode", "disabledIndices"], outputs: ["removeTag"] }, { type: SearchBarComponent, selector: "kendo-searchbar", inputs: ["id", "tagListId", "activeDescendant", "disabled", "readonly", "tabIndex", "role", "isLoading", "ariaControls", "ariaExpanded", "isSuggestable", "isFilterable", "userInput", "suggestedText", "placeholder"], outputs: ["valueChange", "onBlur", "onFocus", "onClick", "onNavigate"] }, { type: i8.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "ariaLive", "isMultiselect", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize"] }, { type: i10.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }], directives: [{ type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: i12.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: SelectableDirective, selector: "[kendoDropDownsSelectable]", inputs: ["index", "checkboxes", "height", "multipleSelection"] }] });
10275
+ `, isInline: true, components: [{ type: TagListComponent, selector: "kendo-taglist", inputs: ["tags", "textField", "valueField", "valueDepth", "focused", "template", "groupTemplate", "disabled", "tagPrefix", "id", "size", "rounded", "fillMode", "disabledIndices"], outputs: ["removeTag"] }, { type: SearchBarComponent, selector: "kendo-searchbar", inputs: ["id", "tagListId", "activeDescendant", "disabled", "readonly", "tabIndex", "role", "isLoading", "ariaControls", "ariaExpanded", "isSuggestable", "isFilterable", "userInput", "suggestedText", "placeholder"], outputs: ["valueChange", "onBlur", "onFocus", "onClick", "onNavigate"] }, { type: i8.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: i9.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { type: ResponsiveRendererComponent, selector: "responsive-renderer", inputs: ["title", "showActionButtons", "subtitle", "size", "showTextInput", "sharedPopupActionSheetTemplate", "isActionSheetExpanded", "text", "placeholder"], outputs: ["closePopup", "textInputChange", "navigate", "onExpand", "onCollapse", "onApply", "onCancel"] }, { type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "ariaLive", "isMultiselect", "isActionSheetExpanded", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize"] }], directives: [{ type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i13.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: i13.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: SelectableDirective, selector: "[kendoDropDownsSelectable]", inputs: ["index", "checkboxes", "height", "isMultiselect", "multipleSelection"] }] });
9210
10276
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MultiSelectComponent, decorators: [{
9211
10277
  type: Component,
9212
10278
  args: [{
@@ -9240,6 +10306,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
9240
10306
 
9241
10307
  i18n-popupLabel="kendo.multiselect.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
9242
10308
  popupLabel="Options list"
10309
+
10310
+ i18n-applyButton="kendo.multiselect.applyButton|The text of the Apply button in the action sheet"
10311
+ applyButton="Apply"
10312
+
10313
+ i18n-cancelButton="kendo.multiselect.cancelButton|The text of the Cancel button in the action sheet"
10314
+ cancelButton="Cancel"
9243
10315
  >
9244
10316
  </ng-container>
9245
10317
  <kendo-taglist
@@ -9270,13 +10342,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
9270
10342
  [activeDescendant]="activeDescendant"
9271
10343
  [userInput]="text"
9272
10344
  [disabled]="disabled"
9273
- [readonly]="readonly"
10345
+ [readonly]="readonly || this.isAdaptive"
9274
10346
  [tabIndex]="tabIndex"
9275
10347
  [placeholder]="placeholder"
9276
10348
  (onNavigate)="handleNavigate($event)"
9277
10349
  (valueChange)="handleFilter($event)"
9278
10350
  (onBlur)="onSearchBarBlur()"
9279
10351
  (onFocus)="onSearchBarFocus()"
10352
+ (click)="handleClick()"
9280
10353
  >
9281
10354
  </kendo-searchbar>
9282
10355
  </kendo-taglist>
@@ -9303,6 +10376,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
9303
10376
  >
9304
10377
  </span>
9305
10378
  <ng-template #popupTemplate>
10379
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
10380
+ </ng-template>
10381
+ <kendo-resize-sensor *ngIf="isOpen || isAdaptiveModeEnabled" (resize)="onResize()"></kendo-resize-sensor>
10382
+ <ng-container #container></ng-container>
10383
+
10384
+ <!--adaptive rendering-->
10385
+ <responsive-renderer
10386
+ [sharedPopupActionSheetTemplate]="sharedPopupActionSheetTemplate"
10387
+ [isActionSheetExpanded]="isActionSheetExpanded"
10388
+ [title]="title"
10389
+ [showTextInput]="true"
10390
+ [showActionButtons]="true"
10391
+ [subtitle]="subtitle"
10392
+ (closePopup)="togglePopup(false)"
10393
+ (textInputChange)="onAdaptiveTextBoxChange($event)"
10394
+ [placeholder]="placeholder"
10395
+ (navigate)="handleNavigate($event)"
10396
+ (onApply)="applyValue()"
10397
+ (onCancel)="cancelValue()"
10398
+ >
10399
+ </responsive-renderer>
10400
+
10401
+ <ng-template #sharedPopupActionSheetTemplate>
9306
10402
  <!--header template-->
9307
10403
  <ng-template *ngIf="headerTemplate"
9308
10404
  [templateContext]="{
@@ -9341,17 +10437,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
9341
10437
  [data]="data"
9342
10438
  [textField]="textField"
9343
10439
  [valueField]="valueField"
9344
- [height]="listHeight"
9345
10440
  [template]="template"
9346
10441
  [groupTemplate]="groupTemplate"
9347
10442
  [fixedGroupTemplate]="fixedGroupTemplate"
10443
+ [height]="listHeight"
9348
10444
  [show]="isOpen"
9349
10445
  [multipleSelection]="true"
9350
10446
  [virtual]="virtual"
9351
10447
  (pageChange)="pageChange($event)"
9352
10448
  [checkboxes]="checkboxes"
9353
10449
  [isMultiselect]="true"
9354
- >
10450
+ [isActionSheetExpanded]="isActionSheetExpanded"
10451
+ >
9355
10452
  </kendo-list>
9356
10453
  <!--no data template-->
9357
10454
  <div class="k-no-data" *ngIf="data.length === 0">
@@ -9371,20 +10468,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
9371
10468
  }">
9372
10469
  </ng-template>
9373
10470
  </ng-template>
9374
- <ng-template [ngIf]="isOpen">
9375
- <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
9376
- </ng-template>
9377
- <ng-container #container></ng-container>
9378
10471
  `
9379
10472
  }]
9380
10473
  }], ctorParameters: function () {
9381
- return [{ type: i0.ElementRef }, { type: i1.LocalizationService }, { type: i2.PopupService }, { type: DataService }, { type: SelectionService }, { type: NavigationService }, { type: DisabledItemsService }, { type: i0.ChangeDetectorRef }, { type: i0.KeyValueDiffers }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: undefined, decorators: [{
10474
+ return [{ type: i0.ElementRef }, { type: i1.LocalizationService }, { type: i2$1.PopupService }, { type: DataService }, { type: SelectionService }, { type: NavigationService }, { type: DisabledItemsService }, { type: i0.ChangeDetectorRef }, { type: i0.KeyValueDiffers }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: undefined, decorators: [{
9382
10475
  type: Optional
9383
10476
  }, {
9384
10477
  type: Inject,
9385
10478
  args: [TOUCH_ENABLED]
9386
10479
  }] }];
9387
- }, propDecorators: { focusableId: [{
10480
+ }, propDecorators: { responsiveRendererComponent: [{
10481
+ type: ViewChild,
10482
+ args: [ResponsiveRendererComponent]
10483
+ }], focusableId: [{
9388
10484
  type: Input
9389
10485
  }], autoClose: [{
9390
10486
  type: Input
@@ -9411,6 +10507,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
9411
10507
  type: Input
9412
10508
  }], placeholder: [{
9413
10509
  type: Input
10510
+ }], adaptiveMode: [{
10511
+ type: Input
10512
+ }], title: [{
10513
+ type: Input
10514
+ }], subtitle: [{
10515
+ type: Input
9414
10516
  }], disabled: [{
9415
10517
  type: Input
9416
10518
  }], itemDisabled: [{
@@ -9667,6 +10769,10 @@ const getRowWidthFromColumnsMeta = (columns) => {
9667
10769
  class MultiColumnComboBoxComponent extends ComboBoxComponent {
9668
10770
  constructor(localization, popupService, selectionService, navigationService, disabledItemsService, dataService, zone, changeDetector, renderer, wrapper, touchEnabled) {
9669
10771
  super(wrapper, localization, popupService, selectionService, navigationService, disabledItemsService, dataService, zone, changeDetector, renderer, touchEnabled);
10772
+ /**
10773
+ * @hidden
10774
+ */
10775
+ this.animationDuration = animationDuration;
9670
10776
  /**
9671
10777
  * @hidden
9672
10778
  */
@@ -9707,14 +10813,15 @@ class MultiColumnComboBoxComponent extends ComboBoxComponent {
9707
10813
  * @hidden
9708
10814
  */
9709
10815
  get listContainerClasses() {
9710
- return [
9711
- 'k-popup',
9712
- 'k-dropdowngrid-popup'
9713
- ].concat(this.popupSettings.popupClass || []);
10816
+ return ['k-popup', 'k-dropdowngrid-popup'].concat(this.popupSettings.popupClass || []);
9714
10817
  }
9715
10818
  ngAfterViewInit() {
10819
+ var _a;
9716
10820
  this.updateColumnsMediaState();
9717
10821
  this.addWindowResizeListener();
10822
+ this.windowSize = windowSize();
10823
+ this.cdr.detectChanges();
10824
+ this.renderer.setAttribute((_a = this.actionSheet) === null || _a === void 0 ? void 0 : _a.element.nativeElement, 'style', '--kendo-actionsheet-height: 60vh; --kendo-actionsheet-max-height: none');
9718
10825
  }
9719
10826
  ngOnDestroy() {
9720
10827
  super.ngOnDestroy();
@@ -9750,7 +10857,7 @@ class MultiColumnComboBoxComponent extends ComboBoxComponent {
9750
10857
  if (!isDevMode()) {
9751
10858
  return;
9752
10859
  }
9753
- if (isPresent(this.data) && this.data.length > 0 && this.data.some(item => !isObject(item))) {
10860
+ if (isPresent(this.data) && this.data.length > 0 && this.data.some((item) => !isObject(item))) {
9754
10861
  throw new Error(MultiColumnComboBoxMessages.data);
9755
10862
  }
9756
10863
  if (!isPresent(this.valueField) || !isPresent(this.textField)) {
@@ -9762,26 +10869,26 @@ class MultiColumnComboBoxComponent extends ComboBoxComponent {
9762
10869
  if (!isDocumentAvailable()) {
9763
10870
  return;
9764
10871
  }
9765
- this.zone.runOutsideAngular(() => this.removeWindowResizeListener = this.renderer.listen(window, 'resize', this.updateColumnsMediaState.bind(this)));
10872
+ this.zone.runOutsideAngular(() => (this.removeWindowResizeListener = this.renderer.listen(window, 'resize', this.updateColumnsMediaState.bind(this))));
9766
10873
  }
9767
10874
  updateColumnsMediaState() {
9768
- if (!(isPresent(this.columns) && isDocumentAvailable())) {
10875
+ if (!(isPresent(this.columns) && isDocumentAvailable()) || this.isActionSheetExpanded) {
9769
10876
  return;
9770
10877
  }
9771
- this.columns.forEach(column => {
10878
+ this.columns.forEach((column) => {
9772
10879
  const matchesMedia = !column.media || window.matchMedia(column.media).matches;
9773
10880
  if (column.matchesMedia !== matchesMedia) {
9774
10881
  column.matchesMedia = matchesMedia;
9775
10882
  if (this.isOpen) {
9776
10883
  // enter the zone only if the popup is actually open
9777
10884
  // update its width in case it's dependent on the columns' width
9778
- this.zone.run(() => this.popupRef.popupElement.style.width = this.popupWidth.max);
10885
+ this.zone.run(() => (this.popupRef.popupElement.style.width = this.popupWidth.max));
9779
10886
  }
9780
10887
  }
9781
10888
  });
9782
10889
  }
9783
10890
  }
9784
- MultiColumnComboBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MultiColumnComboBoxComponent, deps: [{ token: i1.LocalizationService }, { token: i2.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 });
10891
+ 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 });
9785
10892
  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: [
9786
10893
  SelectionService,
9787
10894
  DataService,
@@ -9790,35 +10897,36 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
9790
10897
  LocalizationService,
9791
10898
  {
9792
10899
  provide: L10N_PREFIX,
9793
- useValue: 'kendo.multicolumncombobox'
10900
+ useValue: 'kendo.multicolumncombobox',
9794
10901
  },
9795
10902
  {
9796
10903
  multi: true,
9797
10904
  provide: NG_VALUE_ACCESSOR,
9798
- useExisting: forwardRef(() => MultiColumnComboBoxComponent)
10905
+ useExisting: forwardRef(() => MultiColumnComboBoxComponent),
9799
10906
  },
9800
10907
  {
9801
10908
  provide: KendoInput,
9802
- useExisting: forwardRef(() => MultiColumnComboBoxComponent)
10909
+ useExisting: forwardRef(() => MultiColumnComboBoxComponent),
9803
10910
  },
9804
10911
  {
9805
10912
  provide: FilterableComponent,
9806
- useExisting: forwardRef(() => MultiColumnComboBoxComponent)
9807
- }
10913
+ useExisting: forwardRef(() => MultiColumnComboBoxComponent),
10914
+ },
9808
10915
  ], queries: [{ propertyName: "columns", predicate: ComboBoxColumnComponent }], viewQueries: [{ propertyName: "header", first: true, predicate: ["header"], descendants: true }], usesInheritance: true, ngImport: i0, template: `
9809
10916
  <ng-container
9810
10917
  kendoMultiColumnComboBoxLocalizedMessages
9811
-
9812
- i18n-noDataText="kendo.multicolumncombobox.noDataText|The text displayed in the popup when there are no items"
10918
+ i18n-noDataText="
10919
+ kendo.multicolumncombobox.noDataText|The text displayed in the popup when there are no items
10920
+ "
9813
10921
  noDataText="NO DATA FOUND"
9814
-
9815
10922
  i18n-clearTitle="kendo.multicolumncombobox.clearTitle|The title of the clear button"
9816
10923
  clearTitle="clear"
9817
-
9818
10924
  i18n-selectButtonText="kendo.multicolumncombobox.selectButtonText|The title of the select button"
9819
10925
  selectButtonText="Select"
9820
-
9821
- i18n-popupLabel="kendo.multicolumncombobox.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
10926
+ i18n-popupLabel="
10927
+ kendo.multicolumncombobox.popupLabel|The label of the popup element that contains the list of options
10928
+ when its role is 'region'
10929
+ "
9822
10930
  popupLabel="Options list"
9823
10931
  ></ng-container>
9824
10932
  <kendo-searchbar
@@ -9841,11 +10949,12 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
9841
10949
  (valueChange)="searchBarChange($event)"
9842
10950
  (onBlur)="handleBlur()"
9843
10951
  (onFocus)="handleFocus()"
10952
+ (click)="handleClick()"
9844
10953
  >
9845
10954
  </kendo-searchbar>
9846
10955
 
9847
10956
  <span
9848
- *ngIf="clearButton && !loading && !disabled && !readonly && text?.length"
10957
+ *ngIf="clearButton && !loading && !disabled && (!readonly || readonly && isAdaptiveModeEnabled && windowSize !== 'large') && text?.length"
9849
10958
  class="k-clear-value"
9850
10959
  [style.visibility]="clearButtonVisiblity"
9851
10960
  aria-hidden="true"
@@ -9855,11 +10964,7 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
9855
10964
  mousedown: preventEventDefault
9856
10965
  }"
9857
10966
  >
9858
- <kendo-icon-wrapper
9859
- name="x"
9860
- [svgIcon]="xIcon"
9861
- >
9862
- </kendo-icon-wrapper>
10967
+ <kendo-icon-wrapper name="x" [svgIcon]="xIcon"> </kendo-icon-wrapper>
9863
10968
  </span>
9864
10969
 
9865
10970
  <button
@@ -9875,16 +10980,36 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
9875
10980
  mousedown: preventEventDefault
9876
10981
  }"
9877
10982
  >
9878
- <kendo-icon-wrapper
9879
- *ngIf="!loading && !iconClass"
9880
- name="caret-alt-down"
9881
- [svgIcon]="caretAltDownIcon"
9882
- >
10983
+ <kendo-icon-wrapper *ngIf="!loading && !iconClass" name="caret-alt-down" [svgIcon]="caretAltDownIcon">
9883
10984
  </kendo-icon-wrapper>
9884
10985
  <span *ngIf="loading || iconClass" class="k-button-icon k-icon" [ngClass]="buttonClasses"></span>
9885
10986
  </button>
9886
10987
 
9887
10988
  <ng-template #popupTemplate>
10989
+ <!--popup/actionsheet content-->
10990
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
10991
+ </ng-template>
10992
+
10993
+ <kendo-resize-sensor *ngIf="isOpen || isAdaptiveModeEnabled" (resize)="onResize()"> </kendo-resize-sensor>
10994
+
10995
+ <!-- when the popupSettings.appendTo value is set to 'component', this container is used -->
10996
+ <ng-container #container></ng-container>
10997
+
10998
+ <!--adaptive rendering-->
10999
+ <responsive-renderer
11000
+ [sharedPopupActionSheetTemplate]="sharedPopupActionSheetTemplate"
11001
+ [isActionSheetExpanded]="isActionSheetExpanded"
11002
+ [title]="title"
11003
+ [showTextInput]="true"
11004
+ [subtitle]="subtitle"
11005
+ (closePopup)="togglePopup(false)"
11006
+ (textInputChange)="onAdaptiveTextBoxChange($event)"
11007
+ (navigate)="handleNavigate($event)"
11008
+ [placeholder]="placeholder"
11009
+ >
11010
+ </responsive-renderer>
11011
+
11012
+ <ng-template #sharedPopupActionSheetTemplate>
9888
11013
  <!--user-defined header template -->
9889
11014
  <ng-template
9890
11015
  *ngIf="headerTemplate"
@@ -9893,23 +11018,15 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
9893
11018
  }"
9894
11019
  >
9895
11020
  </ng-template>
9896
-
9897
11021
  <!--data table-->
9898
11022
  <div class="k-data-table" [ngClass]="tableSizeClass">
9899
-
9900
11023
  <!--grid header-->
9901
- <div
9902
- #header
9903
- class="k-table-header"
9904
- >
11024
+ <div #header class="k-table-header">
9905
11025
  <div class="k-table-header-wrap">
9906
11026
  <table class="k-table" role="presentation">
9907
11027
  <colgroup>
9908
11028
  <ng-container *ngFor="let column of columns">
9909
- <col
9910
- *ngIf="!column.hidden && column.matchesMedia"
9911
- [style.width.px]="column.width"
9912
- />
11029
+ <col *ngIf="!column.hidden && column.matchesMedia" [style.width.px]="column.width" />
9913
11030
  </ng-container>
9914
11031
  </colgroup>
9915
11032
  <thead class="k-table-thead">
@@ -9940,7 +11057,6 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
9940
11057
  </table>
9941
11058
  </div>
9942
11059
  </div>
9943
-
9944
11060
  <!-- item template -->
9945
11061
  <ng-template #rowTemplate let-dataItem>
9946
11062
  <ng-container *ngFor="let column of columns">
@@ -9967,8 +11083,6 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
9967
11083
  </span>
9968
11084
  </ng-container>
9969
11085
  </ng-template>
9970
-
9971
- <!--list-->
9972
11086
  <kendo-list
9973
11087
  #optionsList
9974
11088
  [optionPrefix]="optionPrefix"
@@ -9988,10 +11102,7 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
9988
11102
  </kendo-list>
9989
11103
 
9990
11104
  <!--no-data template-->
9991
- <div
9992
- class="k-no-data"
9993
- *ngIf="data.length === 0"
9994
- >
11105
+ <div class="k-no-data" *ngIf="data.length === 0">
9995
11106
  <ng-template
9996
11107
  [ngIf]="noDataTemplate"
9997
11108
  [templateContext]="{
@@ -10022,21 +11133,10 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
10022
11133
  </tfoot>
10023
11134
  </table>
10024
11135
  </div>
10025
- </ng-container>
10026
-
11136
+ </ng-container>
10027
11137
  </div>
10028
-
10029
11138
  </ng-template>
10030
-
10031
- <kendo-resize-sensor
10032
- *ngIf="isOpen"
10033
- (resize)="onResize()"
10034
- >
10035
- </kendo-resize-sensor>
10036
-
10037
- <!-- when the popupSettings.appendTo value is set to 'component', this container is used -->
10038
- <ng-container #container></ng-container>
10039
- `, isInline: true, components: [{ type: SearchBarComponent, selector: "kendo-searchbar", inputs: ["id", "tagListId", "activeDescendant", "disabled", "readonly", "tabIndex", "role", "isLoading", "ariaControls", "ariaExpanded", "isSuggestable", "isFilterable", "userInput", "suggestedText", "placeholder"], outputs: ["valueChange", "onBlur", "onFocus", "onClick", "onNavigate"] }, { type: i8.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "ariaLive", "isMultiselect", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize"] }, { type: i10.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }], directives: [{ type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: i12.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i12.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
11139
+ `, isInline: true, components: [{ type: SearchBarComponent, selector: "kendo-searchbar", inputs: ["id", "tagListId", "activeDescendant", "disabled", "readonly", "tabIndex", "role", "isLoading", "ariaControls", "ariaExpanded", "isSuggestable", "isFilterable", "userInput", "suggestedText", "placeholder"], outputs: ["valueChange", "onBlur", "onFocus", "onClick", "onNavigate"] }, { type: i8.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: i9.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { type: ResponsiveRendererComponent, selector: "responsive-renderer", inputs: ["title", "showActionButtons", "subtitle", "size", "showTextInput", "sharedPopupActionSheetTemplate", "isActionSheetExpanded", "text", "placeholder"], outputs: ["closePopup", "textInputChange", "navigate", "onExpand", "onCollapse", "onApply", "onCancel"] }, { type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "ariaLive", "isMultiselect", "isActionSheetExpanded", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize"] }], directives: [{ type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: i13.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i13.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: i13.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i13.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
10040
11140
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MultiColumnComboBoxComponent, decorators: [{
10041
11141
  type: Component,
10042
11142
  args: [{
@@ -10048,37 +11148,38 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10048
11148
  LocalizationService,
10049
11149
  {
10050
11150
  provide: L10N_PREFIX,
10051
- useValue: 'kendo.multicolumncombobox'
11151
+ useValue: 'kendo.multicolumncombobox',
10052
11152
  },
10053
11153
  {
10054
11154
  multi: true,
10055
11155
  provide: NG_VALUE_ACCESSOR,
10056
- useExisting: forwardRef(() => MultiColumnComboBoxComponent)
11156
+ useExisting: forwardRef(() => MultiColumnComboBoxComponent),
10057
11157
  },
10058
11158
  {
10059
11159
  provide: KendoInput,
10060
- useExisting: forwardRef(() => MultiColumnComboBoxComponent)
11160
+ useExisting: forwardRef(() => MultiColumnComboBoxComponent),
10061
11161
  },
10062
11162
  {
10063
11163
  provide: FilterableComponent,
10064
- useExisting: forwardRef(() => MultiColumnComboBoxComponent)
10065
- }
11164
+ useExisting: forwardRef(() => MultiColumnComboBoxComponent),
11165
+ },
10066
11166
  ],
10067
11167
  selector: 'kendo-multicolumncombobox',
10068
11168
  template: `
10069
11169
  <ng-container
10070
11170
  kendoMultiColumnComboBoxLocalizedMessages
10071
-
10072
- i18n-noDataText="kendo.multicolumncombobox.noDataText|The text displayed in the popup when there are no items"
11171
+ i18n-noDataText="
11172
+ kendo.multicolumncombobox.noDataText|The text displayed in the popup when there are no items
11173
+ "
10073
11174
  noDataText="NO DATA FOUND"
10074
-
10075
11175
  i18n-clearTitle="kendo.multicolumncombobox.clearTitle|The title of the clear button"
10076
11176
  clearTitle="clear"
10077
-
10078
11177
  i18n-selectButtonText="kendo.multicolumncombobox.selectButtonText|The title of the select button"
10079
11178
  selectButtonText="Select"
10080
-
10081
- i18n-popupLabel="kendo.multicolumncombobox.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
11179
+ i18n-popupLabel="
11180
+ kendo.multicolumncombobox.popupLabel|The label of the popup element that contains the list of options
11181
+ when its role is 'region'
11182
+ "
10082
11183
  popupLabel="Options list"
10083
11184
  ></ng-container>
10084
11185
  <kendo-searchbar
@@ -10101,11 +11202,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10101
11202
  (valueChange)="searchBarChange($event)"
10102
11203
  (onBlur)="handleBlur()"
10103
11204
  (onFocus)="handleFocus()"
11205
+ (click)="handleClick()"
10104
11206
  >
10105
11207
  </kendo-searchbar>
10106
11208
 
10107
11209
  <span
10108
- *ngIf="clearButton && !loading && !disabled && !readonly && text?.length"
11210
+ *ngIf="clearButton && !loading && !disabled && (!readonly || readonly && isAdaptiveModeEnabled && windowSize !== 'large') && text?.length"
10109
11211
  class="k-clear-value"
10110
11212
  [style.visibility]="clearButtonVisiblity"
10111
11213
  aria-hidden="true"
@@ -10115,11 +11217,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10115
11217
  mousedown: preventEventDefault
10116
11218
  }"
10117
11219
  >
10118
- <kendo-icon-wrapper
10119
- name="x"
10120
- [svgIcon]="xIcon"
10121
- >
10122
- </kendo-icon-wrapper>
11220
+ <kendo-icon-wrapper name="x" [svgIcon]="xIcon"> </kendo-icon-wrapper>
10123
11221
  </span>
10124
11222
 
10125
11223
  <button
@@ -10135,16 +11233,36 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10135
11233
  mousedown: preventEventDefault
10136
11234
  }"
10137
11235
  >
10138
- <kendo-icon-wrapper
10139
- *ngIf="!loading && !iconClass"
10140
- name="caret-alt-down"
10141
- [svgIcon]="caretAltDownIcon"
10142
- >
11236
+ <kendo-icon-wrapper *ngIf="!loading && !iconClass" name="caret-alt-down" [svgIcon]="caretAltDownIcon">
10143
11237
  </kendo-icon-wrapper>
10144
11238
  <span *ngIf="loading || iconClass" class="k-button-icon k-icon" [ngClass]="buttonClasses"></span>
10145
11239
  </button>
10146
11240
 
10147
11241
  <ng-template #popupTemplate>
11242
+ <!--popup/actionsheet content-->
11243
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
11244
+ </ng-template>
11245
+
11246
+ <kendo-resize-sensor *ngIf="isOpen || isAdaptiveModeEnabled" (resize)="onResize()"> </kendo-resize-sensor>
11247
+
11248
+ <!-- when the popupSettings.appendTo value is set to 'component', this container is used -->
11249
+ <ng-container #container></ng-container>
11250
+
11251
+ <!--adaptive rendering-->
11252
+ <responsive-renderer
11253
+ [sharedPopupActionSheetTemplate]="sharedPopupActionSheetTemplate"
11254
+ [isActionSheetExpanded]="isActionSheetExpanded"
11255
+ [title]="title"
11256
+ [showTextInput]="true"
11257
+ [subtitle]="subtitle"
11258
+ (closePopup)="togglePopup(false)"
11259
+ (textInputChange)="onAdaptiveTextBoxChange($event)"
11260
+ (navigate)="handleNavigate($event)"
11261
+ [placeholder]="placeholder"
11262
+ >
11263
+ </responsive-renderer>
11264
+
11265
+ <ng-template #sharedPopupActionSheetTemplate>
10148
11266
  <!--user-defined header template -->
10149
11267
  <ng-template
10150
11268
  *ngIf="headerTemplate"
@@ -10153,23 +11271,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10153
11271
  }"
10154
11272
  >
10155
11273
  </ng-template>
10156
-
10157
11274
  <!--data table-->
10158
11275
  <div class="k-data-table" [ngClass]="tableSizeClass">
10159
-
10160
11276
  <!--grid header-->
10161
- <div
10162
- #header
10163
- class="k-table-header"
10164
- >
11277
+ <div #header class="k-table-header">
10165
11278
  <div class="k-table-header-wrap">
10166
11279
  <table class="k-table" role="presentation">
10167
11280
  <colgroup>
10168
11281
  <ng-container *ngFor="let column of columns">
10169
- <col
10170
- *ngIf="!column.hidden && column.matchesMedia"
10171
- [style.width.px]="column.width"
10172
- />
11282
+ <col *ngIf="!column.hidden && column.matchesMedia" [style.width.px]="column.width" />
10173
11283
  </ng-container>
10174
11284
  </colgroup>
10175
11285
  <thead class="k-table-thead">
@@ -10200,7 +11310,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10200
11310
  </table>
10201
11311
  </div>
10202
11312
  </div>
10203
-
10204
11313
  <!-- item template -->
10205
11314
  <ng-template #rowTemplate let-dataItem>
10206
11315
  <ng-container *ngFor="let column of columns">
@@ -10227,8 +11336,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10227
11336
  </span>
10228
11337
  </ng-container>
10229
11338
  </ng-template>
10230
-
10231
- <!--list-->
10232
11339
  <kendo-list
10233
11340
  #optionsList
10234
11341
  [optionPrefix]="optionPrefix"
@@ -10248,10 +11355,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10248
11355
  </kendo-list>
10249
11356
 
10250
11357
  <!--no-data template-->
10251
- <div
10252
- class="k-no-data"
10253
- *ngIf="data.length === 0"
10254
- >
11358
+ <div class="k-no-data" *ngIf="data.length === 0">
10255
11359
  <ng-template
10256
11360
  [ngIf]="noDataTemplate"
10257
11361
  [templateContext]="{
@@ -10282,24 +11386,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10282
11386
  </tfoot>
10283
11387
  </table>
10284
11388
  </div>
10285
- </ng-container>
10286
-
11389
+ </ng-container>
10287
11390
  </div>
10288
-
10289
11391
  </ng-template>
10290
-
10291
- <kendo-resize-sensor
10292
- *ngIf="isOpen"
10293
- (resize)="onResize()"
10294
- >
10295
- </kendo-resize-sensor>
10296
-
10297
- <!-- when the popupSettings.appendTo value is set to 'component', this container is used -->
10298
- <ng-container #container></ng-container>
10299
- `
11392
+ `,
10300
11393
  }]
10301
11394
  }], ctorParameters: function () {
10302
- return [{ type: i1.LocalizationService }, { type: i2.PopupService }, { type: SelectionService }, { type: NavigationService }, { type: DisabledItemsService }, { type: DataService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: undefined, decorators: [{
11395
+ 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: [{
10303
11396
  type: Inject,
10304
11397
  args: [TOUCH_ENABLED]
10305
11398
  }] }];
@@ -10362,6 +11455,10 @@ class DropDownTreeComponent {
10362
11455
  this.cdr = cdr;
10363
11456
  this.localization = localization;
10364
11457
  this.touchEnabled = touchEnabled;
11458
+ /**
11459
+ * @hidden
11460
+ */
11461
+ this.animationDuration = animationDuration;
10365
11462
  /**
10366
11463
  * @hidden
10367
11464
  */
@@ -10439,13 +11536,7 @@ class DropDownTreeComponent {
10439
11536
  * The hint which is displayed when the component is empty.
10440
11537
  */
10441
11538
  this.placeholder = "";
10442
- /**
10443
- * Sets the height of the options list. By default, `listHeight` is 200px.
10444
- *
10445
- * > The `listHeight` property affects only the list of options and not the whole popup container.
10446
- * > To set the height of the popup container, use `popupSettings.height`.
10447
- */
10448
- this.listHeight = 200;
11539
+ this._listHeight = 200;
10449
11540
  /**
10450
11541
  * Sets the disabled state of the component.
10451
11542
  */
@@ -10494,6 +11585,28 @@ class DropDownTreeComponent {
10494
11585
  * @hidden
10495
11586
  */
10496
11587
  this.selectedKeys = [];
11588
+ /**
11589
+ * Enables or disables the adaptive mode. By default the adaptive rendering is disabled.
11590
+ */
11591
+ this.adaptiveMode = 'none';
11592
+ /**
11593
+ * Sets the title of the ActionSheet that is rendered instead of the Popup when using small screen devices.
11594
+ * By default the ActionSheet title uses the text provided for the label of the AutoComplete.
11595
+ */
11596
+ this.title = '';
11597
+ /**
11598
+ * Sets the subtitle of the ActionSheet that is rendered instead of the Popup when using small screen devices.
11599
+ * By default the ActionSheet subtitle uses the text provided for the `placeholder` of the AutoComplete.
11600
+ */
11601
+ this.subtitle = '';
11602
+ /**
11603
+ * @hidden
11604
+ */
11605
+ this.windowSize = 'large';
11606
+ /**
11607
+ * @hidden
11608
+ */
11609
+ this.isActionSheetExpanded = false;
10497
11610
  /**
10498
11611
  * @hidden
10499
11612
  */
@@ -10526,6 +11639,23 @@ class DropDownTreeComponent {
10526
11639
  this.subscribeTouchEvents();
10527
11640
  this.subscribeFocusEvents();
10528
11641
  }
11642
+ /**
11643
+ * @hidden
11644
+ */
11645
+ get actionSheet() {
11646
+ var _a;
11647
+ return (_a = this.responsiveRendererComponent) === null || _a === void 0 ? void 0 : _a.actionSheet;
11648
+ }
11649
+ /**
11650
+ * @hidden
11651
+ */
11652
+ get actionSheetSearchBar() {
11653
+ var _a;
11654
+ return (_a = this.responsiveRendererComponent) === null || _a === void 0 ? void 0 : _a.actionSheetSearchBar;
11655
+ }
11656
+ get isReadonly() {
11657
+ return this.readonly ? '' : null;
11658
+ }
10529
11659
  get hostAriaInvalid() {
10530
11660
  return this.formControl ? this.formControl.invalid.toString() : null;
10531
11661
  }
@@ -10556,9 +11686,6 @@ class DropDownTreeComponent {
10556
11686
  get hostAriaAutocomplete() {
10557
11687
  return this.filterable ? 'list' : null;
10558
11688
  }
10559
- get isReadonly() {
10560
- return this.readonly ? '' : null;
10561
- }
10562
11689
  set treeview(treeview) {
10563
11690
  if (treeview) {
10564
11691
  if (this.isFocused && !this.filterable || this.touchEnabled) {
@@ -10622,8 +11749,26 @@ class DropDownTreeComponent {
10622
11749
  this._dataItem = item;
10623
11750
  this.setState();
10624
11751
  }
10625
- get dataItem() {
10626
- return this._dataItem ? this._dataItem : this.value;
11752
+ get dataItem() {
11753
+ return this._dataItem ? this._dataItem : this.value;
11754
+ }
11755
+ /**
11756
+ * Sets the height of the options list in the popup. By default, `listHeight` is 200px.
11757
+ *
11758
+ * > The `listHeight` property affects only the list of options and not the whole popup container.
11759
+ * > To set the height of the popup container, use `popupSettings.height`.
11760
+ *
11761
+ * > When using `adaptiveMode` and the screen size is `small` or `medium` the `listHeight` property is set to null.
11762
+ */
11763
+ set listHeight(_listHeight) {
11764
+ this._listHeight = _listHeight;
11765
+ }
11766
+ ;
11767
+ get listHeight() {
11768
+ if (this.isAdaptive) {
11769
+ return;
11770
+ }
11771
+ return this._listHeight;
10627
11772
  }
10628
11773
  /**
10629
11774
  * Specifies the [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.
@@ -10719,10 +11864,10 @@ class DropDownTreeComponent {
10719
11864
  return isPresent(popupHeight) ? `${popupHeight}px` : 'auto';
10720
11865
  }
10721
11866
  /**
10722
- * Returns the current open state of the popup.
11867
+ * Returns the current open state. Returns `true` if the popup or actionSheet is open.
10723
11868
  */
10724
11869
  get isOpen() {
10725
- return isPresent(this.popupRef);
11870
+ return isTruthy(isPresent(this.popupRef) || this.isActionSheetExpanded);
10726
11871
  }
10727
11872
  get clearButtonVisiblity() {
10728
11873
  if (this.touchEnabled) {
@@ -10732,6 +11877,26 @@ class DropDownTreeComponent {
10732
11877
  get isFilterActive() {
10733
11878
  return this.filterInput && document.activeElement === this.filterInput.nativeElement;
10734
11879
  }
11880
+ /**
11881
+ * @hidden
11882
+ */
11883
+ onFilterChange(text) {
11884
+ if (this.filterable) {
11885
+ this.filterChange.emit(text);
11886
+ }
11887
+ }
11888
+ /**
11889
+ * @hidden
11890
+ */
11891
+ get isAdaptiveModeEnabled() {
11892
+ return this.adaptiveMode === 'auto';
11893
+ }
11894
+ /**
11895
+ * @hidden
11896
+ */
11897
+ get isAdaptive() {
11898
+ return this.isAdaptiveModeEnabled && this.windowSize !== 'large';
11899
+ }
10735
11900
  /**
10736
11901
  * @hidden
10737
11902
  *
@@ -10846,8 +12011,28 @@ class DropDownTreeComponent {
10846
12011
  this.verifySettings();
10847
12012
  }
10848
12013
  ngAfterViewInit() {
12014
+ var _a;
12015
+ this.windowSize = windowSize();
10849
12016
  this.subs.add(this.renderer.listen(this.wrapper.nativeElement, 'click', this.handleClick.bind(this)));
10850
12017
  this.subs.add(this.renderer.listen(this.wrapper.nativeElement, 'keydown', this.handleKeydown.bind(this)));
12018
+ this.renderer.setAttribute((_a = this.actionSheet) === null || _a === void 0 ? void 0 : _a.element.nativeElement, 'style', '--kendo-actionsheet-height: 60vh; --kendo-actionsheet-max-height: none');
12019
+ }
12020
+ /**
12021
+ * @hidden
12022
+ */
12023
+ onResize() {
12024
+ if (this.isAdaptiveModeEnabled && this.windowSize !== windowSize()) {
12025
+ if (this.isOpen) {
12026
+ this.togglePopup(false);
12027
+ }
12028
+ this.windowSize = windowSize();
12029
+ }
12030
+ if (this.isOpen && !this.isActionSheetExpanded) {
12031
+ const popupWrapper = this.popupRef.popupElement;
12032
+ const { min, max } = this.width;
12033
+ popupWrapper.style.minWidth = min;
12034
+ popupWrapper.style.width = max;
12035
+ }
10851
12036
  }
10852
12037
  /**
10853
12038
  * @hidden
@@ -10898,29 +12083,36 @@ class DropDownTreeComponent {
10898
12083
  * @hidden
10899
12084
  */
10900
12085
  handleBlur(e) {
10901
- const relatedTarget = e && e.relatedTarget;
10902
- if (this.wrapper.nativeElement.contains(relatedTarget) ||
10903
- (this.isOpen && this.popupRef.popupElement.contains(relatedTarget))) {
10904
- return;
10905
- }
10906
- this.isFocused = false;
10907
- this.togglePopup(false);
10908
- if (hasObservers(this.onBlur) ||
10909
- isUntouched(this.wrapper.nativeElement)) {
10910
- this._zone.run(() => {
10911
- this.onBlur.emit();
10912
- this.onTouchedCallback();
10913
- });
12086
+ if (!this.isActionSheetExpanded) {
12087
+ const relatedTarget = e && e.relatedTarget;
12088
+ if (this.wrapper.nativeElement.contains(relatedTarget) ||
12089
+ (this.isOpen && this.popupRef.popupElement.contains(relatedTarget))) {
12090
+ return;
12091
+ }
12092
+ this.isFocused = false;
12093
+ this.togglePopup(false);
12094
+ if (hasObservers(this.onBlur) ||
12095
+ isUntouched(this.wrapper.nativeElement)) {
12096
+ this._zone.run(() => {
12097
+ this.onBlur.emit();
12098
+ this.onTouchedCallback();
12099
+ });
12100
+ }
10914
12101
  }
10915
12102
  }
10916
12103
  /**
10917
12104
  * @hidden
10918
12105
  */
10919
12106
  handleKeydown(event) {
12107
+ var _a;
10920
12108
  if (this.disabled || this.readonly) {
10921
12109
  return;
10922
12110
  }
10923
- if (!this.isFilterActive && isLetter(event.key)) {
12111
+ if (event.keyCode === Keys.Tab && this.isActionSheetExpanded) {
12112
+ this.togglePopup(false);
12113
+ return;
12114
+ }
12115
+ if (!this.isFilterActive && isLetter(event.key) && !((_a = this.actionSheetSearchBar) === null || _a === void 0 ? void 0 : _a.onFocus)) {
10924
12116
  this.printableCharacters.next(event.key);
10925
12117
  }
10926
12118
  const eventData = event;
@@ -10968,9 +12160,9 @@ class DropDownTreeComponent {
10968
12160
  this.dataItem = undefined;
10969
12161
  }
10970
12162
  /**
10971
- * Toggles the visibility of the popup
12163
+ * Toggles the visibility of the popup or actionSheet.
10972
12164
  * ([see example]({% slug openstate_ddt %})).
10973
- * If you use the `toggle` method to open or close the popup, the `open` and `close` events will not be fired.
12165
+ * If you use the `toggle` method to open or close the popup or actionSheet, the `open` and `close` events will not be fired.
10974
12166
  *
10975
12167
  * @param open - The state of the popup.
10976
12168
  */
@@ -11080,7 +12272,7 @@ class DropDownTreeComponent {
11080
12272
  * @hidden
11081
12273
  */
11082
12274
  handleFilterInputChange(input) {
11083
- this.filterChange.next(input.value);
12275
+ this.filterChange.next(typeof (input) === 'string' ? input : input.value);
11084
12276
  this.allNodesHidden = this.nodes.every((node, index) => !this.isVisible(node, String(index)));
11085
12277
  }
11086
12278
  /**
@@ -11140,8 +12332,24 @@ class DropDownTreeComponent {
11140
12332
  if (this.popupRef) {
11141
12333
  this._searchableNodes = getSearchableItems(this.treeViewId, this.popupRef.popupElement);
11142
12334
  }
12335
+ if (this.isActionSheetExpanded) {
12336
+ this._searchableNodes = getSearchableItems(this.treeViewId, this.actionSheet.element.nativeElement);
12337
+ }
11143
12338
  });
11144
12339
  }
12340
+ /**
12341
+ * @hidden
12342
+ */
12343
+ onExpand() {
12344
+ this._searchableNodes = getSearchableItems(this.treeViewId, this.actionSheet.element.nativeElement);
12345
+ this.isActionSheetExpanded = true;
12346
+ }
12347
+ /**
12348
+ * @hidden
12349
+ */
12350
+ onCollapse() {
12351
+ this.isActionSheetExpanded = false;
12352
+ }
11145
12353
  /**
11146
12354
  * @hidden
11147
12355
  *
@@ -11176,6 +12384,12 @@ class DropDownTreeComponent {
11176
12384
  return eventArgs.isDefaultPrevented();
11177
12385
  }
11178
12386
  createPopup() {
12387
+ this.windowSize = windowSize();
12388
+ if (this.isAdaptive) {
12389
+ this.openActionSheet();
12390
+ this.cdr.detectChanges();
12391
+ return;
12392
+ }
11179
12393
  const horizontalAlign = this.direction === "rtl" ? "right" : "left";
11180
12394
  const anchorPosition = { horizontal: horizontalAlign, vertical: 'bottom' };
11181
12395
  const popupPosition = { horizontal: horizontalAlign, vertical: 'top' };
@@ -11208,6 +12422,9 @@ class DropDownTreeComponent {
11208
12422
  });
11209
12423
  }
11210
12424
  destroyPopup() {
12425
+ if (this.isActionSheetExpanded) {
12426
+ this.closeActionSheet();
12427
+ }
11211
12428
  if (this.popupRef) {
11212
12429
  this.popupRef.close();
11213
12430
  this.popupRef = null;
@@ -11224,10 +12441,13 @@ class DropDownTreeComponent {
11224
12441
  }
11225
12442
  handleClick(e) {
11226
12443
  // The check is needed otherwise when appended to the component, the popup reopens on click
11227
- // https://github.com/telerik/kendo-angular/issues/3738
11228
- if ((this.popupRef && !this.popupRef.popupElement.contains(e.target))
11229
- || (!this.popupRef && !e.target.className.includes('k-treeview-leaf'))) {
11230
- this.togglePopup(!this.isOpen);
12444
+ // https://github.com/telerik/kendo-angular/issues/3738
12445
+ this.windowSize = windowSize();
12446
+ if (!this.isActionSheetExpanded) {
12447
+ if ((this.popupRef && !this.popupRef.popupElement.contains(e.target))
12448
+ || (!this.popupRef && !e.target.className.includes('k-treeview-leaf'))) {
12449
+ this.togglePopup(!this.isOpen);
12450
+ }
11231
12451
  }
11232
12452
  }
11233
12453
  handleEscape() {
@@ -11297,7 +12517,12 @@ class DropDownTreeComponent {
11297
12517
  }
11298
12518
  event.originalEvent.preventDefault();
11299
12519
  if (this.filterable && this.treeview['navigationService']['activeIndex'] === '0') {
11300
- this.filterInput.nativeElement.focus();
12520
+ if (this.isActionSheetExpanded) {
12521
+ this.actionSheetSearchBar.focus();
12522
+ }
12523
+ else {
12524
+ this.filterInput.nativeElement.focus();
12525
+ }
11301
12526
  }
11302
12527
  })
11303
12528
  ].forEach(sub => this.subs.add(sub));
@@ -11382,9 +12607,30 @@ class DropDownTreeComponent {
11382
12607
  }
11383
12608
  });
11384
12609
  }
12610
+ closeActionSheet() {
12611
+ this.actionSheet.toggle(false);
12612
+ if (this.filterable) {
12613
+ this.actionSheetSearchBar.value = '';
12614
+ this.filterChange.emit('');
12615
+ }
12616
+ this.wrapper.nativeElement.focus();
12617
+ this.closed.emit();
12618
+ }
12619
+ openActionSheet() {
12620
+ this.windowSize = windowSize();
12621
+ this.isActionSheetExpanded = true;
12622
+ this.actionSheet.toggle(true);
12623
+ this.title = setActionSheetTitle(this.wrapper, this.title);
12624
+ this.cdr.detectChanges();
12625
+ updateActionSheetAdaptiveAppearance(this.actionSheet, this.windowSize, this.renderer);
12626
+ this.cdr.detectChanges();
12627
+ this.opened.emit();
12628
+ this.removeTreeViewFromTabOrder();
12629
+ this.filterable && this.actionSheetSearchBar.focus();
12630
+ }
11385
12631
  }
11386
- DropDownTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: DropDownTreeComponent, deps: [{ token: i0.Injector }, { token: i0.ElementRef }, { token: i2.PopupService }, { token: NavigationService }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i1.LocalizationService }, { token: TOUCH_ENABLED, optional: true }], target: i0.ɵɵFactoryTarget.Component });
11387
- DropDownTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: DropDownTreeComponent, selector: "kendo-dropdowntree", inputs: { loading: "loading", clearButton: "clearButton", data: "data", value: "value", textField: "textField", valueField: "valueField", valueDepth: "valueDepth", hasChildren: "hasChildren", fetchChildren: "fetchChildren", placeholder: "placeholder", popupSettings: "popupSettings", dataItem: "dataItem", listHeight: "listHeight", disabled: "disabled", readonly: "readonly", valuePrimitive: "valuePrimitive", tabindex: "tabindex", size: "size", rounded: "rounded", fillMode: "fillMode", itemDisabled: "itemDisabled", isNodeExpanded: "isNodeExpanded", isNodeVisible: "isNodeVisible", loadOnDemand: "loadOnDemand", filterable: "filterable", filter: "filter", focusableId: "focusableId" }, outputs: { open: "open", opened: "opened", close: "close", closed: "closed", nodeExpand: "nodeExpand", nodeCollapse: "nodeCollapse", onFocus: "focus", onBlur: "blur", valueChange: "valueChange", filterChange: "filterChange" }, host: { properties: { "class.k-dropdowntree": "this.hostClasses", "class.k-picker": "this.hostClasses", "attr.aria-invalid": "this.hostAriaInvalid", "class.k-disabled": "this.isDisabled", "attr.disabled": "this.isDisabledAttribute", "class.k-loading": "this.isLoading", "attr.aria-busy": "this.isBusy", "attr.aria-controls": "this.hostAriaControls", "attr.id": "this.id", "attr.dir": "this.direction", "attr.tabindex": "this.hostTabIndex", "attr.role": "this.role", "attr.aria-haspopup": "this.ariaHasPopup", "attr.aria-expanded": "this.isAriaExpanded", "attr.aria-autocomplete": "this.hostAriaAutocomplete", "attr.readonly": "this.isReadonly" } }, providers: [
12632
+ DropDownTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: DropDownTreeComponent, deps: [{ token: i0.Injector }, { token: i0.ElementRef }, { token: i2$1.PopupService }, { token: NavigationService }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i1.LocalizationService }, { token: TOUCH_ENABLED, optional: true }], target: i0.ɵɵFactoryTarget.Component });
12633
+ DropDownTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: DropDownTreeComponent, selector: "kendo-dropdowntree", inputs: { loading: "loading", clearButton: "clearButton", data: "data", value: "value", textField: "textField", valueField: "valueField", valueDepth: "valueDepth", hasChildren: "hasChildren", fetchChildren: "fetchChildren", placeholder: "placeholder", popupSettings: "popupSettings", dataItem: "dataItem", listHeight: "listHeight", disabled: "disabled", readonly: "readonly", valuePrimitive: "valuePrimitive", tabindex: "tabindex", size: "size", rounded: "rounded", fillMode: "fillMode", itemDisabled: "itemDisabled", isNodeExpanded: "isNodeExpanded", isNodeVisible: "isNodeVisible", loadOnDemand: "loadOnDemand", filterable: "filterable", filter: "filter", focusableId: "focusableId", adaptiveMode: "adaptiveMode", title: "title", subtitle: "subtitle" }, outputs: { open: "open", opened: "opened", close: "close", closed: "closed", nodeExpand: "nodeExpand", nodeCollapse: "nodeCollapse", onFocus: "focus", onBlur: "blur", valueChange: "valueChange", filterChange: "filterChange" }, host: { properties: { "class.k-dropdowntree": "this.hostClasses", "class.k-picker": "this.hostClasses", "attr.readonly": "this.isReadonly", "attr.aria-invalid": "this.hostAriaInvalid", "class.k-disabled": "this.isDisabled", "attr.disabled": "this.isDisabledAttribute", "class.k-loading": "this.isLoading", "attr.aria-busy": "this.isBusy", "attr.aria-controls": "this.hostAriaControls", "attr.id": "this.id", "attr.dir": "this.direction", "attr.tabindex": "this.hostTabIndex", "attr.role": "this.role", "attr.aria-haspopup": "this.ariaHasPopup", "attr.aria-expanded": "this.isAriaExpanded", "attr.aria-autocomplete": "this.hostAriaAutocomplete" } }, providers: [
11388
12634
  DataService,
11389
12635
  SelectionService,
11390
12636
  NavigationService,
@@ -11411,7 +12657,7 @@ DropDownTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
11411
12657
  provide: ExpandableComponent,
11412
12658
  useExisting: forwardRef(() => DropDownTreeComponent)
11413
12659
  }
11414
- ], queries: [{ propertyName: "noDataTemplate", first: true, predicate: NoDataTemplateDirective, descendants: true }, { propertyName: "headerTemplate", first: true, predicate: HeaderTemplateDirective, descendants: true }, { propertyName: "footerTemplate", first: true, predicate: FooterTemplateDirective, descendants: true }, { propertyName: "nodeTemplate", first: true, predicate: NodeTemplateDirective, descendants: true }, { propertyName: "valueTemplate", first: true, predicate: ValueTemplateDirective, descendants: true }], viewQueries: [{ propertyName: "popupTemplate", first: true, predicate: ["popupTemplate"], descendants: true, static: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "treeview", first: true, predicate: ["treeview"], descendants: true }, { propertyName: "filterInput", first: true, predicate: ["filterInput"], descendants: true }], exportAs: ["kendoDropDownTree"], usesOnChanges: true, ngImport: i0, template: `
12660
+ ], queries: [{ propertyName: "noDataTemplate", first: true, predicate: NoDataTemplateDirective, descendants: true }, { propertyName: "headerTemplate", first: true, predicate: HeaderTemplateDirective, descendants: true }, { propertyName: "footerTemplate", first: true, predicate: FooterTemplateDirective, descendants: true }, { propertyName: "nodeTemplate", first: true, predicate: NodeTemplateDirective, descendants: true }, { propertyName: "valueTemplate", first: true, predicate: ValueTemplateDirective, descendants: true }], viewQueries: [{ propertyName: "responsiveRendererComponent", first: true, predicate: ResponsiveRendererComponent, descendants: true }, { propertyName: "popupTemplate", first: true, predicate: ["popupTemplate"], descendants: true, static: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "treeview", first: true, predicate: ["treeview"], descendants: true }, { propertyName: "filterInput", first: true, predicate: ["filterInput"], descendants: true }], exportAs: ["kendoDropDownTree"], usesOnChanges: true, ngImport: i0, template: `
11415
12661
  <ng-container kendoDropDownTreeLocalizedMessages
11416
12662
  i18n-noDataText="kendo.dropdowntree.noDataText|The text displayed in the popup when there are no items"
11417
12663
  noDataText="NO DATA FOUND"
@@ -11475,8 +12721,26 @@ DropDownTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
11475
12721
  </kendo-icon-wrapper>
11476
12722
  </button>
11477
12723
  <ng-template #popupTemplate>
11478
- <span
11479
- *ngIf="filterable"
12724
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
12725
+ </ng-template>
12726
+ <ng-container #container></ng-container>
12727
+
12728
+ <!--adaptive rendering-->
12729
+ <responsive-renderer
12730
+ [sharedPopupActionSheetTemplate]="sharedPopupActionSheetTemplate"
12731
+ [isActionSheetExpanded]="isActionSheetExpanded"
12732
+ [title]="title"
12733
+ [showTextInput]="filterable"
12734
+ [subtitle]="subtitle"
12735
+ (closePopup)="togglePopup(false)"
12736
+ (onExpand)="onExpand()"
12737
+ (onCollapse)="onCollapse()"
12738
+ (textInputChange)="handleFilterInputChange($event)"
12739
+ >
12740
+ </responsive-renderer>
12741
+ <ng-template #sharedPopupActionSheetTemplate>
12742
+ <span
12743
+ *ngIf="filterable && !isActionSheetExpanded"
11480
12744
  class="k-list-filter"
11481
12745
  >
11482
12746
  <span
@@ -11562,8 +12826,9 @@ DropDownTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
11562
12826
  </ng-template>
11563
12827
  </div>
11564
12828
  </ng-template>
11565
- <ng-container #container></ng-container>
11566
- `, isInline: true, components: [{ type: i8.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: i1$1.TreeViewComponent, selector: "kendo-treeview", inputs: ["filterInputPlaceholder", "expandDisabledNodes", "animate", "nodeTemplate", "loadMoreButtonTemplate", "trackBy", "nodes", "textField", "hasChildren", "isChecked", "isDisabled", "isExpanded", "isSelected", "isVisible", "navigable", "children", "loadOnDemand", "filterable", "filter", "size", "disableParentNodesOnly"], outputs: ["childrenLoaded", "blur", "focus", "expand", "collapse", "nodeDragStart", "nodeDrag", "filterStateChange", "nodeDrop", "nodeDragEnd", "addItem", "removeItem", "checkedChange", "selectionChange", "filterChange", "nodeClick", "nodeDblClick"], exportAs: ["kendoTreeView"] }], directives: [{ type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: i12.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i13.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: FilterInputDirective, selector: "[filterInput]", inputs: ["filterInput"] }, { type: i13.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i13.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i10.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: i1$1.SelectDirective, selector: "[kendoTreeViewSelectable]", inputs: ["isSelected", "selectBy", "kendoTreeViewSelectable", "selectedKeys"], outputs: ["selectedKeysChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12829
+
12830
+ <kendo-resize-sensor *ngIf="isOpen || isAdaptiveModeEnabled" (resize)="onResize()"></kendo-resize-sensor>
12831
+ `, isInline: true, components: [{ type: i8.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: ResponsiveRendererComponent, selector: "responsive-renderer", inputs: ["title", "showActionButtons", "subtitle", "size", "showTextInput", "sharedPopupActionSheetTemplate", "isActionSheetExpanded", "text", "placeholder"], outputs: ["closePopup", "textInputChange", "navigate", "onExpand", "onCollapse", "onApply", "onCancel"] }, { type: i1$1.TreeViewComponent, selector: "kendo-treeview", inputs: ["filterInputPlaceholder", "expandDisabledNodes", "animate", "nodeTemplate", "loadMoreButtonTemplate", "trackBy", "nodes", "textField", "hasChildren", "isChecked", "isDisabled", "isExpanded", "isSelected", "isVisible", "navigable", "children", "loadOnDemand", "filterable", "filter", "size", "disableParentNodesOnly"], outputs: ["childrenLoaded", "blur", "focus", "expand", "collapse", "nodeDragStart", "nodeDrag", "filterStateChange", "nodeDrop", "nodeDragEnd", "addItem", "removeItem", "checkedChange", "selectionChange", "filterChange", "nodeClick", "nodeDblClick"], exportAs: ["kendoTreeView"] }, { type: i9.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }], directives: [{ type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: i13.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i13.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i14.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: FilterInputDirective, selector: "[filterInput]", inputs: ["filterInput"] }, { type: i14.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i14.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i9.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: i1$1.SelectDirective, selector: "[kendoTreeViewSelectable]", inputs: ["isSelected", "selectBy", "kendoTreeViewSelectable", "selectedKeys"], outputs: ["selectedKeysChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
11567
12832
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: DropDownTreeComponent, decorators: [{
11568
12833
  type: Component,
11569
12834
  args: [{
@@ -11661,8 +12926,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11661
12926
  </kendo-icon-wrapper>
11662
12927
  </button>
11663
12928
  <ng-template #popupTemplate>
11664
- <span
11665
- *ngIf="filterable"
12929
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
12930
+ </ng-template>
12931
+ <ng-container #container></ng-container>
12932
+
12933
+ <!--adaptive rendering-->
12934
+ <responsive-renderer
12935
+ [sharedPopupActionSheetTemplate]="sharedPopupActionSheetTemplate"
12936
+ [isActionSheetExpanded]="isActionSheetExpanded"
12937
+ [title]="title"
12938
+ [showTextInput]="filterable"
12939
+ [subtitle]="subtitle"
12940
+ (closePopup)="togglePopup(false)"
12941
+ (onExpand)="onExpand()"
12942
+ (onCollapse)="onCollapse()"
12943
+ (textInputChange)="handleFilterInputChange($event)"
12944
+ >
12945
+ </responsive-renderer>
12946
+ <ng-template #sharedPopupActionSheetTemplate>
12947
+ <span
12948
+ *ngIf="filterable && !isActionSheetExpanded"
11666
12949
  class="k-list-filter"
11667
12950
  >
11668
12951
  <span
@@ -11748,23 +13031,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11748
13031
  </ng-template>
11749
13032
  </div>
11750
13033
  </ng-template>
11751
- <ng-container #container></ng-container>
13034
+
13035
+ <kendo-resize-sensor *ngIf="isOpen || isAdaptiveModeEnabled" (resize)="onResize()"></kendo-resize-sensor>
11752
13036
  `,
11753
13037
  changeDetection: ChangeDetectionStrategy.OnPush
11754
13038
  }]
11755
13039
  }], ctorParameters: function () {
11756
- return [{ type: i0.Injector }, { type: i0.ElementRef }, { type: i2.PopupService }, { type: NavigationService }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i1.LocalizationService }, { type: undefined, decorators: [{
13040
+ return [{ type: i0.Injector }, { type: i0.ElementRef }, { type: i2$1.PopupService }, { type: NavigationService }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i1.LocalizationService }, { type: undefined, decorators: [{
11757
13041
  type: Optional
11758
13042
  }, {
11759
13043
  type: Inject,
11760
13044
  args: [TOUCH_ENABLED]
11761
13045
  }] }];
11762
- }, propDecorators: { hostClasses: [{
13046
+ }, propDecorators: { responsiveRendererComponent: [{
13047
+ type: ViewChild,
13048
+ args: [ResponsiveRendererComponent]
13049
+ }], hostClasses: [{
11763
13050
  type: HostBinding,
11764
13051
  args: ['class.k-dropdowntree']
11765
13052
  }, {
11766
13053
  type: HostBinding,
11767
13054
  args: ['class.k-picker']
13055
+ }], isReadonly: [{
13056
+ type: HostBinding,
13057
+ args: ['attr.readonly']
11768
13058
  }], hostAriaInvalid: [{
11769
13059
  type: HostBinding,
11770
13060
  args: ['attr.aria-invalid']
@@ -11804,9 +13094,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11804
13094
  }], hostAriaAutocomplete: [{
11805
13095
  type: HostBinding,
11806
13096
  args: ['attr.aria-autocomplete']
11807
- }], isReadonly: [{
11808
- type: HostBinding,
11809
- args: ['attr.readonly']
11810
13097
  }], noDataTemplate: [{
11811
13098
  type: ContentChild,
11812
13099
  args: [NoDataTemplateDirective, { static: false }]
@@ -11910,6 +13197,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11910
13197
  type: Input
11911
13198
  }], focusableId: [{
11912
13199
  type: Input
13200
+ }], adaptiveMode: [{
13201
+ type: Input
13202
+ }], title: [{
13203
+ type: Input
13204
+ }], subtitle: [{
13205
+ type: Input
11913
13206
  }] } });
11914
13207
 
11915
13208
  /**
@@ -12364,6 +13657,10 @@ class MultiSelectTreeComponent {
12364
13657
  this.cdr = cdr;
12365
13658
  this.lookup = lookup;
12366
13659
  this.touchEnabled = touchEnabled;
13660
+ /**
13661
+ * @hidden
13662
+ */
13663
+ this.animationDuration = animationDuration;
12367
13664
  /**
12368
13665
  * @hidden
12369
13666
  */
@@ -12376,6 +13673,23 @@ class MultiSelectTreeComponent {
12376
13673
  this.treeViewId = `k-${guid$1()}`;
12377
13674
  this.role = 'combobox';
12378
13675
  this.ariaHasPopup = 'tree';
13676
+ /**
13677
+ * Enables or disables the adaptive mode. By default the adaptive rendering is disabled.
13678
+ */
13679
+ this.adaptiveMode = 'none';
13680
+ /**
13681
+ * Sets the title of the ActionSheet that is rendered instead of the Popup when using small screen devices.
13682
+ * By default the ActionSheet title uses the text provided for the label of the AutoComplete.
13683
+ */
13684
+ this.title = '';
13685
+ /**
13686
+ * @hidden
13687
+ */
13688
+ this.windowSize = 'large';
13689
+ /**
13690
+ * @hidden
13691
+ */
13692
+ this.isActionSheetExpanded = false;
12379
13693
  /**
12380
13694
  * Sets the levels in the data set where the values can be found when `valueField` is an Array.
12381
13695
  * The field serves to correctly allocate a data item used when the MultiSelectTree is initialized with a value.
@@ -12384,14 +13698,8 @@ class MultiSelectTreeComponent {
12384
13698
  /**
12385
13699
  * The hint which is displayed when the component is empty.
12386
13700
  */
12387
- this.placeholder = "";
12388
- /**
12389
- * Sets the height of the options list. By default, `listHeight` is 200px.
12390
- *
12391
- * > The `listHeight` property affects only the list of options and not the whole popup container.
12392
- * > To set the height of the popup container, use `popupSettings.height`.
12393
- */
12394
- this.listHeight = 200;
13701
+ this.placeholder = '';
13702
+ this._listHeight = 200;
12395
13703
  /**
12396
13704
  * Sets the disabled state of the component.
12397
13705
  */
@@ -12534,6 +13842,7 @@ class MultiSelectTreeComponent {
12534
13842
  this._popupSettings = DEFAULT_POPUP_SETTINGS;
12535
13843
  this._checkableSettings = DEFAULT_CHECKABLE_SETTINGS;
12536
13844
  this._isFocused = false;
13845
+ this._initiallyCheckedItems = [];
12537
13846
  this._size = 'medium';
12538
13847
  this._rounded = 'medium';
12539
13848
  this._fillMode = 'solid';
@@ -12594,8 +13903,48 @@ class MultiSelectTreeComponent {
12594
13903
  /**
12595
13904
  * @hidden
12596
13905
  */
12597
- handleKeydown(event) {
12598
- var _a;
13906
+ onFilterChange(text) {
13907
+ if (this.filterable) {
13908
+ this.filterChange.emit(text);
13909
+ }
13910
+ }
13911
+ /**
13912
+ * @hidden
13913
+ */
13914
+ onExpand() {
13915
+ this._searchableNodes = getSearchableItems(this.treeViewId, this.actionSheet.element.nativeElement);
13916
+ this.isActionSheetExpanded = true;
13917
+ }
13918
+ /**
13919
+ * @hidden
13920
+ */
13921
+ onCollapse() {
13922
+ this.isActionSheetExpanded = false;
13923
+ }
13924
+ /**
13925
+ * Sets the subtitle of the ActionSheet that is rendered instead of the Popup when using small screen devices.
13926
+ * By default the ActionSheet subtitle uses the text provided for the `placeholder` of the AutoComplete.
13927
+ */
13928
+ set subtitle(_subtitle) {
13929
+ this._subtitle = _subtitle;
13930
+ }
13931
+ get subtitle() {
13932
+ return this._subtitle || this.placeholder;
13933
+ }
13934
+ /**
13935
+ * @hidden
13936
+ */
13937
+ get isAdaptiveModeEnabled() {
13938
+ return this.adaptiveMode === 'auto';
13939
+ }
13940
+ /**
13941
+ * @hidden
13942
+ */
13943
+ handleKeydown(event, input) {
13944
+ var _a, _b;
13945
+ if (input) {
13946
+ event.stopImmediatePropagation();
13947
+ }
12599
13948
  const deleteTag = this.isWrapperActive && event.keyCode === Keys.Backspace && this.tags.length > 0;
12600
13949
  if (deleteTag) {
12601
13950
  this.handleBackspace();
@@ -12604,7 +13953,7 @@ class MultiSelectTreeComponent {
12604
13953
  if (this.disabled || this.readonly) {
12605
13954
  return;
12606
13955
  }
12607
- if (!this.isFilterActive && isLetter(event.key)) {
13956
+ if (!this.isFilterActive && isLetter(event.key) && !((_a = this.actionSheetSearchBar) === null || _a === void 0 ? void 0 : _a.onFocus)) {
12608
13957
  this.printableCharacters.next(event.key);
12609
13958
  }
12610
13959
  const eventData = event;
@@ -12616,9 +13965,29 @@ class MultiSelectTreeComponent {
12616
13965
  }
12617
13966
  if (this.isOpen && action === NavigationAction.Enter) {
12618
13967
  const spaceKeyDownEvent = new KeyboardEvent('keydown', { 'key': ' ', 'code': 'Space', 'keyCode': 32, 'which': 32 });
12619
- (_a = this.treeview) === null || _a === void 0 ? void 0 : _a.element.nativeElement.dispatchEvent(spaceKeyDownEvent);
13968
+ (_b = this.treeview) === null || _b === void 0 ? void 0 : _b.element.nativeElement.dispatchEvent(spaceKeyDownEvent);
12620
13969
  }
12621
13970
  }
13971
+ /**
13972
+ * @hidden
13973
+ */
13974
+ get actionSheet() {
13975
+ var _a;
13976
+ return (_a = this.responsiveRendererComponent) === null || _a === void 0 ? void 0 : _a.actionSheet;
13977
+ }
13978
+ /**
13979
+ * @hidden
13980
+ */
13981
+ get actionSheetSearchBar() {
13982
+ var _a;
13983
+ return (_a = this.responsiveRendererComponent) === null || _a === void 0 ? void 0 : _a.actionSheetSearchBar;
13984
+ }
13985
+ /**
13986
+ * @hidden
13987
+ */
13988
+ get isAdaptive() {
13989
+ return this.isAdaptiveModeEnabled && this.windowSize !== 'large';
13990
+ }
12622
13991
  set treeview(treeview) {
12623
13992
  this._treeview = treeview;
12624
13993
  if (treeview) {
@@ -12804,6 +14173,24 @@ class MultiSelectTreeComponent {
12804
14173
  };
12805
14174
  });
12806
14175
  }
14176
+ /**
14177
+ * Sets the height of the options list in the popup. By default, `listHeight` is 200px.
14178
+ *
14179
+ * > The `listHeight` property affects only the list of options and not the whole popup container.
14180
+ * > To set the height of the popup container, use `popupSettings.height`.
14181
+ *
14182
+ * > When using `adaptiveMode` and the screen size is `small` or `medium` the `listHeight` property is set to null.
14183
+ */
14184
+ set listHeight(_listHeight) {
14185
+ this._listHeight = _listHeight;
14186
+ }
14187
+ ;
14188
+ get listHeight() {
14189
+ if (this.isAdaptive) {
14190
+ return;
14191
+ }
14192
+ return this._listHeight;
14193
+ }
12807
14194
  /**
12808
14195
  * @hidden
12809
14196
  */
@@ -12822,10 +14209,10 @@ class MultiSelectTreeComponent {
12822
14209
  return this._isFocused;
12823
14210
  }
12824
14211
  /**
12825
- * Returns the current open state of the popup.
14212
+ * Returns the current open state. Returns `true` if the popup or actionSheet is open.
12826
14213
  */
12827
14214
  get isOpen() {
12828
- return isPresent(this.popupRef);
14215
+ return isTruthy(isPresent(this.popupRef) || this.isActionSheetExpanded);
12829
14216
  }
12830
14217
  get width() {
12831
14218
  const wrapperWidth = this.wrapper.nativeElement.offsetWidth;
@@ -12936,6 +14323,23 @@ class MultiSelectTreeComponent {
12936
14323
  get isCheckAllActive() {
12937
14324
  return this.checkAllInput && document.activeElement === this.checkAllInput.nativeElement;
12938
14325
  }
14326
+ /**
14327
+ * @hidden
14328
+ */
14329
+ onResize() {
14330
+ if (this.isAdaptiveModeEnabled && this.windowSize !== windowSize()) {
14331
+ if (this.isOpen) {
14332
+ this.togglePopup(false);
14333
+ }
14334
+ this.windowSize = windowSize();
14335
+ }
14336
+ if (this.isOpen && !this.isActionSheetExpanded) {
14337
+ const popupWrapper = this.popupRef.popupElement;
14338
+ const { min, max } = this.width;
14339
+ popupWrapper.style.minWidth = min;
14340
+ popupWrapper.style.width = max;
14341
+ }
14342
+ }
12939
14343
  ngOnInit() {
12940
14344
  this.subs.add(this.printableCharacters.pipe(tap((char) => {
12941
14345
  this._typedValue += char;
@@ -12954,10 +14358,14 @@ class MultiSelectTreeComponent {
12954
14358
  this.cdr.markForCheck();
12955
14359
  }));
12956
14360
  this.setComponentClasses();
14361
+ this._initiallyCheckedItems = [...this.checkedItems];
12957
14362
  }
12958
14363
  ngAfterViewInit() {
14364
+ var _a;
14365
+ this.windowSize = windowSize();
12959
14366
  this.subs.add(this.renderer.listen(this.wrapper.nativeElement, 'click', this.handleClick.bind(this)));
12960
14367
  this.subs.add(this.renderer.listen(this.wrapper.nativeElement, 'keydown', this.handleKeydown.bind(this)));
14368
+ this.renderer.setAttribute((_a = this.actionSheet) === null || _a === void 0 ? void 0 : _a.element.nativeElement, 'style', '--kendo-actionsheet-height: 60vh; --kendo-actionsheet-max-height: none');
12961
14369
  }
12962
14370
  /**
12963
14371
  * @hidden
@@ -12996,6 +14404,23 @@ class MultiSelectTreeComponent {
12996
14404
  ngAfterContentChecked() {
12997
14405
  this.verifySettings();
12998
14406
  }
14407
+ /**
14408
+ * @hidden
14409
+ */
14410
+ applyValue() {
14411
+ this.value = this._tempValue;
14412
+ this._initiallyCheckedItems = [...this.checkedItems];
14413
+ this.emitValueChange(this.value);
14414
+ this.setTags();
14415
+ this.toggle(false);
14416
+ }
14417
+ /**
14418
+ * @hidden
14419
+ */
14420
+ cancelValue() {
14421
+ this.checkedItems = [...this._initiallyCheckedItems];
14422
+ this.togglePopup(false);
14423
+ }
12999
14424
  ngAfterContentInit() {
13000
14425
  this.isContentInit = true;
13001
14426
  // Still need to keep the call of 'registerLookupItems()' from ngAfterContentInit in the cases when the data is passed initially
@@ -13052,7 +14477,7 @@ class MultiSelectTreeComponent {
13052
14477
  this.valueDepth = [];
13053
14478
  }
13054
14479
  /**
13055
- * Toggles the visibility of the popup
14480
+ * Toggles the visibility of the popup or actionSheet
13056
14481
  * ([see example]({% slug openstate_multiselecttree %})).
13057
14482
  * If you use the `toggle` method to open or close the popup, the `open` and `close` events will not be fired.
13058
14483
  *
@@ -13097,19 +14522,21 @@ class MultiSelectTreeComponent {
13097
14522
  * @hidden
13098
14523
  */
13099
14524
  handleBlur(e) {
13100
- const relatedTarget = e && e.relatedTarget;
13101
- if (this.wrapper.nativeElement.contains(relatedTarget) ||
13102
- (this.isOpen && this.popupRef.popupElement.contains(relatedTarget))) {
13103
- return;
13104
- }
13105
- this.isFocused = false;
13106
- this.togglePopup(false);
13107
- if (hasObservers(this.onBlur) ||
13108
- isUntouched(this.wrapper.nativeElement)) {
13109
- this._zone.run(() => {
13110
- this.onBlur.emit();
13111
- this.onTouchedCallback();
13112
- });
14525
+ if (!this.isActionSheetExpanded) {
14526
+ const relatedTarget = e && e.relatedTarget;
14527
+ if (this.wrapper.nativeElement.contains(relatedTarget) ||
14528
+ (this.isOpen && this.popupRef.popupElement.contains(relatedTarget))) {
14529
+ return;
14530
+ }
14531
+ this.isFocused = false;
14532
+ this.togglePopup(false);
14533
+ if (hasObservers(this.onBlur) ||
14534
+ isUntouched(this.wrapper.nativeElement)) {
14535
+ this._zone.run(() => {
14536
+ this.onBlur.emit();
14537
+ this.onTouchedCallback();
14538
+ });
14539
+ }
13113
14540
  }
13114
14541
  }
13115
14542
  /**
@@ -13336,6 +14763,12 @@ class MultiSelectTreeComponent {
13336
14763
  return eventArgs.isDefaultPrevented();
13337
14764
  }
13338
14765
  createPopup() {
14766
+ this.windowSize = windowSize();
14767
+ if (this.isAdaptive) {
14768
+ this.openActionSheet();
14769
+ this.cdr.detectChanges();
14770
+ return;
14771
+ }
13339
14772
  const horizontalAlign = this.direction === "rtl" ? "right" : "left";
13340
14773
  const anchorPosition = { horizontal: horizontalAlign, vertical: 'bottom' };
13341
14774
  const popupPosition = { horizontal: horizontalAlign, vertical: 'top' };
@@ -13369,6 +14802,9 @@ class MultiSelectTreeComponent {
13369
14802
  });
13370
14803
  }
13371
14804
  destroyPopup() {
14805
+ if (this.isActionSheetExpanded) {
14806
+ this.closeActionSheet();
14807
+ }
13372
14808
  if (this.popupRef) {
13373
14809
  this.popupRef.close();
13374
14810
  this.popupRef = null;
@@ -13387,7 +14823,7 @@ class MultiSelectTreeComponent {
13387
14823
  handleClick(e) {
13388
14824
  // The check is needed otherwise when appended to the component, the popup reopens on click
13389
14825
  // https://github.com/telerik/kendo-angular/issues/3738
13390
- if ((this.popupRef && this.popupRef.popupElement.contains(e.target))) {
14826
+ if ((this.popupRef && this.popupRef.popupElement.contains(e.target)) || this.isActionSheetExpanded) {
13391
14827
  return;
13392
14828
  }
13393
14829
  this.togglePopup(!this.isOpen);
@@ -13447,7 +14883,9 @@ class MultiSelectTreeComponent {
13447
14883
  this.handleBlur(event);
13448
14884
  }
13449
14885
  handleTabKey() {
13450
- this.focus();
14886
+ if (!this.isActionSheetExpanded) {
14887
+ this.focus();
14888
+ }
13451
14889
  if (this.isOpen) {
13452
14890
  this.treeview.blur();
13453
14891
  this.removeTreeViewFromTabOrder();
@@ -13475,7 +14913,7 @@ class MultiSelectTreeComponent {
13475
14913
  }
13476
14914
  else if (this.isCheckAllActive || isFirstNodeActive) {
13477
14915
  if (this.filterable) {
13478
- this.filterInput.nativeElement.focus();
14916
+ this.isActionSheetExpanded ? this.actionSheetSearchBar.focus() : this.filterInput.nativeElement.focus();
13479
14917
  }
13480
14918
  else {
13481
14919
  this.focus();
@@ -13568,7 +15006,9 @@ class MultiSelectTreeComponent {
13568
15006
  }
13569
15007
  setState() {
13570
15008
  if (isPresent(this.dataItems) && isPresent(this.valueField)) {
13571
- this.setTags();
15009
+ if (!this.isActionSheetExpanded) {
15010
+ this.setTags();
15011
+ }
13572
15012
  this.checkedItems = this.dataItems.slice();
13573
15013
  }
13574
15014
  this.cdr.markForCheck();
@@ -13582,8 +15022,13 @@ class MultiSelectTreeComponent {
13582
15022
  const newValue = this.valuePrimitive ?
13583
15023
  value.map(item => valueFrom(item, this.valueField)) :
13584
15024
  value.map(item => item.dataItem);
13585
- this.value = newValue;
13586
- this.emitValueChange(this.value);
15025
+ if (this.isActionSheetExpanded) {
15026
+ this._tempValue = newValue.slice();
15027
+ }
15028
+ else {
15029
+ this.value = newValue;
15030
+ this.emitValueChange(this.value);
15031
+ }
13587
15032
  }
13588
15033
  /**
13589
15034
  * @hidden
@@ -13593,6 +15038,9 @@ class MultiSelectTreeComponent {
13593
15038
  if (this.popupRef) {
13594
15039
  this._searchableNodes = getSearchableItems(this.treeViewId, this.popupRef.popupElement);
13595
15040
  }
15041
+ if (this.isActionSheetExpanded) {
15042
+ this._searchableNodes = getSearchableItems(this.treeViewId, this.actionSheet.element.nativeElement);
15043
+ }
13596
15044
  });
13597
15045
  }
13598
15046
  /**
@@ -13657,9 +15105,28 @@ class MultiSelectTreeComponent {
13657
15105
  });
13658
15106
  }
13659
15107
  }
15108
+ closeActionSheet() {
15109
+ this.wrapper.nativeElement.focus();
15110
+ this.actionSheet.toggle(false);
15111
+ if (this.filterable) {
15112
+ this.actionSheetSearchBar.value = '';
15113
+ this.filterChange.emit('');
15114
+ }
15115
+ this.closed.emit();
15116
+ }
15117
+ openActionSheet() {
15118
+ this.windowSize = windowSize();
15119
+ this.actionSheet.toggle(true);
15120
+ this.title = setActionSheetTitle(this.wrapper, this.title);
15121
+ this.cdr.detectChanges();
15122
+ updateActionSheetAdaptiveAppearance(this.actionSheet, this.windowSize, this.renderer);
15123
+ this.cdr.detectChanges();
15124
+ this.opened.emit();
15125
+ this.filterable && this.actionSheetSearchBar.focus();
15126
+ }
13660
15127
  }
13661
- MultiSelectTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MultiSelectTreeComponent, deps: [{ token: i0.Injector }, { token: i0.ElementRef }, { token: i2.PopupService }, { token: i0.Renderer2 }, { token: NavigationService }, { token: i0.NgZone }, { token: i1.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: MultiSelectTreeLookupService }, { token: TOUCH_ENABLED, optional: true }], target: i0.ɵɵFactoryTarget.Component });
13662
- MultiSelectTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: MultiSelectTreeComponent, selector: "kendo-multiselecttree", inputs: { tabindex: "tabindex", size: "size", rounded: "rounded", fillMode: "fillMode", popupSettings: "popupSettings", checkableSettings: "checkableSettings", data: "data", value: "value", dataItems: "dataItems", textField: "textField", valueField: "valueField", valueDepth: "valueDepth", loading: "loading", placeholder: "placeholder", listHeight: "listHeight", disabled: "disabled", readonly: "readonly", valuePrimitive: "valuePrimitive", loadOnDemand: "loadOnDemand", focusableId: "focusableId", clearButton: "clearButton", filterable: "filterable", checkAll: "checkAll", hasChildren: "hasChildren", fetchChildren: "fetchChildren", isNodeExpanded: "isNodeExpanded", isNodeVisible: "isNodeVisible", itemDisabled: "itemDisabled", tagMapper: "tagMapper" }, outputs: { onFocus: "focus", onBlur: "blur", open: "open", opened: "opened", close: "close", closed: "closed", nodeExpand: "nodeExpand", nodeCollapse: "nodeCollapse", valueChange: "valueChange", removeTag: "removeTag", filterChange: "filterChange" }, host: { properties: { "class.k-multiselect-tree": "this.hostClasses", "class.k-input": "this.hostClasses", "class.k-disabled": "this.isDisabled", "attr.aria-disabled": "this.isDisabled", "attr.aria-controls": "this.hostAriaControls", "attr.aria-autocomplete": "this.hostAriaAutocomplete", "class.k-loading": "this.isLoading", "attr.aria-invalid": "this.hostAriaInvalid", "attr.aria-busy": "this.isBusy", "attr.id": "this.id", "attr.dir": "this.direction", "attr.tabindex": "this.hostTabIndex", "attr.role": "this.role", "attr.aria-expanded": "this.isAriaExpanded", "attr.aria-haspopup": "this.ariaHasPopup", "attr.readonly": "this.isReadonly", "attr.aria-describedby": "this.ariaDescribedBy", "attr.aria-activedescendant": "this.ariaActiveDescendant" } }, providers: [
15128
+ MultiSelectTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MultiSelectTreeComponent, deps: [{ token: i0.Injector }, { token: i0.ElementRef }, { token: i2$1.PopupService }, { token: i0.Renderer2 }, { token: NavigationService }, { token: i0.NgZone }, { token: i1.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: MultiSelectTreeLookupService }, { token: TOUCH_ENABLED, optional: true }], target: i0.ɵɵFactoryTarget.Component });
15129
+ MultiSelectTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: MultiSelectTreeComponent, selector: "kendo-multiselecttree", inputs: { adaptiveMode: "adaptiveMode", title: "title", subtitle: "subtitle", tabindex: "tabindex", size: "size", rounded: "rounded", fillMode: "fillMode", popupSettings: "popupSettings", checkableSettings: "checkableSettings", data: "data", value: "value", dataItems: "dataItems", textField: "textField", valueField: "valueField", valueDepth: "valueDepth", loading: "loading", placeholder: "placeholder", listHeight: "listHeight", disabled: "disabled", readonly: "readonly", valuePrimitive: "valuePrimitive", loadOnDemand: "loadOnDemand", focusableId: "focusableId", clearButton: "clearButton", filterable: "filterable", checkAll: "checkAll", hasChildren: "hasChildren", fetchChildren: "fetchChildren", isNodeExpanded: "isNodeExpanded", isNodeVisible: "isNodeVisible", itemDisabled: "itemDisabled", tagMapper: "tagMapper" }, outputs: { onFocus: "focus", onBlur: "blur", open: "open", opened: "opened", close: "close", closed: "closed", nodeExpand: "nodeExpand", nodeCollapse: "nodeCollapse", valueChange: "valueChange", removeTag: "removeTag", filterChange: "filterChange" }, host: { properties: { "class.k-multiselect-tree": "this.hostClasses", "class.k-input": "this.hostClasses", "class.k-disabled": "this.isDisabled", "attr.aria-disabled": "this.isDisabled", "attr.aria-controls": "this.hostAriaControls", "attr.aria-autocomplete": "this.hostAriaAutocomplete", "class.k-loading": "this.isLoading", "attr.aria-invalid": "this.hostAriaInvalid", "attr.aria-busy": "this.isBusy", "attr.id": "this.id", "attr.dir": "this.direction", "attr.tabindex": "this.hostTabIndex", "attr.role": "this.role", "attr.aria-expanded": "this.isAriaExpanded", "attr.aria-haspopup": "this.ariaHasPopup", "attr.readonly": "this.isReadonly", "attr.aria-describedby": "this.ariaDescribedBy", "attr.aria-activedescendant": "this.ariaActiveDescendant" } }, providers: [
13663
15130
  LocalizationService,
13664
15131
  NavigationService,
13665
15132
  DataService,
@@ -13687,7 +15154,7 @@ MultiSelectTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
13687
15154
  provide: KendoInput,
13688
15155
  useExisting: forwardRef(() => MultiSelectTreeComponent)
13689
15156
  }
13690
- ], queries: [{ propertyName: "headerTemplate", first: true, predicate: HeaderTemplateDirective, descendants: true }, { propertyName: "footerTemplate", first: true, predicate: FooterTemplateDirective, descendants: true }, { propertyName: "nodeTemplate", first: true, predicate: NodeTemplateDirective, descendants: true }, { propertyName: "noDataTemplate", first: true, predicate: NoDataTemplateDirective, descendants: true }, { propertyName: "tagTemplate", first: true, predicate: TagTemplateDirective, descendants: true }, { propertyName: "groupTagTemplate", first: true, predicate: GroupTagTemplateDirective, descendants: true }], viewQueries: [{ propertyName: "popupTemplate", first: true, predicate: ["popupTemplate"], descendants: true, static: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "treeview", first: true, predicate: ["treeview"], descendants: true }, { propertyName: "filterInput", first: true, predicate: ["filterInput"], descendants: true }, { propertyName: "checkAllInput", first: true, predicate: ["checkAllInput"], descendants: true }], exportAs: ["kendoMultiSelectTree"], usesOnChanges: true, ngImport: i0, template: `
15157
+ ], queries: [{ propertyName: "headerTemplate", first: true, predicate: HeaderTemplateDirective, descendants: true }, { propertyName: "footerTemplate", first: true, predicate: FooterTemplateDirective, descendants: true }, { propertyName: "nodeTemplate", first: true, predicate: NodeTemplateDirective, descendants: true }, { propertyName: "noDataTemplate", first: true, predicate: NoDataTemplateDirective, descendants: true }, { propertyName: "tagTemplate", first: true, predicate: TagTemplateDirective, descendants: true }, { propertyName: "groupTagTemplate", first: true, predicate: GroupTagTemplateDirective, descendants: true }], viewQueries: [{ propertyName: "responsiveRendererComponent", first: true, predicate: ResponsiveRendererComponent, descendants: true }, { propertyName: "popupTemplate", first: true, predicate: ["popupTemplate"], descendants: true, static: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "treeview", first: true, predicate: ["treeview"], descendants: true }, { propertyName: "filterInput", first: true, predicate: ["filterInput"], descendants: true }, { propertyName: "checkAllInput", first: true, predicate: ["checkAllInput"], descendants: true }], exportAs: ["kendoMultiSelectTree"], usesOnChanges: true, ngImport: i0, template: `
13691
15158
  <ng-container kendoMultiSelectTreeLocalizedMessages
13692
15159
  i18n-noDataText="kendo.multiselecttree.noDataText|The text displayed in the popup when there are no items"
13693
15160
  noDataText="NO DATA FOUND"
@@ -13703,6 +15170,12 @@ MultiSelectTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
13703
15170
 
13704
15171
  i18n-popupLabel="kendo.multiselecttree.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
13705
15172
  popupLabel="Options list"
15173
+
15174
+ i18n-applyButton="kendo.multiselecttree.applyButton|The text of the Apply button in the action sheet"
15175
+ applyButton="Apply"
15176
+
15177
+ i18n-cancelButton="kendo.multiselecttree.cancelButton|The text of the Cancel button in the action sheet"
15178
+ cancelButton="Cancel"
13706
15179
  >
13707
15180
  </ng-container>
13708
15181
  <kendo-taglist
@@ -13749,10 +15222,30 @@ MultiSelectTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
13749
15222
  >
13750
15223
  </span>
13751
15224
  <ng-template #popupTemplate>
15225
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
15226
+ </ng-template>
15227
+ <ng-container #container></ng-container>
15228
+ <!--adaptive rendering-->
15229
+ <responsive-renderer
15230
+ [sharedPopupActionSheetTemplate]="sharedPopupActionSheetTemplate"
15231
+ [isActionSheetExpanded]="isActionSheetExpanded"
15232
+ [title]="title"
15233
+ [showTextInput]="filterable"
15234
+ [showActionButtons]="true"
15235
+ [subtitle]="subtitle"
15236
+ (closePopup)="togglePopup(false)"
15237
+ (onExpand)="onExpand()"
15238
+ (onCollapse)="onCollapse()"
15239
+ (textInputChange)="onFilterChange($event)"
15240
+ (onApply)="applyValue()"
15241
+ (onCancel)="cancelValue()"
15242
+ >
15243
+ </responsive-renderer>
15244
+ <ng-template #sharedPopupActionSheetTemplate>
13752
15245
  <span
13753
- *ngIf="filterable"
15246
+ *ngIf="filterable && !isActionSheetExpanded"
13754
15247
  class="k-list-filter"
13755
- >
15248
+ >
13756
15249
  <span
13757
15250
  class="k-textbox k-input"
13758
15251
  [ngClass]="filterInputClasses"
@@ -13770,7 +15263,7 @@ MultiSelectTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
13770
15263
  (input)="handleFilterInputChange($event.target)"
13771
15264
  [filterInput]="filterable && !touchEnabled"
13772
15265
  [attr.aria-label]="messageFor('filterInputLabel')"
13773
- (keydown)="handleKeydown($event)"
15266
+ (keydown)="handleKeydown($event, filterInput)"
13774
15267
  [(ngModel)]="filter"
13775
15268
  class="k-input-inner"
13776
15269
  role="textbox"
@@ -13792,7 +15285,7 @@ MultiSelectTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
13792
15285
  [templateContext]="{
13793
15286
  templateRef: headerTemplate?.templateRef
13794
15287
  }">
13795
- </ng-template>
15288
+ </ng-template>
13796
15289
  <div *ngIf="checkAll" class="k-check-all">
13797
15290
  <input
13798
15291
  #checkAllInput
@@ -13875,8 +15368,9 @@ MultiSelectTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
13875
15368
  </ng-template>
13876
15369
  </div>
13877
15370
  </ng-template>
13878
- <ng-container #container></ng-container>
13879
- `, isInline: true, components: [{ type: TagListComponent, selector: "kendo-taglist", inputs: ["tags", "textField", "valueField", "valueDepth", "focused", "template", "groupTemplate", "disabled", "tagPrefix", "id", "size", "rounded", "fillMode", "disabledIndices"], outputs: ["removeTag"] }, { type: i8.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: i1$1.TreeViewComponent, selector: "kendo-treeview", inputs: ["filterInputPlaceholder", "expandDisabledNodes", "animate", "nodeTemplate", "loadMoreButtonTemplate", "trackBy", "nodes", "textField", "hasChildren", "isChecked", "isDisabled", "isExpanded", "isSelected", "isVisible", "navigable", "children", "loadOnDemand", "filterable", "filter", "size", "disableParentNodesOnly"], outputs: ["childrenLoaded", "blur", "focus", "expand", "collapse", "nodeDragStart", "nodeDrag", "filterStateChange", "nodeDrop", "nodeDragEnd", "addItem", "removeItem", "checkedChange", "selectionChange", "filterChange", "nodeClick", "nodeDblClick"], exportAs: ["kendoTreeView"] }], directives: [{ type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i12.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i13.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: FilterInputDirective, selector: "[filterInput]", inputs: ["filterInput"] }, { type: i13.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i13.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i10.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: CheckAllDirective, selector: "[checkAll]", inputs: ["lastAction", "treeview", "checkedItems", "valueField", "checkAll"], outputs: ["checkedItemsChange"] }, { type: CheckDirective, selector: "[kendoMultiSelectTreeCheckable]", inputs: ["checkable", "valueField", "checkedItems"], outputs: ["checkedItemsChange"] }] });
15371
+
15372
+ <kendo-resize-sensor *ngIf="isOpen || isAdaptiveModeEnabled" (resize)="onResize()"></kendo-resize-sensor>
15373
+ `, isInline: true, components: [{ type: TagListComponent, selector: "kendo-taglist", inputs: ["tags", "textField", "valueField", "valueDepth", "focused", "template", "groupTemplate", "disabled", "tagPrefix", "id", "size", "rounded", "fillMode", "disabledIndices"], outputs: ["removeTag"] }, { type: i8.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: ResponsiveRendererComponent, selector: "responsive-renderer", inputs: ["title", "showActionButtons", "subtitle", "size", "showTextInput", "sharedPopupActionSheetTemplate", "isActionSheetExpanded", "text", "placeholder"], outputs: ["closePopup", "textInputChange", "navigate", "onExpand", "onCollapse", "onApply", "onCancel"] }, { type: i1$1.TreeViewComponent, selector: "kendo-treeview", inputs: ["filterInputPlaceholder", "expandDisabledNodes", "animate", "nodeTemplate", "loadMoreButtonTemplate", "trackBy", "nodes", "textField", "hasChildren", "isChecked", "isDisabled", "isExpanded", "isSelected", "isVisible", "navigable", "children", "loadOnDemand", "filterable", "filter", "size", "disableParentNodesOnly"], outputs: ["childrenLoaded", "blur", "focus", "expand", "collapse", "nodeDragStart", "nodeDrag", "filterStateChange", "nodeDrop", "nodeDragEnd", "addItem", "removeItem", "checkedChange", "selectionChange", "filterChange", "nodeClick", "nodeDblClick"], exportAs: ["kendoTreeView"] }, { type: i9.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }], directives: [{ type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i13.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i13.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i14.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: FilterInputDirective, selector: "[filterInput]", inputs: ["filterInput"] }, { type: i14.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i14.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i9.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: CheckAllDirective, selector: "[checkAll]", inputs: ["lastAction", "treeview", "checkedItems", "valueField", "checkAll"], outputs: ["checkedItemsChange"] }, { type: CheckDirective, selector: "[kendoMultiSelectTreeCheckable]", inputs: ["checkable", "valueField", "checkedItems"], outputs: ["checkedItemsChange"] }] });
13880
15374
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MultiSelectTreeComponent, decorators: [{
13881
15375
  type: Component,
13882
15376
  args: [{
@@ -13927,6 +15421,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13927
15421
 
13928
15422
  i18n-popupLabel="kendo.multiselecttree.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
13929
15423
  popupLabel="Options list"
15424
+
15425
+ i18n-applyButton="kendo.multiselecttree.applyButton|The text of the Apply button in the action sheet"
15426
+ applyButton="Apply"
15427
+
15428
+ i18n-cancelButton="kendo.multiselecttree.cancelButton|The text of the Cancel button in the action sheet"
15429
+ cancelButton="Cancel"
13930
15430
  >
13931
15431
  </ng-container>
13932
15432
  <kendo-taglist
@@ -13973,10 +15473,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13973
15473
  >
13974
15474
  </span>
13975
15475
  <ng-template #popupTemplate>
15476
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
15477
+ </ng-template>
15478
+ <ng-container #container></ng-container>
15479
+ <!--adaptive rendering-->
15480
+ <responsive-renderer
15481
+ [sharedPopupActionSheetTemplate]="sharedPopupActionSheetTemplate"
15482
+ [isActionSheetExpanded]="isActionSheetExpanded"
15483
+ [title]="title"
15484
+ [showTextInput]="filterable"
15485
+ [showActionButtons]="true"
15486
+ [subtitle]="subtitle"
15487
+ (closePopup)="togglePopup(false)"
15488
+ (onExpand)="onExpand()"
15489
+ (onCollapse)="onCollapse()"
15490
+ (textInputChange)="onFilterChange($event)"
15491
+ (onApply)="applyValue()"
15492
+ (onCancel)="cancelValue()"
15493
+ >
15494
+ </responsive-renderer>
15495
+ <ng-template #sharedPopupActionSheetTemplate>
13976
15496
  <span
13977
- *ngIf="filterable"
15497
+ *ngIf="filterable && !isActionSheetExpanded"
13978
15498
  class="k-list-filter"
13979
- >
15499
+ >
13980
15500
  <span
13981
15501
  class="k-textbox k-input"
13982
15502
  [ngClass]="filterInputClasses"
@@ -13994,7 +15514,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13994
15514
  (input)="handleFilterInputChange($event.target)"
13995
15515
  [filterInput]="filterable && !touchEnabled"
13996
15516
  [attr.aria-label]="messageFor('filterInputLabel')"
13997
- (keydown)="handleKeydown($event)"
15517
+ (keydown)="handleKeydown($event, filterInput)"
13998
15518
  [(ngModel)]="filter"
13999
15519
  class="k-input-inner"
14000
15520
  role="textbox"
@@ -14016,7 +15536,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
14016
15536
  [templateContext]="{
14017
15537
  templateRef: headerTemplate?.templateRef
14018
15538
  }">
14019
- </ng-template>
15539
+ </ng-template>
14020
15540
  <div *ngIf="checkAll" class="k-check-all">
14021
15541
  <input
14022
15542
  #checkAllInput
@@ -14099,11 +15619,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
14099
15619
  </ng-template>
14100
15620
  </div>
14101
15621
  </ng-template>
14102
- <ng-container #container></ng-container>
15622
+
15623
+ <kendo-resize-sensor *ngIf="isOpen || isAdaptiveModeEnabled" (resize)="onResize()"></kendo-resize-sensor>
14103
15624
  `
14104
15625
  }]
14105
15626
  }], ctorParameters: function () {
14106
- return [{ type: i0.Injector }, { type: i0.ElementRef }, { type: i2.PopupService }, { type: i0.Renderer2 }, { type: NavigationService }, { type: i0.NgZone }, { type: i1.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: MultiSelectTreeLookupService }, { type: undefined, decorators: [{
15627
+ return [{ type: i0.Injector }, { type: i0.ElementRef }, { type: i2$1.PopupService }, { type: i0.Renderer2 }, { type: NavigationService }, { type: i0.NgZone }, { type: i1.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: MultiSelectTreeLookupService }, { type: undefined, decorators: [{
14107
15628
  type: Optional
14108
15629
  }, {
14109
15630
  type: Inject,
@@ -14163,6 +15684,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
14163
15684
  }], ariaActiveDescendant: [{
14164
15685
  type: HostBinding,
14165
15686
  args: ['attr.aria-activedescendant']
15687
+ }], adaptiveMode: [{
15688
+ type: Input
15689
+ }], title: [{
15690
+ type: Input
15691
+ }], subtitle: [{
15692
+ type: Input
15693
+ }], responsiveRendererComponent: [{
15694
+ type: ViewChild,
15695
+ args: [ResponsiveRendererComponent]
14166
15696
  }], headerTemplate: [{
14167
15697
  type: ContentChild,
14168
15698
  args: [HeaderTemplateDirective, { static: false }]
@@ -14700,7 +16230,8 @@ const INTERNAL_DIRECTIVES = [
14700
16230
  TemplateContextDirective,
14701
16231
  TagListComponent,
14702
16232
  CheckDirective,
14703
- CheckAllDirective
16233
+ CheckAllDirective,
16234
+ ResponsiveRendererComponent
14704
16235
  ];
14705
16236
  /**
14706
16237
  * @hidden
@@ -14715,21 +16246,23 @@ SharedModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "
14715
16246
  TemplateContextDirective,
14716
16247
  TagListComponent,
14717
16248
  CheckDirective,
14718
- CheckAllDirective], imports: [CommonModule, FormsModule, ReactiveFormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule, IconsModule], exports: [ListComponent,
16249
+ CheckAllDirective,
16250
+ ResponsiveRendererComponent], imports: [CommonModule, FormsModule, ReactiveFormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule, IconsModule, ActionSheetModule, ButtonModule, TextBoxModule], exports: [ListComponent,
14719
16251
  ListItemDirective,
14720
16252
  SelectableDirective,
14721
16253
  SearchBarComponent,
14722
16254
  TemplateContextDirective,
14723
16255
  TagListComponent,
14724
16256
  CheckDirective,
14725
- CheckAllDirective, CommonModule, FormsModule, ReactiveFormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule, IconsModule] });
14726
- SharedModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SharedModule, imports: [[CommonModule, FormsModule, ReactiveFormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule, IconsModule], CommonModule, FormsModule, ReactiveFormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule, IconsModule] });
16257
+ CheckAllDirective,
16258
+ ResponsiveRendererComponent, CommonModule, FormsModule, ReactiveFormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule, IconsModule, ActionSheetModule, ButtonModule, TextBoxModule] });
16259
+ SharedModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SharedModule, imports: [[CommonModule, FormsModule, ReactiveFormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule, IconsModule, ActionSheetModule, ButtonModule, TextBoxModule], CommonModule, FormsModule, ReactiveFormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule, IconsModule, ActionSheetModule, ButtonModule, TextBoxModule] });
14727
16260
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SharedModule, decorators: [{
14728
16261
  type: NgModule,
14729
16262
  args: [{
14730
16263
  declarations: [INTERNAL_DIRECTIVES],
14731
- exports: [INTERNAL_DIRECTIVES, CommonModule, FormsModule, ReactiveFormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule, IconsModule],
14732
- imports: [CommonModule, FormsModule, ReactiveFormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule, IconsModule]
16264
+ exports: [INTERNAL_DIRECTIVES, CommonModule, FormsModule, ReactiveFormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule, IconsModule, ActionSheetModule, ButtonModule, TextBoxModule],
16265
+ imports: [CommonModule, FormsModule, ReactiveFormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule, IconsModule, ActionSheetModule, ButtonModule, TextBoxModule]
14733
16266
  }]
14734
16267
  }] });
14735
16268
 
@@ -15076,5 +16609,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
15076
16609
  * Generated bundle index. Do not edit.
15077
16610
  */
15078
16611
 
15079
- export { AutoCompleteComponent, AutoCompleteModule, CheckAllDirective, CheckDirective, ColumnCellTemplateDirective, ColumnHeaderTemplateDirective, ComboBoxColumnComponent, ComboBoxComponent, ComboBoxModule, CustomItemTemplateDirective, CustomMessagesComponent, DropDownListComponent, DropDownListModule, DropDownTreeComponent, DropDownTreeFlatBindingDirective, DropDownTreeHierarchyBindingDirective, DropDownTreesExpandDirective, DropDownTreesModule, DropDownsModule, FilterDirective, FilterInputDirective, FilterableComponent, FixedGroupTemplateDirective, FooterTemplateDirective, GroupTagTemplateDirective, GroupTemplateDirective, HeaderTemplateDirective, ItemTemplateDirective, ListComponent, ListItemDirective, LocalizedMessagesDirective, MultiColumnComboBoxComponent, MultiSelectComponent, MultiSelectModule, MultiSelectTreeComponent, MultiSelectTreeFlatBindingDirective, MultiSelectTreeHierarchyBindingDirective, MultiSelectTreeSummaryTagDirective, NoDataTemplateDirective, NodeTemplateDirective, PreventableEvent, RemoveTagEvent, SearchBarComponent, SelectableDirective, SharedDirectivesModule, SharedModule, SummaryTagDirective, TagListComponent, TagTemplateDirective, TemplateContextDirective, ValueTemplateDirective };
16612
+ export { AutoCompleteComponent, AutoCompleteModule, CheckAllDirective, CheckDirective, ColumnCellTemplateDirective, ColumnHeaderTemplateDirective, ComboBoxColumnComponent, ComboBoxComponent, ComboBoxModule, CustomItemTemplateDirective, CustomMessagesComponent, DropDownListComponent, DropDownListModule, DropDownTreeComponent, DropDownTreeFlatBindingDirective, DropDownTreeHierarchyBindingDirective, DropDownTreesExpandDirective, DropDownTreesModule, DropDownsModule, FilterDirective, FilterInputDirective, FilterableComponent, FixedGroupTemplateDirective, FooterTemplateDirective, GroupTagTemplateDirective, GroupTemplateDirective, HeaderTemplateDirective, ItemTemplateDirective, ListComponent, ListItemDirective, LocalizedMessagesDirective, MultiColumnComboBoxComponent, MultiSelectComponent, MultiSelectModule, MultiSelectTreeComponent, MultiSelectTreeFlatBindingDirective, MultiSelectTreeHierarchyBindingDirective, MultiSelectTreeSummaryTagDirective, NoDataTemplateDirective, NodeTemplateDirective, PreventableEvent, RemoveTagEvent, ResponsiveRendererComponent, SearchBarComponent, SelectableDirective, SharedDirectivesModule, SharedModule, SummaryTagDirective, TagListComponent, TagTemplateDirective, TemplateContextDirective, ValueTemplateDirective };
15080
16613