@progress/kendo-angular-dropdowns 12.0.0-develop.7 → 12.0.0-develop.8

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,22 +4,28 @@
4
4
  *-------------------------------------------------------------------------------------------*/
5
5
  import * as i0 from '@angular/core';
6
6
  import { EventEmitter, Component, Input, Output, ViewChild, HostBinding, Directive, Injectable, HostListener, ViewChildren, InjectionToken, 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';
13
13
  import * as i1 from '@progress/kendo-angular-l10n';
14
14
  import { ComponentMessages, LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';
15
15
  import { Subscription, merge, fromEvent, Subject, of, interval } from 'rxjs';
16
- import * as i2 from '@progress/kendo-angular-popup';
16
+ import * as i2$1 from '@progress/kendo-angular-popup';
17
17
  import { PopupModule } from '@progress/kendo-angular-popup';
18
18
  export { PopupComponent } from '@progress/kendo-angular-popup';
19
19
  import { map, switchMap, take, auditTime, tap, filter, partition, throttleTime, catchError, skipWhile, concatMap, takeUntil, debounceTime } from 'rxjs/operators';
20
- import * as i12 from '@angular/common';
20
+ import * as i13 from '@angular/common';
21
21
  import { CommonModule } from '@angular/common';
22
22
  import { xIcon, caretAltDownIcon, searchIcon, xCircleIcon, plusIcon } from '@progress/kendo-svg-icons';
23
+ import * as i2 from '@progress/kendo-angular-navigation';
24
+ import { ActionSheetComponent, ActionSheetModule } from '@progress/kendo-angular-navigation';
25
+ import * as i4 from '@progress/kendo-angular-inputs';
26
+ import { TextBoxModule } from '@progress/kendo-angular-inputs';
27
+ import * as i3 from '@progress/kendo-angular-buttons';
28
+ import { ButtonModule } from '@progress/kendo-angular-buttons';
23
29
  import * as i8 from '@progress/kendo-angular-icons';
24
30
  import { IconsModule } from '@progress/kendo-angular-icons';
25
31
  import * as i1$1 from '@progress/kendo-angular-treeview';
@@ -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: 1681306023,
36
- version: '12.0.0-develop.7',
41
+ publishDate: 1681813981,
42
+ version: '12.0.0-develop.8',
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: [{
@@ -1655,8 +1727,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
1655
1727
  class SelectableDirective {
1656
1728
  constructor(selectionService) {
1657
1729
  this.checkboxes = { enabled: false };
1658
- // @HostBinding('attr.offset-index')
1659
- // @Input() public offsetIndex: number;
1660
1730
  this.multipleSelection = false;
1661
1731
  this.selectionService = selectionService;
1662
1732
  }
@@ -1686,7 +1756,7 @@ class SelectableDirective {
1686
1756
  }
1687
1757
  }
1688
1758
  SelectableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SelectableDirective, deps: [{ token: SelectionService }], target: i0.ɵɵFactoryTarget.Directive });
1689
- 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 });
1759
+ 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 });
1690
1760
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SelectableDirective, decorators: [{
1691
1761
  type: Directive,
1692
1762
  args: [{
@@ -1707,6 +1777,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
1707
1777
  args: ['style.minHeight.px']
1708
1778
  }, {
1709
1779
  type: Input
1780
+ }], isMultiselect: [{
1781
+ type: Input
1710
1782
  }], multipleSelection: [{
1711
1783
  type: Input
1712
1784
  }], focusedClassName: [{
@@ -2073,13 +2145,16 @@ class ListComponent {
2073
2145
  this.renderer.addClass(this.wrapper.nativeElement, getSizeClass('list', this.size));
2074
2146
  }
2075
2147
  }
2148
+ if (this.type === 'dropdowngrid') {
2149
+ this.renderer.setStyle(this.wrapper.nativeElement, 'overflow-y', 'scroll');
2150
+ }
2076
2151
  if (isPresent(this.virtual)) {
2077
2152
  this.renderer.addClass(this.wrapper.nativeElement, this.listVirtualClass);
2078
2153
  }
2079
2154
  }
2080
2155
  }
2081
2156
  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 });
2082
- 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: `
2157
+ 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: `
2083
2158
  <div *ngIf="dataService.grouped"
2084
2159
  [class]="listGroupStickyHeaderClass"
2085
2160
  [ngStyle]="{
@@ -2146,6 +2221,7 @@ ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
2146
2221
  </ng-template>
2147
2222
  <ng-template *ngIf="dataService.grouped" ngFor let-dataItem let-itemIndex="index" [ngForOf]="data">
2148
2223
  <li
2224
+ #li
2149
2225
  *ngIf="dataItem.header && dataItem.index > 0"
2150
2226
  role="group"
2151
2227
  [class]="listGroupItemClass"
@@ -2168,6 +2244,7 @@ ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
2168
2244
  </span>
2169
2245
  </li>
2170
2246
  <li
2247
+ #li
2171
2248
  *ngIf="!dataItem.header"
2172
2249
  role="option"
2173
2250
  kendoDropDownsSelectable
@@ -2205,7 +2282,7 @@ ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
2205
2282
  </div>
2206
2283
  </div>
2207
2284
  </div>
2208
- `, 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"] }] });
2285
+ `, 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"] }] });
2209
2286
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ListComponent, decorators: [{
2210
2287
  type: Component,
2211
2288
  args: [{
@@ -2277,6 +2354,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2277
2354
  </ng-template>
2278
2355
  <ng-template *ngIf="dataService.grouped" ngFor let-dataItem let-itemIndex="index" [ngForOf]="data">
2279
2356
  <li
2357
+ #li
2280
2358
  *ngIf="dataItem.header && dataItem.index > 0"
2281
2359
  role="group"
2282
2360
  [class]="listGroupItemClass"
@@ -2299,6 +2377,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2299
2377
  </span>
2300
2378
  </li>
2301
2379
  <li
2380
+ #li
2302
2381
  *ngIf="!dataItem.header"
2303
2382
  role="option"
2304
2383
  kendoDropDownsSelectable
@@ -2372,6 +2451,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2372
2451
  type: Input
2373
2452
  }], isMultiselect: [{
2374
2453
  type: Input
2454
+ }], isActionSheetExpanded: [{
2455
+ type: Input
2375
2456
  }], data: [{
2376
2457
  type: Input
2377
2458
  }], size: [{
@@ -2424,13 +2505,240 @@ const normalizeVirtualizationSettings = (settings, defaultOverrides) => {
2424
2505
  */
2425
2506
  const TOUCH_ENABLED = new InjectionToken('dropdowns-touch-enabled');
2426
2507
 
2508
+ /**
2509
+ * @hidden
2510
+ */
2511
+ class ResponsiveRendererComponent {
2512
+ constructor(localization) {
2513
+ this.localization = localization;
2514
+ this.closePopup = new EventEmitter();
2515
+ this.textInputChange = new EventEmitter();
2516
+ this.navigate = new EventEmitter();
2517
+ this.onExpand = new EventEmitter();
2518
+ this.onCollapse = new EventEmitter();
2519
+ this.onApply = new EventEmitter();
2520
+ this.onCancel = new EventEmitter();
2521
+ this.searchBarValue = '';
2522
+ this.animationDuration = animationDuration;
2523
+ this.xIcon = xIcon;
2524
+ }
2525
+ messageFor(key) {
2526
+ return this.localization.get(key);
2527
+ }
2528
+ onValueChange(value) {
2529
+ this.searchBarValue = value;
2530
+ this.textInputChange.emit(value);
2531
+ }
2532
+ }
2533
+ ResponsiveRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ResponsiveRendererComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
2534
+ 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: `
2535
+ <kendo-actionsheet
2536
+ #actionSheet
2537
+ [animation]="{ duration: animationDuration }"
2538
+ [expanded]="isActionSheetExpanded"
2539
+ (overlayClick)="closePopup.emit()"
2540
+ (keydown)="navigate.emit($event)"
2541
+ (expand)="onExpand.emit()"
2542
+ (collapse)="onCollapse.emit()"
2543
+ >
2544
+ <ng-template kendoActionSheetTemplate>
2545
+ <div class="k-text-center k-actionsheet-titlebar">
2546
+ <div class="k-actionsheet-titlebar-group k-hbox">
2547
+ <div class="k-actionsheet-title">
2548
+ <div class="k-text-center">{{ title }}</div>
2549
+ <div class="k-actionsheet-subtitle k-text-center">{{ subtitle }}</div>
2550
+ </div>
2551
+ <div class="k-actionsheet-actions">
2552
+ <button
2553
+ kendoButton
2554
+ icon="x"
2555
+ [attr.title]="messageFor('clearTitle')"
2556
+ [svgIcon]="xIcon"
2557
+ fillMode="flat"
2558
+ [size]="size"
2559
+ [tabIndex]="-1"
2560
+ aria-hidden="true"
2561
+ innerCssClass="k-button-icon"
2562
+ (click)="closePopup.emit()"
2563
+ ></button>
2564
+ </div>
2565
+ </div>
2566
+ <div class="k-actionsheet-titlebar-group k-actionsheet-filter">
2567
+ <kendo-textbox
2568
+ *ngIf="showTextInput"
2569
+ #actionSheetSearchBar
2570
+ [value]="searchBarValue"
2571
+ [size]="size"
2572
+ placeholder="Filter"
2573
+ class="k-searchbox"
2574
+ autocomplete="off"
2575
+ (valueChange)="onValueChange($event)"
2576
+ >
2577
+ <ng-template kendoTextBoxPrefixTemplate>
2578
+ <kendo-icon name="search"></kendo-icon>
2579
+ </ng-template>
2580
+ </kendo-textbox>
2581
+ </div>
2582
+ </div>
2583
+ <div class="k-actionsheet-content !k-overflow-hidden">
2584
+ <div class="k-list-container">
2585
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
2586
+ </div>
2587
+ </div>
2588
+
2589
+ <div *ngIf="showActionButtons" class="k-actionsheet-footer k-actions k-actions-stretched">
2590
+ <button kendoButton
2591
+ tabindex="0"
2592
+ aria-disabled="false"
2593
+ [size]="size"
2594
+ themeColor="base"
2595
+ (click)="onCancel.emit()"
2596
+ (keydown.enter)="$event.stopImmediatePropagation()">
2597
+ {{messageFor('cancelButton')}}
2598
+ </button>
2599
+ <button kendoButton
2600
+ tabindex="0"
2601
+ aria-disabled="false"
2602
+ [size]="size"
2603
+ themeColor="primary"
2604
+ (click)="onApply.emit()"
2605
+ (keydown.enter)="$event.stopImmediatePropagation()">
2606
+ {{messageFor('applyButton')}}
2607
+ </button>
2608
+ </div>
2609
+ </ng-template>
2610
+ </kendo-actionsheet>
2611
+ `, 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"] }] });
2612
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ResponsiveRendererComponent, decorators: [{
2613
+ type: Component,
2614
+ args: [{
2615
+ selector: 'responsive-renderer',
2616
+ template: `
2617
+ <kendo-actionsheet
2618
+ #actionSheet
2619
+ [animation]="{ duration: animationDuration }"
2620
+ [expanded]="isActionSheetExpanded"
2621
+ (overlayClick)="closePopup.emit()"
2622
+ (keydown)="navigate.emit($event)"
2623
+ (expand)="onExpand.emit()"
2624
+ (collapse)="onCollapse.emit()"
2625
+ >
2626
+ <ng-template kendoActionSheetTemplate>
2627
+ <div class="k-text-center k-actionsheet-titlebar">
2628
+ <div class="k-actionsheet-titlebar-group k-hbox">
2629
+ <div class="k-actionsheet-title">
2630
+ <div class="k-text-center">{{ title }}</div>
2631
+ <div class="k-actionsheet-subtitle k-text-center">{{ subtitle }}</div>
2632
+ </div>
2633
+ <div class="k-actionsheet-actions">
2634
+ <button
2635
+ kendoButton
2636
+ icon="x"
2637
+ [attr.title]="messageFor('clearTitle')"
2638
+ [svgIcon]="xIcon"
2639
+ fillMode="flat"
2640
+ [size]="size"
2641
+ [tabIndex]="-1"
2642
+ aria-hidden="true"
2643
+ innerCssClass="k-button-icon"
2644
+ (click)="closePopup.emit()"
2645
+ ></button>
2646
+ </div>
2647
+ </div>
2648
+ <div class="k-actionsheet-titlebar-group k-actionsheet-filter">
2649
+ <kendo-textbox
2650
+ *ngIf="showTextInput"
2651
+ #actionSheetSearchBar
2652
+ [value]="searchBarValue"
2653
+ [size]="size"
2654
+ placeholder="Filter"
2655
+ class="k-searchbox"
2656
+ autocomplete="off"
2657
+ (valueChange)="onValueChange($event)"
2658
+ >
2659
+ <ng-template kendoTextBoxPrefixTemplate>
2660
+ <kendo-icon name="search"></kendo-icon>
2661
+ </ng-template>
2662
+ </kendo-textbox>
2663
+ </div>
2664
+ </div>
2665
+ <div class="k-actionsheet-content !k-overflow-hidden">
2666
+ <div class="k-list-container">
2667
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
2668
+ </div>
2669
+ </div>
2670
+
2671
+ <div *ngIf="showActionButtons" class="k-actionsheet-footer k-actions k-actions-stretched">
2672
+ <button kendoButton
2673
+ tabindex="0"
2674
+ aria-disabled="false"
2675
+ [size]="size"
2676
+ themeColor="base"
2677
+ (click)="onCancel.emit()"
2678
+ (keydown.enter)="$event.stopImmediatePropagation()">
2679
+ {{messageFor('cancelButton')}}
2680
+ </button>
2681
+ <button kendoButton
2682
+ tabindex="0"
2683
+ aria-disabled="false"
2684
+ [size]="size"
2685
+ themeColor="primary"
2686
+ (click)="onApply.emit()"
2687
+ (keydown.enter)="$event.stopImmediatePropagation()">
2688
+ {{messageFor('applyButton')}}
2689
+ </button>
2690
+ </div>
2691
+ </ng-template>
2692
+ </kendo-actionsheet>
2693
+ `,
2694
+ }]
2695
+ }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; }, propDecorators: { title: [{
2696
+ type: Input
2697
+ }], showActionButtons: [{
2698
+ type: Input
2699
+ }], subtitle: [{
2700
+ type: Input
2701
+ }], size: [{
2702
+ type: Input
2703
+ }], showTextInput: [{
2704
+ type: Input
2705
+ }], sharedPopupActionSheetTemplate: [{
2706
+ type: Input
2707
+ }], isActionSheetExpanded: [{
2708
+ type: Input
2709
+ }], text: [{
2710
+ type: Input
2711
+ }], placeholder: [{
2712
+ type: Input
2713
+ }], closePopup: [{
2714
+ type: Output
2715
+ }], textInputChange: [{
2716
+ type: Output
2717
+ }], navigate: [{
2718
+ type: Output
2719
+ }], onExpand: [{
2720
+ type: Output
2721
+ }], onCollapse: [{
2722
+ type: Output
2723
+ }], onApply: [{
2724
+ type: Output
2725
+ }], onCancel: [{
2726
+ type: Output
2727
+ }], actionSheet: [{
2728
+ type: ViewChild,
2729
+ args: [ActionSheetComponent]
2730
+ }], actionSheetSearchBar: [{
2731
+ type: ViewChild,
2732
+ args: ['actionSheetSearchBar']
2733
+ }] } });
2734
+
2427
2735
  /**
2428
2736
  * @hidden
2429
2737
  */
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.
2554
2867
  */
2555
- this.listHeight = 200;
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.
2872
+ */
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,18 @@ class AutoCompleteComponent {
2640
2964
  this.subscribeTouchEvents();
2641
2965
  this.selectionService.resetSelection([-1]);
2642
2966
  }
2967
+ /**
2968
+ * @hidden
2969
+ */
2970
+ get actionSheet() {
2971
+ return this.responsiveRendererComponent?.actionSheet;
2972
+ }
2973
+ /**
2974
+ * @hidden
2975
+ */
2976
+ get actionSheetSearchBar() {
2977
+ return this.responsiveRendererComponent?.actionSheetSearchBar;
2978
+ }
2643
2979
  get width() {
2644
2980
  let wrapperOffsetWidth = 0;
2645
2981
  if (isDocumentAvailable()) {
@@ -2688,8 +3024,8 @@ class AutoCompleteComponent {
2688
3024
  return this.isOpen ? this.listBoxId : undefined;
2689
3025
  }
2690
3026
  /**
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.
3027
+ * Toggles the visibility of the popup or actionSheet.
3028
+ * If you use the `toggle` method to open or close the popup or actionSheet, the `open` and `close` events will not be fired.
2693
3029
  *
2694
3030
  * @param open - The state of the popup.
2695
3031
  */
@@ -2700,10 +3036,19 @@ class AutoCompleteComponent {
2700
3036
  });
2701
3037
  }
2702
3038
  /**
2703
- * Returns the current open state of the popup.
3039
+ * Returns the current open state. Returns `true` if the popup or actionSheet is open.
2704
3040
  */
2705
3041
  get isOpen() {
2706
- return this._open;
3042
+ return isTruthy(this._open || this.isActionSheetExpanded);
3043
+ }
3044
+ /**
3045
+ * @hidden
3046
+ */
3047
+ handleClick() {
3048
+ this.windowSize = windowSize();
3049
+ if (this.isAdaptive) {
3050
+ this.togglePopup(true);
3051
+ }
2707
3052
  }
2708
3053
  /**
2709
3054
  * @hidden
@@ -2766,6 +3111,22 @@ class AutoCompleteComponent {
2766
3111
  get value() {
2767
3112
  return this._value || NO_VALUE;
2768
3113
  }
3114
+ /**
3115
+ * Sets the subtitle of the ActionSheet that is rendered instead of the Popup when using small screen devices.
3116
+ * By default the ActionSheet subtitle uses the text provided for the `placeholder` of the AutoComplete.
3117
+ */
3118
+ set subtitle(_subtitle) {
3119
+ this._subtitle = _subtitle;
3120
+ }
3121
+ get subtitle() {
3122
+ return this._subtitle || this.placeholder;
3123
+ }
3124
+ /**
3125
+ * @hidden
3126
+ */
3127
+ get isAdaptiveModeEnabled() {
3128
+ return this.adaptiveMode === 'auto';
3129
+ }
2769
3130
  /**
2770
3131
  * Configures the popup of the AutoComplete.
2771
3132
  *
@@ -2782,6 +3143,24 @@ class AutoCompleteComponent {
2782
3143
  get popupSettings() {
2783
3144
  return this._popupSettings;
2784
3145
  }
3146
+ /**
3147
+ * Sets the height of the options list in the popup. By default, `listHeight` is 200px.
3148
+ *
3149
+ * > The `listHeight` property affects only the list of options and not the whole popup container.
3150
+ * > To set the height of the popup container, use `popupSettings.height`.
3151
+ *
3152
+ * > When using `adaptiveMode` and the screen size is `small` or `medium` the `listHeight` property is set to null.
3153
+ */
3154
+ set listHeight(_listHeight) {
3155
+ this._listHeight = _listHeight;
3156
+ }
3157
+ ;
3158
+ get listHeight() {
3159
+ if (this.isAdaptive) {
3160
+ return;
3161
+ }
3162
+ return this._listHeight;
3163
+ }
2785
3164
  /**
2786
3165
  * Defines a Boolean function that is executed for each data item in the component
2787
3166
  * ([see examples]({% slug disableditems_autocomplete %})).
@@ -2891,21 +3270,39 @@ class AutoCompleteComponent {
2891
3270
  get dir() {
2892
3271
  return this.direction;
2893
3272
  }
3273
+ /**
3274
+ * @hidden
3275
+ */
3276
+ get isActionSheetExpanded() {
3277
+ return this.actionSheet?.expanded;
3278
+ }
3279
+ ;
3280
+ /**
3281
+ * @hidden
3282
+ */
3283
+ get isAdaptive() {
3284
+ return this.isAdaptiveModeEnabled && this.windowSize !== 'large';
3285
+ }
2894
3286
  ngOnInit() {
2895
3287
  this.renderer.removeAttribute(this.wrapper, "tabindex");
2896
- this.localizationChangeSubscription = this.localization
3288
+ this.subs.add(this.localization
2897
3289
  .changes
2898
3290
  .subscribe(({ rtl }) => {
2899
3291
  this.direction = rtl ? 'rtl' : 'ltr';
2900
3292
  this.cdr.detectChanges();
2901
- });
3293
+ }));
2902
3294
  this.setComponentClasses();
2903
3295
  }
3296
+ ngAfterViewInit() {
3297
+ this.windowSize = windowSize();
3298
+ this.cdr.detectChanges();
3299
+ this.renderer.setAttribute(this.actionSheet?.element.nativeElement, 'style', '--kendo-actionsheet-height: 60vh; --kendo-actionsheet-max-height: none');
3300
+ }
2904
3301
  ngOnDestroy() {
2905
3302
  this.destroyPopup();
2906
- this.unsubscribeEvents();
2907
- if (this.localizationChangeSubscription) {
2908
- this.localizationChangeSubscription.unsubscribe();
3303
+ this.subs.unsubscribe();
3304
+ if (this.touchstartDisposeHandler) {
3305
+ this.touchstartDisposeHandler();
2909
3306
  }
2910
3307
  }
2911
3308
  ngOnChanges(changes) {
@@ -2929,6 +3326,12 @@ class AutoCompleteComponent {
2929
3326
  messageFor(key) {
2930
3327
  return this.localization.get(key);
2931
3328
  }
3329
+ /**
3330
+ * @hidden
3331
+ */
3332
+ onAdaptiveTextBoxChange(text) {
3333
+ this.search(text);
3334
+ }
2932
3335
  /**
2933
3336
  * @hidden
2934
3337
  */
@@ -2998,7 +3401,14 @@ class AutoCompleteComponent {
2998
3401
  * @hidden
2999
3402
  */
3000
3403
  onResize() {
3001
- if (this._open) {
3404
+ if (this.isAdaptiveModeEnabled && this.windowSize !== windowSize()) {
3405
+ if (this.isOpen) {
3406
+ this.togglePopup(false);
3407
+ }
3408
+ this.windowSize = windowSize();
3409
+ this.cdr.detectChanges();
3410
+ }
3411
+ if (this._open && !this.isActionSheetExpanded) {
3002
3412
  const popupWrapper = this.popupRef.popupElement;
3003
3413
  const { min, max } = this.width;
3004
3414
  popupWrapper.style.minWidth = min;
@@ -3018,13 +3428,7 @@ class AutoCompleteComponent {
3018
3428
  }
3019
3429
  }
3020
3430
  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
- }
3431
+ const index = this.findIndex(text, startFrom);
3028
3432
  if (this.disabledItemsService.isIndexDisabled(index)) {
3029
3433
  if (index + 1 < this.dataService.itemsCount) {
3030
3434
  this.search(text, index + 1);
@@ -3072,6 +3476,10 @@ class AutoCompleteComponent {
3072
3476
  ((action === NavigationAction.Enter && this.isOpen) || action !== NavigationAction.Enter)) {
3073
3477
  event.preventDefault();
3074
3478
  }
3479
+ if (action === NavigationAction.Tab && this.isActionSheetExpanded) {
3480
+ event.stopImmediatePropagation();
3481
+ this.togglePopup(false);
3482
+ }
3075
3483
  }
3076
3484
  handleEnter(event) {
3077
3485
  const focused = this.selectionService.focused;
@@ -3092,6 +3500,9 @@ class AutoCompleteComponent {
3092
3500
  value = this.searchbar.value;
3093
3501
  }
3094
3502
  }
3503
+ if (this.isActionSheetExpanded && focused >= 0) {
3504
+ this.togglePopup(false);
3505
+ }
3095
3506
  this.change(value);
3096
3507
  }
3097
3508
  handleEscape() {
@@ -3122,6 +3533,17 @@ class AutoCompleteComponent {
3122
3533
  this.search(text);
3123
3534
  }
3124
3535
  }
3536
+ /**
3537
+ * @hidden
3538
+ */
3539
+ onFilterChange(text) {
3540
+ if (this.filterable) {
3541
+ this.filterChange.emit(text);
3542
+ }
3543
+ else if (this.highlightFirst) {
3544
+ this.search(text);
3545
+ }
3546
+ }
3125
3547
  /**
3126
3548
  * @hidden
3127
3549
  */
@@ -3137,37 +3559,39 @@ class AutoCompleteComponent {
3137
3559
  * @hidden
3138
3560
  */
3139
3561
  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();
3562
+ if (!this.isActionSheetExpanded) {
3563
+ const focused = this.filterable ? this.selectionService.focused : -1;
3564
+ this.searchbar.input.nativeElement.scrollLeft = 0; // Firefox doesn't auto-scroll to the left on blur like other browsers
3565
+ let dataItem;
3566
+ let text;
3567
+ if (focused !== -1) {
3568
+ dataItem = this.dataService.itemAt(focused);
3569
+ text = getter(dataItem, this.valueField) || "";
3570
+ }
3571
+ else {
3572
+ text = this.searchbar.value;
3573
+ }
3574
+ const exactMatch = text === this.searchbar.value;
3575
+ const insensitiveMatch = text.toLowerCase() === this.searchbar.value.toLowerCase();
3576
+ if (!exactMatch && insensitiveMatch) {
3577
+ this.selectionService.resetSelection([]);
3578
+ }
3579
+ this.isFocused = false;
3580
+ const valueHasChanged = this.value !== this.text;
3581
+ const runInZone = hasObservers(this.onBlur) || hasObservers(this.close) || isUntouched(this.wrapper) || valueHasChanged;
3582
+ if (runInZone) {
3583
+ this._zone.run(() => {
3584
+ if (valueHasChanged) {
3585
+ this.change(this.searchbar.value);
3586
+ }
3587
+ this.onBlur.emit();
3588
+ this.onTouchedCallback();
3589
+ this.togglePopup(false);
3590
+ });
3591
+ }
3592
+ else {
3166
3593
  this.togglePopup(false);
3167
- });
3168
- }
3169
- else {
3170
- this.togglePopup(false);
3594
+ }
3171
3595
  }
3172
3596
  }
3173
3597
  /**
@@ -3185,29 +3609,42 @@ class AutoCompleteComponent {
3185
3609
  if (!isDocumentAvailable()) {
3186
3610
  return;
3187
3611
  }
3188
- this.valueChangeSubscription = this.valueChangeSubject
3612
+ this.subs.add(this.valueChangeSubject
3189
3613
  .subscribe(value => {
3190
3614
  const hasChange = this.value !== value;
3615
+ const index = this.findIndex(value);
3616
+ this.selectionService.focused = index;
3191
3617
  this.value = value;
3192
3618
  this.text = value;
3193
3619
  // emit change after assigning `this.value` => allows the user to modify the component value on `valueChange`
3194
3620
  if (hasChange) {
3195
3621
  this.emitChange(value);
3196
3622
  }
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) => {
3623
+ }));
3624
+ this.subs.add(this.selectionService.onChange.subscribe(this.handleItemChange.bind(this)));
3625
+ this.subs.add(this.selectionService.onFocus.subscribe(this.handleItemFocus.bind(this)));
3626
+ this.subs.add(merge(this.navigationService.up, this.navigationService.down).subscribe((event) => this.navigate(event.index)));
3627
+ this.subs.add(this.navigationService.close.subscribe(() => this.togglePopup(false)));
3628
+ this.subs.add(this.navigationService.open.subscribe(() => this.togglePopup(true)));
3629
+ this.subs.add(this.navigationService.enter.subscribe(this.handleEnter.bind(this)));
3630
+ this.subs.add(this.navigationService.esc.subscribe(this.handleEscape.bind(this)));
3631
+ this.subs.add(merge(this.navigationService.pagedown, this.navigationService.pageup).subscribe((event) => {
3206
3632
  if (this.isOpen) {
3207
3633
  event.originalEvent.preventDefault();
3208
3634
  this.optionsList.scrollWithOnePage(NavigationAction[event.originalEvent.code]);
3209
3635
  }
3210
- });
3636
+ }));
3637
+ }
3638
+ findIndex(value, startFrom = 0) {
3639
+ let index;
3640
+ if (value && value.length && this.dataService.itemsCount) {
3641
+ index = this.dataService.findIndex(this.findIndexPredicate(value), startFrom);
3642
+ }
3643
+ else {
3644
+ index = -1;
3645
+ }
3646
+ ;
3647
+ return index;
3211
3648
  }
3212
3649
  subscribeTouchEvents() {
3213
3650
  if (!isDocumentAvailable() || !this.touchEnabled) {
@@ -3222,23 +3659,6 @@ class AutoCompleteComponent {
3222
3659
  }
3223
3660
  }));
3224
3661
  }
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
3662
  handleItemChange(event) {
3243
3663
  const index = event.indices.length ? event.indices[0] : undefined;
3244
3664
  this.selectionService.resetSelection([-1]);
@@ -3247,6 +3667,9 @@ class AutoCompleteComponent {
3247
3667
  }
3248
3668
  const text = getter(this.dataService.itemAt(index), this.valueField);
3249
3669
  this.change(text);
3670
+ if (this.isActionSheetExpanded) {
3671
+ this.togglePopup(false);
3672
+ }
3250
3673
  }
3251
3674
  handleItemFocus(_event) {
3252
3675
  const focused = this.selectionService.focused;
@@ -3259,9 +3682,14 @@ class AutoCompleteComponent {
3259
3682
  if (this.virtual) {
3260
3683
  this.virtual.skip = 0;
3261
3684
  }
3262
- const horizontalAlign = this.direction === 'rtl' ? 'right' : 'left';
3263
- const anchorPosition = { horizontal: horizontalAlign, vertical: 'bottom' };
3264
- const popupPosition = { horizontal: horizontalAlign, vertical: 'top' };
3685
+ this.windowSize = windowSize();
3686
+ if (this.isAdaptive) {
3687
+ this.openActionSheet();
3688
+ return;
3689
+ }
3690
+ const horizontalAlign = this.direction === "rtl" ? "right" : "left";
3691
+ const anchorPosition = { horizontal: horizontalAlign, vertical: "bottom" };
3692
+ const popupPosition = { horizontal: horizontalAlign, vertical: "top" };
3265
3693
  this.popupRef = this.popupService.open({
3266
3694
  anchor: this.wrapper,
3267
3695
  animate: this.popupSettings.animate,
@@ -3283,20 +3711,17 @@ class AutoCompleteComponent {
3283
3711
  this.renderer.setAttribute(popupWrapper, 'role', 'region');
3284
3712
  this.renderer.setAttribute(popupWrapper, 'aria-label', this.messageFor('popupLabel'));
3285
3713
  }
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(() => {
3714
+ this.subs.add(this.popupRef.popupOpen.subscribe(() => {
3292
3715
  this.cdr.detectChanges();
3716
+ setListBoxAriaLabelLebBy(this.optionsList, this.searchbar.input, this.renderer);
3293
3717
  this.optionsList.scrollToItem(this.selectionService.focused);
3718
+ this.selectionService.focus(this.selectionService.focused);
3294
3719
  this.opened.emit();
3295
- });
3296
- this.popupRef.popupClose.subscribe(() => {
3720
+ }));
3721
+ this.subs.add(this.popupRef.popupClose.subscribe(() => {
3297
3722
  this.closed.emit();
3298
- });
3299
- this.popupRef.popupAnchorViewportLeave.subscribe(() => this.togglePopup(false));
3723
+ }));
3724
+ this.subs.add(this.popupRef.popupAnchorViewportLeave.subscribe(() => this.togglePopup(false)));
3300
3725
  }
3301
3726
  destroyPopup() {
3302
3727
  if (this.popupRef) {
@@ -3309,6 +3734,9 @@ class AutoCompleteComponent {
3309
3734
  _toggle(open) {
3310
3735
  this._open = open;
3311
3736
  this.destroyPopup();
3737
+ if (this.isActionSheetExpanded) {
3738
+ this.closeActionSheet();
3739
+ }
3312
3740
  if (this._open) {
3313
3741
  this.createPopup();
3314
3742
  }
@@ -3359,9 +3787,28 @@ class AutoCompleteComponent {
3359
3787
  this.renderer.addClass(this.wrapper, getFillModeClass('input', this.fillMode));
3360
3788
  }
3361
3789
  }
3790
+ closeActionSheet() {
3791
+ this.actionSheet.toggle(false);
3792
+ this.actionSheetSearchBar.value = '';
3793
+ this.filterable && this.filterChange.emit('');
3794
+ this.searchbar.input.nativeElement.focus();
3795
+ this.closed.emit();
3796
+ }
3797
+ openActionSheet() {
3798
+ this.actionSheet.toggle(true);
3799
+ this.cdr.detectChanges();
3800
+ setListBoxAriaLabelLebBy(this.optionsList, this.searchbar.input, this.renderer);
3801
+ this.title = setActionSheetTitle(this.searchbar.input, this.title);
3802
+ updateActionSheetAdaptiveAppearance(this.actionSheet, this.windowSize, this.renderer);
3803
+ this.cdr.detectChanges();
3804
+ this.opened.emit();
3805
+ this.optionsList.scrollToItem(this.selectionService.focused);
3806
+ this.selectionService.focus(this.selectionService.focused);
3807
+ this.actionSheetSearchBar.focus();
3808
+ }
3362
3809
  }
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: [
3810
+ 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 });
3811
+ 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
3812
  AUTOCOMPLETE_VALUE_ACCESSOR,
3366
3813
  DataService,
3367
3814
  SelectionService,
@@ -3380,7 +3827,7 @@ AutoCompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
3380
3827
  provide: KendoInput,
3381
3828
  useExisting: forwardRef(() => AutoCompleteComponent)
3382
3829
  }
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: `
3830
+ ], 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
3831
  <ng-container kendoAutoCompleteLocalizedMessages
3385
3832
  i18n-noDataText="kendo.autocomplete.noDataText|The text displayed in the popup when there are no items"
3386
3833
  noDataText="NO DATA FOUND"
@@ -3395,7 +3842,6 @@ AutoCompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
3395
3842
  <kendo-searchbar #searchbar
3396
3843
  [role]="'combobox'"
3397
3844
  [ariaExpanded]="isOpen"
3398
- [ariaControls]="ariaControls"
3399
3845
  [isSuggestable]="suggest"
3400
3846
  [isFilterable]="filterable"
3401
3847
  [isLoading]="isLoading"
@@ -3405,13 +3851,14 @@ AutoCompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
3405
3851
  [userInput]="text"
3406
3852
  [suggestedText]="suggestion"
3407
3853
  [disabled]="disabled"
3408
- [readonly]="readonly"
3854
+ [readonly]="readonly || this.isAdaptive"
3409
3855
  [tabIndex]="tabIndex"
3410
3856
  [placeholder]="placeholder"
3411
3857
  (onNavigate)="handleNavigate($event)"
3412
3858
  (valueChange)="searchBarChange($event)"
3413
3859
  (onBlur)="handleBlur()"
3414
3860
  (onFocus)="handleFocus()"
3861
+ (click)="handleClick()"
3415
3862
  ></kendo-searchbar>
3416
3863
  <span
3417
3864
  *ngIf="!loading && !readonly && (clearButton && text?.length)"
@@ -3431,6 +3878,26 @@ AutoCompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
3431
3878
  </span>
3432
3879
  <span *ngIf="loading" class="k-icon k-i-loading k-input-loading-icon"></span>
3433
3880
  <ng-template #popupTemplate>
3881
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
3882
+ </ng-template>
3883
+ <ng-container #container></ng-container>
3884
+ <kendo-resize-sensor *ngIf="isOpen || isAdaptiveModeEnabled" (resize)="onResize()"></kendo-resize-sensor>
3885
+
3886
+ <!--adaptive rendering-->
3887
+ <responsive-renderer
3888
+ [sharedPopupActionSheetTemplate]="sharedPopupActionSheetTemplate"
3889
+ [isActionSheetExpanded]="isActionSheetExpanded"
3890
+ [title]="title"
3891
+ [showTextInput]="true"
3892
+ [subtitle]="subtitle"
3893
+ (closePopup)="togglePopup(false)"
3894
+ (textInputChange)="onFilterChange($event)"
3895
+ (navigate)="handleNavigate($event)"
3896
+ [placeholder]="placeholder"
3897
+ >
3898
+ </responsive-renderer>
3899
+
3900
+ <ng-template #sharedPopupActionSheetTemplate>
3434
3901
  <!--header template-->
3435
3902
  <ng-template *ngIf="headerTemplate"
3436
3903
  [templateContext]="{
@@ -3474,11 +3941,7 @@ AutoCompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
3474
3941
  }">
3475
3942
  </ng-template>
3476
3943
  </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"] }] });
3944
+ `, 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
3945
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AutoCompleteComponent, decorators: [{
3483
3946
  type: Component,
3484
3947
  args: [{
@@ -3519,7 +3982,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
3519
3982
  <kendo-searchbar #searchbar
3520
3983
  [role]="'combobox'"
3521
3984
  [ariaExpanded]="isOpen"
3522
- [ariaControls]="ariaControls"
3523
3985
  [isSuggestable]="suggest"
3524
3986
  [isFilterable]="filterable"
3525
3987
  [isLoading]="isLoading"
@@ -3529,13 +3991,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
3529
3991
  [userInput]="text"
3530
3992
  [suggestedText]="suggestion"
3531
3993
  [disabled]="disabled"
3532
- [readonly]="readonly"
3994
+ [readonly]="readonly || this.isAdaptive"
3533
3995
  [tabIndex]="tabIndex"
3534
3996
  [placeholder]="placeholder"
3535
3997
  (onNavigate)="handleNavigate($event)"
3536
3998
  (valueChange)="searchBarChange($event)"
3537
3999
  (onBlur)="handleBlur()"
3538
4000
  (onFocus)="handleFocus()"
4001
+ (click)="handleClick()"
3539
4002
  ></kendo-searchbar>
3540
4003
  <span
3541
4004
  *ngIf="!loading && !readonly && (clearButton && text?.length)"
@@ -3555,6 +4018,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
3555
4018
  </span>
3556
4019
  <span *ngIf="loading" class="k-icon k-i-loading k-input-loading-icon"></span>
3557
4020
  <ng-template #popupTemplate>
4021
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
4022
+ </ng-template>
4023
+ <ng-container #container></ng-container>
4024
+ <kendo-resize-sensor *ngIf="isOpen || isAdaptiveModeEnabled" (resize)="onResize()"></kendo-resize-sensor>
4025
+
4026
+ <!--adaptive rendering-->
4027
+ <responsive-renderer
4028
+ [sharedPopupActionSheetTemplate]="sharedPopupActionSheetTemplate"
4029
+ [isActionSheetExpanded]="isActionSheetExpanded"
4030
+ [title]="title"
4031
+ [showTextInput]="true"
4032
+ [subtitle]="subtitle"
4033
+ (closePopup)="togglePopup(false)"
4034
+ (textInputChange)="onFilterChange($event)"
4035
+ (navigate)="handleNavigate($event)"
4036
+ [placeholder]="placeholder"
4037
+ >
4038
+ </responsive-renderer>
4039
+
4040
+ <ng-template #sharedPopupActionSheetTemplate>
3558
4041
  <!--header template-->
3559
4042
  <ng-template *ngIf="headerTemplate"
3560
4043
  [templateContext]="{
@@ -3598,18 +4081,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
3598
4081
  }">
3599
4082
  </ng-template>
3600
4083
  </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
4084
  `
3606
4085
  }]
3607
- }], ctorParameters: function () { 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: [{
4086
+ }], ctorParameters: function () { 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: [{
3608
4087
  type: Optional
3609
4088
  }, {
3610
4089
  type: Inject,
3611
4090
  args: [TOUCH_ENABLED]
3612
- }] }]; }, propDecorators: { highlightFirst: [{
4091
+ }] }]; }, propDecorators: { responsiveRendererComponent: [{
4092
+ type: ViewChild,
4093
+ args: [ResponsiveRendererComponent]
4094
+ }], highlightFirst: [{
3613
4095
  type: Input
3614
4096
  }], focusableId: [{
3615
4097
  type: Input
@@ -3621,6 +4103,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
3621
4103
  type: Input
3622
4104
  }], placeholder: [{
3623
4105
  type: Input
4106
+ }], adaptiveMode: [{
4107
+ type: Input
4108
+ }], title: [{
4109
+ type: Input
4110
+ }], subtitle: [{
4111
+ type: Input
3624
4112
  }], popupSettings: [{
3625
4113
  type: Input
3626
4114
  }], listHeight: [{
@@ -3816,6 +4304,10 @@ class ComboBoxComponent {
3816
4304
  this.cdr = cdr;
3817
4305
  this.renderer = renderer;
3818
4306
  this.touchEnabled = touchEnabled;
4307
+ /**
4308
+ * @hidden
4309
+ */
4310
+ this.animationDuration = animationDuration;
3819
4311
  /**
3820
4312
  * @hidden
3821
4313
  */
@@ -3885,12 +4377,15 @@ class ComboBoxComponent {
3885
4377
  */
3886
4378
  this.placeholder = "";
3887
4379
  /**
3888
- * Sets the height of the suggestions list. By default, `listHeight` is 200px.
3889
- *
3890
- * > The `listHeight` property affects only the list of suggestions and not the whole popup container.
3891
- * > To set the height of the popup container, use `popupSettings.height`.
4380
+ * Enables or disables the adaptive mode. By default the adaptive rendering is disabled.
4381
+ */
4382
+ this.adaptiveMode = 'none';
4383
+ /**
4384
+ * Sets the title of the ActionSheet that is rendered instead of the Popup when using small screen devices.
4385
+ * By default the ActionSheet title uses the text provided for the label of the AutoComplete.
3892
4386
  */
3893
- this.listHeight = 200;
4387
+ this.title = '';
4388
+ this._listHeight = 200;
3894
4389
  /**
3895
4390
  * Enables the auto-completion of the text based on the first data item.
3896
4391
  */
@@ -3965,6 +4460,10 @@ class ComboBoxComponent {
3965
4460
  this.onBlur = new EventEmitter();
3966
4461
  this.widgetClasses = true;
3967
4462
  this._isFocused = false;
4463
+ /**
4464
+ * @hidden
4465
+ */
4466
+ this.windowSize = 'large';
3968
4467
  this.listBoxId = `k-${guid()}`;
3969
4468
  this.optionPrefix = `k-${guid()}`;
3970
4469
  this.onChangeCallback = (_) => { };
@@ -3994,6 +4493,18 @@ class ComboBoxComponent {
3994
4493
  this.direction = localization.rtl ? 'rtl' : 'ltr';
3995
4494
  this.data = [];
3996
4495
  }
4496
+ /**
4497
+ * @hidden
4498
+ */
4499
+ get actionSheet() {
4500
+ return this.responsiveRendererComponent?.actionSheet;
4501
+ }
4502
+ /**
4503
+ * @hidden
4504
+ */
4505
+ get actionSheetSearchBar() {
4506
+ return this.responsiveRendererComponent?.actionSheetSearchBar;
4507
+ }
3997
4508
  set text(text) {
3998
4509
  this._text = isPresent(text) ? text.toString() : "";
3999
4510
  }
@@ -4095,6 +4606,22 @@ class ComboBoxComponent {
4095
4606
  }
4096
4607
  return this._valuePrimitive;
4097
4608
  }
4609
+ /**
4610
+ * Sets the subtitle of the ActionSheet that is rendered instead of the Popup when using small screen devices.
4611
+ * By default the ActionSheet subtitle uses the text provided for the `placeholder` of the AutoComplete.
4612
+ */
4613
+ set subtitle(_subtitle) {
4614
+ this._subtitle = _subtitle;
4615
+ }
4616
+ get subtitle() {
4617
+ return this._subtitle || this.placeholder;
4618
+ }
4619
+ /**
4620
+ * @hidden
4621
+ */
4622
+ get isAdaptiveModeEnabled() {
4623
+ return this.adaptiveMode === 'auto';
4624
+ }
4098
4625
  /**
4099
4626
  * Configures the popup of the ComboBox.
4100
4627
  *
@@ -4111,6 +4638,24 @@ class ComboBoxComponent {
4111
4638
  get popupSettings() {
4112
4639
  return this._popupSettings;
4113
4640
  }
4641
+ /**
4642
+ * Sets the height of the options list in the popup. By default, `listHeight` is 200px.
4643
+ *
4644
+ * > The `listHeight` property affects only the list of options and not the whole popup container.
4645
+ * > To set the height of the popup container, use `popupSettings.height`.
4646
+ *
4647
+ * > When using `adaptiveMode` and the screen size is `small` or `medium` the `listHeight` property is set to null.
4648
+ */
4649
+ set listHeight(_listHeight) {
4650
+ this._listHeight = _listHeight;
4651
+ }
4652
+ ;
4653
+ get listHeight() {
4654
+ if (this.isAdaptive) {
4655
+ return;
4656
+ }
4657
+ return this._listHeight;
4658
+ }
4114
4659
  /**
4115
4660
  * Defines a Boolean function that is executed for each data item in the component
4116
4661
  * ([see examples]({% slug disableditems_combobox %})). Determines whether the item will be disabled.
@@ -4227,6 +4772,19 @@ class ComboBoxComponent {
4227
4772
  return 'visible';
4228
4773
  }
4229
4774
  }
4775
+ /**
4776
+ * @hidden
4777
+ */
4778
+ get isActionSheetExpanded() {
4779
+ return this.actionSheet?.expanded;
4780
+ }
4781
+ ;
4782
+ /**
4783
+ * @hidden
4784
+ */
4785
+ get isAdaptive() {
4786
+ return this.isAdaptiveModeEnabled && this.windowSize !== 'large';
4787
+ }
4230
4788
  get popupWidth() {
4231
4789
  let wrapperOffsetWidth = 0;
4232
4790
  if (isDocumentAvailable()) {
@@ -4249,6 +4807,11 @@ class ComboBoxComponent {
4249
4807
  this.attachSelectClickHandler();
4250
4808
  this.setComponentClasses();
4251
4809
  }
4810
+ ngAfterViewInit() {
4811
+ this.windowSize = windowSize();
4812
+ this.cdr.detectChanges();
4813
+ this.renderer.setAttribute(this.actionSheet?.element.nativeElement, 'style', '--kendo-actionsheet-height: 60vh; --kendo-actionsheet-max-height: none');
4814
+ }
4252
4815
  createValueStream() {
4253
4816
  const valueStream = this.valueSubject.pipe(filter((candidate) => {
4254
4817
  const current = getter(this.value, this.valueField);
@@ -4449,7 +5012,7 @@ class ComboBoxComponent {
4449
5012
  }
4450
5013
  }
4451
5014
  /**
4452
- * Toggles the visibility of the popup. If you use the `toggle` method to open or close the popup,
5015
+ * Toggles the visibility of the popup or actionSheet. If you use the `toggle` method to open or close the popup or actionSheet,
4453
5016
  * the `open` and `close` events will not be fired.
4454
5017
  *
4455
5018
  * @param open - The state of the popup.
@@ -4462,10 +5025,19 @@ class ComboBoxComponent {
4462
5025
  });
4463
5026
  }
4464
5027
  /**
4465
- * Returns the current open state of the popup.
5028
+ * Returns the current open state. Returns `true` if the popup or actionSheet is open.
4466
5029
  */
4467
5030
  get isOpen() {
4468
- return this._open;
5031
+ return isTruthy(this._open || this.isActionSheetExpanded);
5032
+ }
5033
+ /**
5034
+ * @hidden
5035
+ */
5036
+ handleClick() {
5037
+ this.windowSize = windowSize();
5038
+ if (this.isAdaptive) {
5039
+ this.togglePopup(true);
5040
+ }
4469
5041
  }
4470
5042
  /**
4471
5043
  * Resets the value of the ComboBox.
@@ -4548,7 +5120,14 @@ class ComboBoxComponent {
4548
5120
  * @hidden
4549
5121
  */
4550
5122
  onResize() {
4551
- if (this.isOpen) {
5123
+ if (this.isAdaptiveModeEnabled && this.windowSize !== windowSize()) {
5124
+ if (this.isOpen) {
5125
+ this.togglePopup(false);
5126
+ }
5127
+ this.windowSize = windowSize();
5128
+ this.cdr.detectChanges();
5129
+ }
5130
+ if (this.isOpen && !this.isActionSheetExpanded) {
4552
5131
  const popupWrapper = this.popupRef.popupElement;
4553
5132
  const { min, max } = this.popupWidth;
4554
5133
  popupWrapper.style.minWidth = min;
@@ -4654,13 +5233,7 @@ class ComboBoxComponent {
4654
5233
  return result;
4655
5234
  }
4656
5235
  search(text, startFrom = 0) {
4657
- let index;
4658
- if (text.length && this.dataService.itemsCount) {
4659
- index = this.dataService.findIndex(this.findIndexPredicate(text), startFrom);
4660
- }
4661
- else {
4662
- index = -1;
4663
- }
5236
+ const index = this.findIndex(text, startFrom);
4664
5237
  if (this.disabledItemsService.isIndexDisabled(index)) {
4665
5238
  if (index + 1 < this.dataService.itemsCount) {
4666
5239
  this.search(text, index + 1);
@@ -4676,6 +5249,18 @@ class ComboBoxComponent {
4676
5249
  }
4677
5250
  }
4678
5251
  }
5252
+ /**
5253
+ * @hidden
5254
+ */
5255
+ onAdaptiveTextBoxChange(text) {
5256
+ if (this.filterable && this.filterText !== text) {
5257
+ this.filterText = text;
5258
+ this.filterChange.emit(text);
5259
+ }
5260
+ else {
5261
+ this.search(text);
5262
+ }
5263
+ }
4679
5264
  /**
4680
5265
  * @hidden
4681
5266
  */
@@ -4733,6 +5318,10 @@ class ComboBoxComponent {
4733
5318
  ((action === NavigationAction.Enter && this.isOpen) || action !== NavigationAction.Enter)) {
4734
5319
  event.preventDefault();
4735
5320
  }
5321
+ if (action === NavigationAction.Tab && this.isActionSheetExpanded) {
5322
+ event.stopImmediatePropagation();
5323
+ this.togglePopup(false);
5324
+ }
4736
5325
  }
4737
5326
  handleEnter() {
4738
5327
  const text = this.text;
@@ -4764,32 +5353,34 @@ class ComboBoxComponent {
4764
5353
  * @hidden
4765
5354
  */
4766
5355
  handleBlur() {
4767
- this._filtering = false;
4768
- this.searchbar.input.nativeElement.scrollLeft = 0; // Firefox doesn't auto-scroll to the left on blur like other browsers
4769
- this.isFocused = false;
4770
- const unresolvedSelection = getter(this.dataItem, this.valueField) !== getter(this.value, this.valueField);
4771
- const currentText = this.searchbar.value;
4772
- const textHasChanged = currentText !== (getter(this.dataItem, this.textField) || '');
4773
- const valueHasChanged = unresolvedSelection || textHasChanged;
4774
- const runInZone = valueHasChanged || hasObservers(this.onBlur) || hasObservers(this.close) || isUntouched(this.wrapper.nativeElement);
4775
- if (runInZone) {
4776
- this.zone.run(() => {
4777
- if (valueHasChanged) {
4778
- const lowerCaseMatch = isPresent(this.focusedItemText) && this.focusedItemText.toLowerCase() === currentText.toLowerCase();
4779
- if (lowerCaseMatch || unresolvedSelection) {
4780
- this.selectionService.change(this.selectionService.focused);
4781
- }
4782
- else {
4783
- this.change(currentText, true);
5356
+ if (!this.isActionSheetExpanded) {
5357
+ this._filtering = false;
5358
+ this.searchbar.input.nativeElement.scrollLeft = 0; // Firefox doesn't auto-scroll to the left on blur like other browsers
5359
+ this.isFocused = false;
5360
+ const unresolvedSelection = getter(this.dataItem, this.valueField) !== getter(this.value, this.valueField);
5361
+ const currentText = this.searchbar.value;
5362
+ const textHasChanged = currentText !== (getter(this.dataItem, this.textField) || '');
5363
+ const valueHasChanged = unresolvedSelection || textHasChanged;
5364
+ const runInZone = valueHasChanged || hasObservers(this.onBlur) || hasObservers(this.close) || isUntouched(this.wrapper.nativeElement);
5365
+ if (runInZone) {
5366
+ this.zone.run(() => {
5367
+ if (valueHasChanged) {
5368
+ const lowerCaseMatch = isPresent(this.focusedItemText) && this.focusedItemText.toLowerCase() === currentText.toLowerCase();
5369
+ if (lowerCaseMatch || unresolvedSelection) {
5370
+ this.selectionService.change(this.selectionService.focused);
5371
+ }
5372
+ else {
5373
+ this.change(currentText, true);
5374
+ }
4784
5375
  }
4785
- }
4786
- this.onBlur.emit();
4787
- this.onTouchedCallback();
5376
+ this.onBlur.emit();
5377
+ this.onTouchedCallback();
5378
+ this.togglePopup(false);
5379
+ });
5380
+ }
5381
+ else {
4788
5382
  this.togglePopup(false);
4789
- });
4790
- }
4791
- else {
4792
- this.togglePopup(false);
5383
+ }
4793
5384
  }
4794
5385
  }
4795
5386
  /**
@@ -4852,6 +5443,9 @@ class ComboBoxComponent {
4852
5443
  }
4853
5444
  else {
4854
5445
  this.valueSubject.next(candidate);
5446
+ if (this.isActionSheetExpanded) {
5447
+ this.togglePopup(false);
5448
+ }
4855
5449
  }
4856
5450
  }
4857
5451
  emitValueChange() {
@@ -4925,6 +5519,11 @@ class ComboBoxComponent {
4925
5519
  if (this.virtual) {
4926
5520
  this.virtual.skip = 0;
4927
5521
  }
5522
+ this.windowSize = windowSize();
5523
+ if (this.isAdaptive) {
5524
+ this.openActionSheet();
5525
+ return;
5526
+ }
4928
5527
  const horizontalAlign = this.direction === "rtl" ? "right" : "left";
4929
5528
  const anchorPosition = { horizontal: horizontalAlign, vertical: "bottom" };
4930
5529
  const popupPosition = { horizontal: horizontalAlign, vertical: "top" };
@@ -4956,7 +5555,9 @@ class ComboBoxComponent {
4956
5555
  }
4957
5556
  this.popupRef.popupOpen.subscribe(() => {
4958
5557
  this.cdr.detectChanges();
5558
+ setListBoxAriaLabelLebBy(this.optionsList, this.searchbar.input, this.renderer);
4959
5559
  this.optionsList.scrollToItem(this.selectionService.focused);
5560
+ this.selectionService.focus(this.selectionService.focused);
4960
5561
  this.opened.emit();
4961
5562
  });
4962
5563
  this.popupRef.popupClose.subscribe(() => {
@@ -4967,7 +5568,11 @@ class ComboBoxComponent {
4967
5568
  _toggle(open) {
4968
5569
  this._open = open;
4969
5570
  this.destroyPopup();
5571
+ if (this.isActionSheetExpanded) {
5572
+ this.closeActionSheet();
5573
+ }
4970
5574
  if (this._open) {
5575
+ this.windowSize = windowSize();
4971
5576
  this.createPopup();
4972
5577
  }
4973
5578
  }
@@ -5023,9 +5628,40 @@ class ComboBoxComponent {
5023
5628
  this.renderer.addClass(this.wrapper.nativeElement, getFillModeClass('input', this.fillMode));
5024
5629
  }
5025
5630
  }
5631
+ findIndex(value, startFrom = 0) {
5632
+ let index;
5633
+ if (value && value.length && this.dataService.itemsCount) {
5634
+ index = this.dataService.findIndex(this.findIndexPredicate(value), startFrom);
5635
+ }
5636
+ else {
5637
+ index = -1;
5638
+ }
5639
+ ;
5640
+ return index;
5641
+ }
5642
+ closeActionSheet() {
5643
+ this.actionSheet.toggle(false);
5644
+ this.actionSheetSearchBar.value = '';
5645
+ this.filterable && this.filterChange.emit('');
5646
+ this.searchbar.input.nativeElement.focus();
5647
+ this.closed.emit();
5648
+ }
5649
+ openActionSheet() {
5650
+ this.windowSize = windowSize();
5651
+ this.actionSheet.toggle(true);
5652
+ this.cdr.detectChanges();
5653
+ setListBoxAriaLabelLebBy(this.optionsList, this.searchbar.input, this.renderer);
5654
+ this.title = setActionSheetTitle(this.searchbar.input, this.title);
5655
+ updateActionSheetAdaptiveAppearance(this.actionSheet, this.windowSize, this.renderer);
5656
+ this.cdr.detectChanges();
5657
+ this.opened.emit();
5658
+ this.optionsList.scrollToItem(this.selectionService.focused);
5659
+ this.selectionService.focus(this.selectionService.focused);
5660
+ this.actionSheetSearchBar.focus();
5661
+ }
5026
5662
  }
5027
- 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 });
5028
- 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: [
5663
+ 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 });
5664
+ 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: [
5029
5665
  COMBOBOX_VALUE_ACCESSOR,
5030
5666
  DataService,
5031
5667
  SelectionService,
@@ -5042,7 +5678,7 @@ ComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
5042
5678
  {
5043
5679
  provide: KendoInput, useExisting: forwardRef(() => ComboBoxComponent)
5044
5680
  }
5045
- ], 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: `
5681
+ ], 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: `
5046
5682
  <ng-container kendoComboBoxLocalizedMessages
5047
5683
  i18n-noDataText="kendo.combobox.noDataText|The text displayed in the popup when there are no items"
5048
5684
  noDataText="NO DATA FOUND"
@@ -5069,13 +5705,14 @@ ComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
5069
5705
  [userInput]="text"
5070
5706
  [suggestedText]="getSuggestion()"
5071
5707
  [disabled]="disabled"
5072
- [readonly]="readonly"
5708
+ [readonly]="readonly || isAdaptive"
5073
5709
  [tabIndex]="tabIndex"
5074
5710
  [placeholder]="placeholder"
5075
5711
  (onNavigate)="handleNavigate($event)"
5076
5712
  (valueChange)="searchBarChange($event)"
5077
5713
  (onBlur)="handleBlur()"
5078
5714
  (onFocus)="handleFocus()"
5715
+ (click)="handleClick()"
5079
5716
  ></kendo-searchbar>
5080
5717
  <span
5081
5718
  *ngIf="clearButton && !loading && !disabled && !readonly && text?.length"
@@ -5115,6 +5752,25 @@ ComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
5115
5752
  <span *ngIf="loading || iconClass" class="k-button-icon k-icon" [ngClass]="buttonClasses"></span>
5116
5753
  </button>
5117
5754
  <ng-template #popupTemplate>
5755
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
5756
+ </ng-template>
5757
+ <kendo-resize-sensor *ngIf="isOpen || isAdaptiveModeEnabled" (resize)="onResize()"></kendo-resize-sensor>
5758
+ <ng-container #container></ng-container>
5759
+
5760
+ <!--adaptive rendering-->
5761
+ <responsive-renderer
5762
+ [sharedPopupActionSheetTemplate]="sharedPopupActionSheetTemplate"
5763
+ [isActionSheetExpanded]="isActionSheetExpanded"
5764
+ [title]="title"
5765
+ [showTextInput]="true"
5766
+ [subtitle]="subtitle"
5767
+ (closePopup)="togglePopup(false)"
5768
+ (textInputChange)="onAdaptiveTextBoxChange($event)"
5769
+ (navigate)="handleNavigate($event)"
5770
+ [placeholder]="placeholder"
5771
+ >
5772
+ </responsive-renderer>
5773
+ <ng-template #sharedPopupActionSheetTemplate>
5118
5774
  <!--header template-->
5119
5775
  <ng-template *ngIf="headerTemplate"
5120
5776
  [templateContext]="{
@@ -5158,11 +5814,7 @@ ComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
5158
5814
  }">
5159
5815
  </ng-template>
5160
5816
  </ng-template>
5161
- <ng-template [ngIf]="isOpen">
5162
- <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
5163
- </ng-template>
5164
- <ng-container #container></ng-container>
5165
- `, 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"] }] });
5817
+ `, 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"] }] });
5166
5818
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ComboBoxComponent, decorators: [{
5167
5819
  type: Component,
5168
5820
  args: [{
@@ -5213,13 +5865,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
5213
5865
  [userInput]="text"
5214
5866
  [suggestedText]="getSuggestion()"
5215
5867
  [disabled]="disabled"
5216
- [readonly]="readonly"
5868
+ [readonly]="readonly || isAdaptive"
5217
5869
  [tabIndex]="tabIndex"
5218
5870
  [placeholder]="placeholder"
5219
5871
  (onNavigate)="handleNavigate($event)"
5220
5872
  (valueChange)="searchBarChange($event)"
5221
5873
  (onBlur)="handleBlur()"
5222
5874
  (onFocus)="handleFocus()"
5875
+ (click)="handleClick()"
5223
5876
  ></kendo-searchbar>
5224
5877
  <span
5225
5878
  *ngIf="clearButton && !loading && !disabled && !readonly && text?.length"
@@ -5259,6 +5912,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
5259
5912
  <span *ngIf="loading || iconClass" class="k-button-icon k-icon" [ngClass]="buttonClasses"></span>
5260
5913
  </button>
5261
5914
  <ng-template #popupTemplate>
5915
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
5916
+ </ng-template>
5917
+ <kendo-resize-sensor *ngIf="isOpen || isAdaptiveModeEnabled" (resize)="onResize()"></kendo-resize-sensor>
5918
+ <ng-container #container></ng-container>
5919
+
5920
+ <!--adaptive rendering-->
5921
+ <responsive-renderer
5922
+ [sharedPopupActionSheetTemplate]="sharedPopupActionSheetTemplate"
5923
+ [isActionSheetExpanded]="isActionSheetExpanded"
5924
+ [title]="title"
5925
+ [showTextInput]="true"
5926
+ [subtitle]="subtitle"
5927
+ (closePopup)="togglePopup(false)"
5928
+ (textInputChange)="onAdaptiveTextBoxChange($event)"
5929
+ (navigate)="handleNavigate($event)"
5930
+ [placeholder]="placeholder"
5931
+ >
5932
+ </responsive-renderer>
5933
+ <ng-template #sharedPopupActionSheetTemplate>
5262
5934
  <!--header template-->
5263
5935
  <ng-template *ngIf="headerTemplate"
5264
5936
  [templateContext]="{
@@ -5302,18 +5974,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
5302
5974
  }">
5303
5975
  </ng-template>
5304
5976
  </ng-template>
5305
- <ng-template [ngIf]="isOpen">
5306
- <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
5307
- </ng-template>
5308
- <ng-container #container></ng-container>
5309
5977
  `
5310
5978
  }]
5311
- }], ctorParameters: function () { 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: [{
5979
+ }], ctorParameters: function () { 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: [{
5312
5980
  type: Optional
5313
5981
  }, {
5314
5982
  type: Inject,
5315
5983
  args: [TOUCH_ENABLED]
5316
- }] }]; }, propDecorators: { focusableId: [{
5984
+ }] }]; }, propDecorators: { responsiveRendererComponent: [{
5985
+ type: ViewChild,
5986
+ args: [ResponsiveRendererComponent]
5987
+ }], focusableId: [{
5317
5988
  type: Input
5318
5989
  }], allowCustom: [{
5319
5990
  type: Input
@@ -5331,6 +6002,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
5331
6002
  type: Input
5332
6003
  }], placeholder: [{
5333
6004
  type: Input
6005
+ }], adaptiveMode: [{
6006
+ type: Input
6007
+ }], title: [{
6008
+ type: Input
6009
+ }], subtitle: [{
6010
+ type: Input
5334
6011
  }], popupSettings: [{
5335
6012
  type: Input
5336
6013
  }], listHeight: [{
@@ -5548,6 +6225,14 @@ class DropDownListComponent {
5548
6225
  this.cdr = cdr;
5549
6226
  this.touchEnabled = touchEnabled;
5550
6227
  this.injector = injector;
6228
+ /**
6229
+ * @hidden
6230
+ */
6231
+ this.animationDuration = animationDuration;
6232
+ /**
6233
+ * @hidden
6234
+ */
6235
+ this.xIcon = xIcon;
5551
6236
  /**
5552
6237
  * @hidden
5553
6238
  */
@@ -5558,12 +6243,24 @@ class DropDownListComponent {
5558
6243
  this.caretAltDownIcon = caretAltDownIcon;
5559
6244
  this.listBoxId = `k-${guid()}`;
5560
6245
  /**
5561
- * Sets the height of the options list. By default, `listHeight` is 200px.
5562
- *
5563
- * > The `listHeight` property affects only the list of options and not the whole popup container.
5564
- * > To set the height of the popup container, use `popupSettings.height`.
6246
+ * Enables or disables the adaptive mode. By default the adaptive rendering is disabled.
6247
+ */
6248
+ this.adaptiveMode = 'none';
6249
+ /**
6250
+ * Sets the title of the ActionSheet that is rendered instead of the Popup when using small screen devices.
6251
+ * By default the ActionSheet title uses the text provided for the label of the AutoComplete.
5565
6252
  */
5566
- this.listHeight = 200;
6253
+ this.title = '';
6254
+ /**
6255
+ * Sets the subtitle of the ActionSheet that is rendered instead of the Popup when using small screen devices.
6256
+ * By default the ActionSheet subtitle uses the text provided for the `placeholder` of the AutoComplete.
6257
+ */
6258
+ this.subtitle = '';
6259
+ /**
6260
+ * @hidden
6261
+ */
6262
+ this.windowSize = 'large';
6263
+ this._listHeight = 200;
5567
6264
  /**
5568
6265
  * Sets the read-only state of the component.
5569
6266
  */
@@ -5663,6 +6360,18 @@ class DropDownListComponent {
5663
6360
  this.subscribeFocusEvents();
5664
6361
  this.popupMouseDownHandler = this.onMouseDown.bind(this);
5665
6362
  }
6363
+ /**
6364
+ * @hidden
6365
+ */
6366
+ get actionSheet() {
6367
+ return this.responsiveRendererComponent?.actionSheet;
6368
+ }
6369
+ /**
6370
+ * @hidden
6371
+ */
6372
+ get actionSheetSearchBar() {
6373
+ return this.responsiveRendererComponent?.actionSheetSearchBar;
6374
+ }
5666
6375
  get width() {
5667
6376
  const wrapperWidth = isDocumentAvailable() ? this.wrapper.nativeElement.offsetWidth : 0;
5668
6377
  const width = this.popupSettings.width || wrapperWidth;
@@ -5704,6 +6413,14 @@ class DropDownListComponent {
5704
6413
  }
5705
6414
  return appendTo === 'component' ? this.container : appendTo;
5706
6415
  }
6416
+ /**
6417
+ * @hidden
6418
+ */
6419
+ onFilterChange(text) {
6420
+ if (this.filterable) {
6421
+ this.filterChange.emit(text);
6422
+ }
6423
+ }
5707
6424
  /**
5708
6425
  * @hidden
5709
6426
  */
@@ -5751,6 +6468,25 @@ class DropDownListComponent {
5751
6468
  get value() {
5752
6469
  return this._value;
5753
6470
  }
6471
+ /**
6472
+ * @hidden
6473
+ */
6474
+ get isAdaptiveModeEnabled() {
6475
+ return this.adaptiveMode === 'auto';
6476
+ }
6477
+ /**
6478
+ * @hidden
6479
+ */
6480
+ get isActionSheetExpanded() {
6481
+ return this.actionSheet?.expanded;
6482
+ }
6483
+ ;
6484
+ /**
6485
+ * @hidden
6486
+ */
6487
+ get isAdaptive() {
6488
+ return this.isAdaptiveModeEnabled && this.windowSize !== 'large';
6489
+ }
5754
6490
  /**
5755
6491
  * Configures the popup of the DropDownList.
5756
6492
  *
@@ -5767,6 +6503,24 @@ class DropDownListComponent {
5767
6503
  get popupSettings() {
5768
6504
  return this._popupSettings;
5769
6505
  }
6506
+ /**
6507
+ * Sets the height of the options list in the popup. By default, `listHeight` is 200px.
6508
+ *
6509
+ * > The `listHeight` property affects only the list of options and not the whole popup container.
6510
+ * > To set the height of the popup container, use `popupSettings.height`.
6511
+ *
6512
+ * > When using `adaptiveMode` and the screen size is `small` or `medium` the `listHeight` property is set to null.
6513
+ */
6514
+ set listHeight(_listHeight) {
6515
+ this._listHeight = _listHeight;
6516
+ }
6517
+ ;
6518
+ get listHeight() {
6519
+ if (this.isAdaptive) {
6520
+ return;
6521
+ }
6522
+ return this._listHeight;
6523
+ }
5770
6524
  /**
5771
6525
  * Defines a Boolean function that is executed for each data item in the component
5772
6526
  * ([see examples]({% slug disableditems_ddl %})). Determines whether the item will be disabled.
@@ -5911,7 +6665,13 @@ class DropDownListComponent {
5911
6665
  * @hidden
5912
6666
  */
5913
6667
  onResize() {
5914
- if (this._open) {
6668
+ if (this.isAdaptiveModeEnabled && this.windowSize !== windowSize()) {
6669
+ if (this.isOpen) {
6670
+ this.togglePopup(false);
6671
+ }
6672
+ this.windowSize = windowSize();
6673
+ }
6674
+ if (this.isOpen && !this.isActionSheetExpanded) {
5915
6675
  const popupWrapper = this.popupRef.popupElement;
5916
6676
  const { min, max } = this.width;
5917
6677
  popupWrapper.style.minWidth = min;
@@ -5954,7 +6714,10 @@ class DropDownListComponent {
5954
6714
  /**
5955
6715
  * @hidden
5956
6716
  */
5957
- keydown(event) {
6717
+ keydown(event, input) {
6718
+ if (input) {
6719
+ event.stopPropagation();
6720
+ }
5958
6721
  const firstIndex = isPresent(this.defaultItem) ? -1 : 0;
5959
6722
  const focused = isNaN(this.selectionService.focused) ? this.firstFocusableIndex(firstIndex) : this.selectionService.focused;
5960
6723
  let offset = 0;
@@ -5996,6 +6759,9 @@ class DropDownListComponent {
5996
6759
  ) {
5997
6760
  eventData.preventDefault();
5998
6761
  }
6762
+ if (action === NavigationAction.Tab && this.isActionSheetExpanded) {
6763
+ this.togglePopup(false);
6764
+ }
5999
6765
  }
6000
6766
  /**
6001
6767
  * @hidden
@@ -6009,10 +6775,11 @@ class DropDownListComponent {
6009
6775
  /**
6010
6776
  * @hidden
6011
6777
  */
6012
- click(event) {
6013
- event.preventDefault();
6014
- this.focus();
6015
- this.togglePopup(!this.isOpen);
6778
+ click() {
6779
+ if (!this.isActionSheetExpanded) {
6780
+ this.focus();
6781
+ this.togglePopup(!this.isOpen);
6782
+ }
6016
6783
  }
6017
6784
  set isFocused(isFocused) {
6018
6785
  this.renderer[isFocused ? 'addClass' : 'removeClass'](this.wrapper.nativeElement, 'k-focus');
@@ -6031,6 +6798,10 @@ class DropDownListComponent {
6031
6798
  this.assignAriaDescribedBy();
6032
6799
  this.setComponentClasses();
6033
6800
  }
6801
+ ngAfterViewInit() {
6802
+ this.windowSize = windowSize();
6803
+ this.renderer.setAttribute(this.actionSheet?.element.nativeElement, 'style', '--kendo-actionsheet-height: 60vh; --kendo-actionsheet-max-height: none');
6804
+ }
6034
6805
  /**
6035
6806
  * @hidden
6036
6807
  * Used by the TextBoxContainer to determine if the component is empty.
@@ -6118,7 +6889,7 @@ class DropDownListComponent {
6118
6889
  }
6119
6890
  }
6120
6891
  /**
6121
- * Toggles the visibility of the popup
6892
+ * Toggles the visibility of the popup or actionSheet
6122
6893
  * ([see example]({% slug openstate_ddl %}#toc-setting-the-initially-opened-component)).
6123
6894
  * If you use the `toggle` method to open or close the popup, the `open` and `close` events will not be fired.
6124
6895
  *
@@ -6135,6 +6906,9 @@ class DropDownListComponent {
6135
6906
  _toggle(open) {
6136
6907
  this._open = open;
6137
6908
  this.destroyPopup();
6909
+ if (this.isActionSheetExpanded) {
6910
+ this.closeActionSheet();
6911
+ }
6138
6912
  if (this._open) {
6139
6913
  this.createPopup();
6140
6914
  }
@@ -6167,10 +6941,10 @@ class DropDownListComponent {
6167
6941
  }
6168
6942
  }
6169
6943
  /**
6170
- * Returns the current open state of the popup.
6944
+ * Returns the current open state. Returns `true` if the popup or actionSheet is open.
6171
6945
  */
6172
6946
  get isOpen() {
6173
- return this._open;
6947
+ return isTruthy(this._open || this.isActionSheetExpanded);
6174
6948
  }
6175
6949
  /**
6176
6950
  * Resets the value of the DropDownList.
@@ -6266,6 +7040,11 @@ class DropDownListComponent {
6266
7040
  if (this.virtual) {
6267
7041
  this.virtual.skip = 0;
6268
7042
  }
7043
+ this.windowSize = windowSize();
7044
+ if (this.isAdaptive) {
7045
+ this.openActionSheet();
7046
+ return;
7047
+ }
6269
7048
  const horizontalAlign = this.direction === "rtl" ? "right" : "left";
6270
7049
  const anchorPosition = { horizontal: horizontalAlign, vertical: "bottom" };
6271
7050
  const popupPosition = { horizontal: horizontalAlign, vertical: "top" };
@@ -6297,7 +7076,9 @@ class DropDownListComponent {
6297
7076
  }
6298
7077
  this.subs.add(this.popupRef.popupOpen.subscribe(() => {
6299
7078
  this.cdr.detectChanges();
7079
+ setListBoxAriaLabelLebBy(this.optionsList, this.wrapper, this.renderer);
6300
7080
  this.optionsList.scrollToItem(this.selectionService.focused);
7081
+ this.selectionService.focus(this.selectionService.focused);
6301
7082
  this.opened.emit();
6302
7083
  }));
6303
7084
  this.subs.add(this.popupRef.popupClose.subscribe(() => {
@@ -6506,26 +7287,28 @@ class DropDownListComponent {
6506
7287
  }
6507
7288
  }
6508
7289
  componentBlur() {
6509
- this.isFocused = false;
6510
- const selectionPresent = isPresent(this.selectionService.selected[0]);
6511
- const valueHasChanged = selectionPresent && getter(this.value, this.valueField) !== getter(this.dataService.itemAt(this.selectionService.selected[0]), this.valueField);
6512
- if (valueHasChanged ||
6513
- hasObservers(this.close) ||
6514
- hasObservers(this.onBlur) ||
6515
- hasObservers(this.filterChange) ||
6516
- isUntouched(this.wrapper.nativeElement)) {
6517
- this._zone.run(() => {
6518
- if (valueHasChanged) {
6519
- this.selectionService.change(this.selectionService.selected[0]);
6520
- }
7290
+ if (!this.isActionSheetExpanded) {
7291
+ this.isFocused = false;
7292
+ const selectionPresent = isPresent(this.selectionService.selected[0]);
7293
+ const valueHasChanged = selectionPresent && getter(this.value, this.valueField) !== getter(this.dataService.itemAt(this.selectionService.selected[0]), this.valueField);
7294
+ if (valueHasChanged ||
7295
+ hasObservers(this.close) ||
7296
+ hasObservers(this.onBlur) ||
7297
+ hasObservers(this.filterChange) ||
7298
+ isUntouched(this.wrapper.nativeElement)) {
7299
+ this._zone.run(() => {
7300
+ if (valueHasChanged) {
7301
+ this.selectionService.change(this.selectionService.selected[0]);
7302
+ }
7303
+ this.togglePopup(false);
7304
+ this.clearFilter();
7305
+ this.onBlur.emit();
7306
+ this.onTouchedCallback();
7307
+ });
7308
+ }
7309
+ else {
6521
7310
  this.togglePopup(false);
6522
- this.clearFilter();
6523
- this.onBlur.emit();
6524
- this.onTouchedCallback();
6525
- });
6526
- }
6527
- else {
6528
- this.togglePopup(false);
7311
+ }
6529
7312
  }
6530
7313
  }
6531
7314
  /**
@@ -6670,6 +7453,15 @@ class DropDownListComponent {
6670
7453
  handleFilter(event) {
6671
7454
  this.filterChange.emit(event.target.value);
6672
7455
  }
7456
+ /**
7457
+ * @hidden
7458
+ */
7459
+ handleClick() {
7460
+ this.windowSize = windowSize();
7461
+ if (this.isAdaptive) {
7462
+ this.togglePopup(true);
7463
+ }
7464
+ }
6673
7465
  /**
6674
7466
  * @hidden
6675
7467
  */
@@ -6697,13 +7489,36 @@ class DropDownListComponent {
6697
7489
  this.renderer.addClass(this.wrapper.nativeElement, getFillModeClass('picker', this.fillMode));
6698
7490
  }
6699
7491
  }
6700
- }
6701
- 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 });
6702
- 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: [
6703
- DROPDOWNLIST_VALUE_ACCESSOR,
6704
- DataService,
6705
- SelectionService,
6706
- NavigationService,
7492
+ closeActionSheet() {
7493
+ this.actionSheet.toggle(false);
7494
+ if (this.filterable) {
7495
+ this.actionSheetSearchBar.value = '';
7496
+ this.filterChange.emit('');
7497
+ }
7498
+ this.closed.emit();
7499
+ }
7500
+ openActionSheet() {
7501
+ this.windowSize = windowSize();
7502
+ this.actionSheet.toggle(true);
7503
+ this.cdr.detectChanges();
7504
+ setListBoxAriaLabelLebBy(this.optionsList, this.wrapper, this.renderer);
7505
+ this.title = setActionSheetTitle(this.wrapper, this.title);
7506
+ updateActionSheetAdaptiveAppearance(this.actionSheet, this.windowSize, this.renderer);
7507
+ this.cdr.detectChanges();
7508
+ this.opened.emit();
7509
+ this.optionsList.scrollToItem(this.selectionService.focused);
7510
+ this.selectionService.focus(this.selectionService.focused);
7511
+ if (this.filterable) {
7512
+ this.actionSheetSearchBar.focus();
7513
+ }
7514
+ }
7515
+ }
7516
+ 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 });
7517
+ 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: [
7518
+ DROPDOWNLIST_VALUE_ACCESSOR,
7519
+ DataService,
7520
+ SelectionService,
7521
+ NavigationService,
6707
7522
  DisabledItemsService,
6708
7523
  LocalizationService,
6709
7524
  {
@@ -6716,7 +7531,7 @@ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
6716
7531
  {
6717
7532
  provide: KendoInput, useExisting: forwardRef(() => DropDownListComponent)
6718
7533
  }
6719
- ], 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: `
7534
+ ], 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: `
6720
7535
  <ng-container kendoDropDownListLocalizedMessages
6721
7536
  i18n-noDataText="kendo.dropdownlist.noDataText|The text displayed in the popup when there are no items"
6722
7537
  noDataText="NO DATA FOUND"
@@ -6763,8 +7578,26 @@ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
6763
7578
  <span *ngIf="loading || iconClass" class="k-button-icon k-icon" [ngClass]="buttonClasses"></span>
6764
7579
  </button>
6765
7580
  <ng-template #popupTemplate>
7581
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
7582
+ </ng-template>
7583
+ <kendo-resize-sensor *ngIf="isOpen || isAdaptiveModeEnabled" (resize)="onResize()"></kendo-resize-sensor>
7584
+ <ng-container #container></ng-container>
7585
+
7586
+ <!--adaptive rendering-->
7587
+ <responsive-renderer
7588
+ [sharedPopupActionSheetTemplate]="sharedPopupActionSheetTemplate"
7589
+ [isActionSheetExpanded]="isActionSheetExpanded"
7590
+ [title]="title"
7591
+ [showTextInput]="filterable"
7592
+ [subtitle]="subtitle"
7593
+ (closePopup)="togglePopup(false)"
7594
+ (textInputChange)="onFilterChange($event)"
7595
+ >
7596
+ </responsive-renderer>
7597
+
7598
+ <ng-template #sharedPopupActionSheetTemplate>
6766
7599
  <!--filterable-->
6767
- <ng-template [ngIf]="filterable">
7600
+ <ng-template [ngIf]="filterable && !isActionSheetExpanded">
6768
7601
  <div class="k-list-filter" (click)="$event.stopImmediatePropagation()">
6769
7602
  <span
6770
7603
  class="k-searchbox k-input"
@@ -6776,6 +7609,7 @@ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
6776
7609
  [svgIcon]="searchIcon">
6777
7610
  </kendo-icon-wrapper>
6778
7611
  <input
7612
+ #searchInput
6779
7613
  role="searchbox"
6780
7614
  aria-autocomplete="list"
6781
7615
  aria-haspopup="listbox"
@@ -6787,10 +7621,11 @@ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
6787
7621
  [dir]="direction"
6788
7622
  [(ngModel)]="filterText"
6789
7623
  class="k-input-inner"
6790
- (keydown)="keydown($event)"
7624
+ (keydown)="keydown($event, searchInput)"
6791
7625
  (input)="handleFilter($event)"
6792
7626
  (focus)="onFilterFocus()"
6793
- (blur)="blurFilterInput()" />
7627
+ (blur)="blurFilterInput()"
7628
+ (click)="handleClick()" />
6794
7629
  </span>
6795
7630
  </div>
6796
7631
  </ng-template>
@@ -6826,7 +7661,7 @@ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
6826
7661
  templateRef: headerTemplate.templateRef
6827
7662
  }">
6828
7663
  </ng-template>
6829
- <!--list-->
7664
+ <!--list-->
6830
7665
  <kendo-list
6831
7666
  #optionsList
6832
7667
  [id]="listBoxId"
@@ -6863,11 +7698,7 @@ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
6863
7698
  }">
6864
7699
  </ng-template>
6865
7700
  </ng-template>
6866
- <ng-template [ngIf]="isOpen">
6867
- <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
6868
- </ng-template>
6869
- <ng-container #container></ng-container>
6870
- `, 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"] }] });
7701
+ `, 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"] }] });
6871
7702
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: DropDownListComponent, decorators: [{
6872
7703
  type: Component,
6873
7704
  args: [{
@@ -6938,8 +7769,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
6938
7769
  <span *ngIf="loading || iconClass" class="k-button-icon k-icon" [ngClass]="buttonClasses"></span>
6939
7770
  </button>
6940
7771
  <ng-template #popupTemplate>
7772
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
7773
+ </ng-template>
7774
+ <kendo-resize-sensor *ngIf="isOpen || isAdaptiveModeEnabled" (resize)="onResize()"></kendo-resize-sensor>
7775
+ <ng-container #container></ng-container>
7776
+
7777
+ <!--adaptive rendering-->
7778
+ <responsive-renderer
7779
+ [sharedPopupActionSheetTemplate]="sharedPopupActionSheetTemplate"
7780
+ [isActionSheetExpanded]="isActionSheetExpanded"
7781
+ [title]="title"
7782
+ [showTextInput]="filterable"
7783
+ [subtitle]="subtitle"
7784
+ (closePopup)="togglePopup(false)"
7785
+ (textInputChange)="onFilterChange($event)"
7786
+ >
7787
+ </responsive-renderer>
7788
+
7789
+ <ng-template #sharedPopupActionSheetTemplate>
6941
7790
  <!--filterable-->
6942
- <ng-template [ngIf]="filterable">
7791
+ <ng-template [ngIf]="filterable && !isActionSheetExpanded">
6943
7792
  <div class="k-list-filter" (click)="$event.stopImmediatePropagation()">
6944
7793
  <span
6945
7794
  class="k-searchbox k-input"
@@ -6951,6 +7800,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
6951
7800
  [svgIcon]="searchIcon">
6952
7801
  </kendo-icon-wrapper>
6953
7802
  <input
7803
+ #searchInput
6954
7804
  role="searchbox"
6955
7805
  aria-autocomplete="list"
6956
7806
  aria-haspopup="listbox"
@@ -6962,10 +7812,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
6962
7812
  [dir]="direction"
6963
7813
  [(ngModel)]="filterText"
6964
7814
  class="k-input-inner"
6965
- (keydown)="keydown($event)"
7815
+ (keydown)="keydown($event, searchInput)"
6966
7816
  (input)="handleFilter($event)"
6967
7817
  (focus)="onFilterFocus()"
6968
- (blur)="blurFilterInput()" />
7818
+ (blur)="blurFilterInput()"
7819
+ (click)="handleClick()" />
6969
7820
  </span>
6970
7821
  </div>
6971
7822
  </ng-template>
@@ -7001,7 +7852,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
7001
7852
  templateRef: headerTemplate.templateRef
7002
7853
  }">
7003
7854
  </ng-template>
7004
- <!--list-->
7855
+ <!--list-->
7005
7856
  <kendo-list
7006
7857
  #optionsList
7007
7858
  [id]="listBoxId"
@@ -7038,18 +7889,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
7038
7889
  }">
7039
7890
  </ng-template>
7040
7891
  </ng-template>
7041
- <ng-template [ngIf]="isOpen">
7042
- <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
7043
- </ng-template>
7044
- <ng-container #container></ng-container>
7045
7892
  `
7046
7893
  }]
7047
- }], ctorParameters: function () { 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: [{
7894
+ }], ctorParameters: function () { 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: [{
7048
7895
  type: Optional
7049
7896
  }, {
7050
7897
  type: Inject,
7051
7898
  args: [TOUCH_ENABLED]
7052
- }] }, { type: i0.Injector }]; }, propDecorators: { ariaControls: [{
7899
+ }] }, { type: i0.Injector }]; }, propDecorators: { responsiveRendererComponent: [{
7900
+ type: ViewChild,
7901
+ args: [ResponsiveRendererComponent]
7902
+ }], ariaControls: [{
7053
7903
  type: HostBinding,
7054
7904
  args: ['attr.aria-controls']
7055
7905
  }], iconClass: [{
@@ -7064,6 +7914,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
7064
7914
  type: Input
7065
7915
  }], valueField: [{
7066
7916
  type: Input
7917
+ }], adaptiveMode: [{
7918
+ type: Input
7919
+ }], title: [{
7920
+ type: Input
7921
+ }], subtitle: [{
7922
+ type: Input
7067
7923
  }], popupSettings: [{
7068
7924
  type: Input
7069
7925
  }], listHeight: [{
@@ -7206,7 +8062,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
7206
8062
  args: ['keypress', ['$event']]
7207
8063
  }], click: [{
7208
8064
  type: HostListener,
7209
- args: ['click', ['$event']]
8065
+ args: ['click']
7210
8066
  }] } });
7211
8067
 
7212
8068
  /**
@@ -7497,7 +8353,7 @@ TagListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versi
7497
8353
  </span>
7498
8354
  </div>
7499
8355
  <ng-content></ng-content>
7500
- `, 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"] }] });
8356
+ `, 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"] }] });
7501
8357
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TagListComponent, decorators: [{
7502
8358
  type: Component,
7503
8359
  args: [{
@@ -7645,6 +8501,10 @@ class MultiSelectComponent {
7645
8501
  this.renderer = renderer;
7646
8502
  this._zone = _zone;
7647
8503
  this.touchEnabled = touchEnabled;
8504
+ /**
8505
+ * @hidden
8506
+ */
8507
+ this.animationDuration = animationDuration;
7648
8508
  /**
7649
8509
  * @hidden
7650
8510
  */
@@ -7672,6 +8532,15 @@ class MultiSelectComponent {
7672
8532
  * Specifies the [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.
7673
8533
  */
7674
8534
  this.tabindex = 0;
8535
+ /**
8536
+ * Enables or disables the adaptive mode. By default the adaptive rendering is disabled.
8537
+ */
8538
+ this.adaptiveMode = 'none';
8539
+ /**
8540
+ * Sets the title of the ActionSheet that is rendered instead of the Popup when using small screen devices.
8541
+ * By default the ActionSheet title uses the text provided for the label of the AutoComplete.
8542
+ */
8543
+ this.title = '';
7675
8544
  /**
7676
8545
  * Sets the disabled state of the component.
7677
8546
  */
@@ -7684,13 +8553,7 @@ class MultiSelectComponent {
7684
8553
  * Enables the [filtering]({% slug filtering_multiselect %}) functionality of the MultiSelect.
7685
8554
  */
7686
8555
  this.filterable = false;
7687
- /**
7688
- * Sets the height of the suggestions list. By default, `listHeight` is 200px.
7689
- *
7690
- * > The `listHeight` property affects only the list of suggestions and not the whole popup container.
7691
- * > To set the height of the popup container, use `popupSettings.height`.
7692
- */
7693
- this.listHeight = 200;
8556
+ this._listHeight = 200;
7694
8557
  /**
7695
8558
  * If set to `true`, renders a button on hovering over the component.
7696
8559
  * Clicking this button resets the value of the component to an empty array and triggers the `change` event.
@@ -7813,6 +8676,10 @@ class MultiSelectComponent {
7813
8676
  */
7814
8677
  this.removeTag = new EventEmitter();
7815
8678
  this.hostClasses = true;
8679
+ /**
8680
+ * @hidden
8681
+ */
8682
+ this.windowSize = 'large';
7816
8683
  this.initialized = false;
7817
8684
  this._size = 'medium';
7818
8685
  this._rounded = 'medium';
@@ -7827,7 +8694,7 @@ class MultiSelectComponent {
7827
8694
  this._isFocused = false;
7828
8695
  this.selectedDataItems = [];
7829
8696
  this.customValueSubject = new Subject();
7830
- this.observableSubscriptions = new Subscription();
8697
+ this.subs = new Subscription();
7831
8698
  validatePackage(packageMetadata);
7832
8699
  this.popupMouseDownHandler = this.onMouseDown.bind(this);
7833
8700
  this.data = [];
@@ -7835,6 +8702,18 @@ class MultiSelectComponent {
7835
8702
  this.subscribeEvents();
7836
8703
  this.subscribeTouchEvents();
7837
8704
  }
8705
+ /**
8706
+ * @hidden
8707
+ */
8708
+ get actionSheet() {
8709
+ return this.responsiveRendererComponent?.actionSheet;
8710
+ }
8711
+ /**
8712
+ * @hidden
8713
+ */
8714
+ get actionSheetSearchBar() {
8715
+ return this.responsiveRendererComponent?.actionSheetSearchBar;
8716
+ }
7838
8717
  /**
7839
8718
  * @hidden
7840
8719
  */
@@ -7877,6 +8756,16 @@ class MultiSelectComponent {
7877
8756
  }
7878
8757
  }
7879
8758
  }
8759
+ /**
8760
+ * @hidden
8761
+ */
8762
+ onAdaptiveTextBoxChange(text) {
8763
+ if (this.filterable) {
8764
+ this.filterChange.emit(text);
8765
+ return;
8766
+ }
8767
+ this.searchTextAndFocus(text);
8768
+ }
7880
8769
  /**
7881
8770
  * Blurs the MultiSelect.
7882
8771
  */
@@ -7889,28 +8778,30 @@ class MultiSelectComponent {
7889
8778
  * @hidden
7890
8779
  */
7891
8780
  onSearchBarBlur() {
7892
- if (!this.isFocused) {
7893
- return;
7894
- }
7895
- this.isFocused = false;
7896
- if (hasObservers(this.onBlur) ||
7897
- hasObservers(this.filterChange) ||
7898
- hasObservers(this.close) ||
7899
- isUntouched(this.wrapper.nativeElement)) {
7900
- this._zone.run(() => {
7901
- this.closePopup();
7902
- if (!(this.isOpen && this.allowCustom)) {
8781
+ if (!this.isActionSheetExpanded) {
8782
+ if (!this.isFocused) {
8783
+ return;
8784
+ }
8785
+ this.isFocused = false;
8786
+ if (hasObservers(this.onBlur) ||
8787
+ hasObservers(this.filterChange) ||
8788
+ hasObservers(this.close) ||
8789
+ isUntouched(this.wrapper.nativeElement)) {
8790
+ this._zone.run(() => {
8791
+ this.closePopup();
8792
+ if (!(this.isOpen && this.allowCustom)) {
8793
+ this.clearFilter();
8794
+ }
8795
+ this.onBlur.emit();
8796
+ this.onTouchedCallback();
8797
+ });
8798
+ }
8799
+ else {
8800
+ if (!this.allowCustom) {
7903
8801
  this.clearFilter();
7904
8802
  }
7905
- this.onBlur.emit();
7906
- this.onTouchedCallback();
7907
- });
7908
- }
7909
- else {
7910
- if (!this.allowCustom) {
7911
- this.clearFilter();
8803
+ this.closePopup();
7912
8804
  }
7913
- this.closePopup();
7914
8805
  }
7915
8806
  }
7916
8807
  /**
@@ -7923,7 +8814,14 @@ class MultiSelectComponent {
7923
8814
  * @hidden
7924
8815
  */
7925
8816
  onResize() {
7926
- if (this._open) {
8817
+ if (this.isAdaptiveModeEnabled && this.windowSize !== windowSize()) {
8818
+ if (this.isOpen) {
8819
+ this.togglePopup(false);
8820
+ }
8821
+ this.windowSize = windowSize();
8822
+ this.cdr.detectChanges();
8823
+ }
8824
+ if (this.isOpen && !this.isActionSheetExpanded) {
7927
8825
  const popupWrapper = this.popupRef.popupElement;
7928
8826
  const { min, max } = this.width;
7929
8827
  popupWrapper.style.minWidth = min;
@@ -8064,6 +8962,22 @@ class MultiSelectComponent {
8064
8962
  get placeholder() {
8065
8963
  return this.selectedDataItems.length ? '' : this._placeholder;
8066
8964
  }
8965
+ /**
8966
+ * Sets the subtitle of the ActionSheet that is rendered instead of the Popup when using small screen devices.
8967
+ * By default the ActionSheet subtitle uses the text provided for the `placeholder` of the AutoComplete.
8968
+ */
8969
+ set subtitle(_subtitle) {
8970
+ this._subtitle = _subtitle;
8971
+ }
8972
+ get subtitle() {
8973
+ return this._subtitle || this.placeholder;
8974
+ }
8975
+ /**
8976
+ * @hidden
8977
+ */
8978
+ get isAdaptiveModeEnabled() {
8979
+ return this.adaptiveMode === 'auto';
8980
+ }
8067
8981
  /**
8068
8982
  * Defines a Boolean function that is executed for each data item in the component
8069
8983
  * ([see examples]({% slug disableditems_multiselect %})). Determines whether the item will be disabled.
@@ -8108,6 +9022,24 @@ class MultiSelectComponent {
8108
9022
  get popupSettings() {
8109
9023
  return this._popupSettings;
8110
9024
  }
9025
+ /**
9026
+ * Sets the height of the options list in the popup. By default, `listHeight` is 200px.
9027
+ *
9028
+ * > The `listHeight` property affects only the list of options and not the whole popup container.
9029
+ * > To set the height of the popup container, use `popupSettings.height`.
9030
+ *
9031
+ * > When using `adaptiveMode` and the screen size is `small` or `medium` the `listHeight` property is set to null.
9032
+ */
9033
+ set listHeight(_listHeight) {
9034
+ this._listHeight = _listHeight;
9035
+ }
9036
+ ;
9037
+ get listHeight() {
9038
+ if (this.isAdaptive) {
9039
+ return;
9040
+ }
9041
+ return this._listHeight;
9042
+ }
8111
9043
  /**
8112
9044
  * Specifies the type of the selected value.
8113
9045
  * If set to `true`, the selected value has to be of the primitive type
@@ -8131,6 +9063,19 @@ class MultiSelectComponent {
8131
9063
  get isLoading() {
8132
9064
  return this.loading;
8133
9065
  }
9066
+ /**
9067
+ * @hidden
9068
+ */
9069
+ get isActionSheetExpanded() {
9070
+ return this.actionSheet?.expanded;
9071
+ }
9072
+ ;
9073
+ /**
9074
+ * @hidden
9075
+ */
9076
+ get isAdaptive() {
9077
+ return this.isAdaptiveModeEnabled && this.windowSize !== 'large';
9078
+ }
8134
9079
  get listContainerClasses() {
8135
9080
  const containerClasses = ['k-list-container', 'k-reset'];
8136
9081
  if (this.popupSettings.popupClass) {
@@ -8181,6 +9126,21 @@ class MultiSelectComponent {
8181
9126
  return 'visible';
8182
9127
  }
8183
9128
  }
9129
+ /**
9130
+ * @hidden
9131
+ */
9132
+ applyValue() {
9133
+ this.value = this._valueHolder;
9134
+ this.emitValueChange();
9135
+ this.togglePopup(false);
9136
+ }
9137
+ /**
9138
+ * @hidden
9139
+ */
9140
+ cancelValue() {
9141
+ this._valueHolder = [];
9142
+ this.togglePopup(false);
9143
+ }
8184
9144
  /**
8185
9145
  * @hidden
8186
9146
  */
@@ -8212,8 +9172,12 @@ class MultiSelectComponent {
8212
9172
  event.added.forEach((itemIndex) => {
8213
9173
  const dataItem = this.dataService.itemAt(itemIndex);
8214
9174
  const newItem = (this.valuePrimitive && isPresent(dataItem) && isPresent(dataItem[this.valueField])) ? dataItem[this.valueField] : dataItem;
9175
+ this._valueHolder = this.value.filter(filter);
8215
9176
  if (newItem) {
8216
- this.value = [...this.value, newItem];
9177
+ this._valueHolder = [...this.value, newItem];
9178
+ if (!this.isAdaptive) {
9179
+ this.value = this._valueHolder;
9180
+ }
8217
9181
  }
8218
9182
  });
8219
9183
  }
@@ -8221,7 +9185,10 @@ class MultiSelectComponent {
8221
9185
  event.removed.forEach((itemIndex) => {
8222
9186
  const dataItem = this.dataService.itemAt(itemIndex);
8223
9187
  const filter = (item) => getter(item, this.valueField) !== getter(dataItem, this.valueField);
8224
- this.value = this.value.filter(filter);
9188
+ this._valueHolder = this.value.filter(filter);
9189
+ if (!this.isAdaptive) {
9190
+ this.value = this._valueHolder;
9191
+ }
8225
9192
  });
8226
9193
  this.cdr.detectChanges();
8227
9194
  }
@@ -8236,17 +9203,25 @@ class MultiSelectComponent {
8236
9203
  if (isPresent(event.added)) {
8237
9204
  const dataItem = this.dataService.itemAt(event.added);
8238
9205
  const newItem = (this.valuePrimitive && isPresent(dataItem) && isPresent(dataItem[this.valueField])) ? dataItem[this.valueField] : dataItem;
8239
- this.value = [...this.value, newItem];
9206
+ this._valueHolder = [...this.value, newItem];
9207
+ if (!this.isAdaptive) {
9208
+ this.value = this._valueHolder;
9209
+ }
8240
9210
  }
8241
9211
  if (isPresent(event.removed)) {
8242
9212
  const dataItem = this.dataService.itemAt(event.removed);
8243
9213
  const filter = (item) => getter(item, this.valueField) !== getter(dataItem, this.valueField);
8244
- this.value = this.value.filter(filter);
9214
+ this._valueHolder = this.value.filter(filter);
9215
+ if (!this.isAdaptive) {
9216
+ this.value = this._valueHolder;
9217
+ }
8245
9218
  this.selectionService.focused = event.removed;
8246
9219
  this.cdr.detectChanges();
8247
9220
  }
8248
9221
  }
8249
- this.emitValueChange();
9222
+ if (!this.isAdaptive) {
9223
+ this.emitValueChange();
9224
+ }
8250
9225
  }
8251
9226
  /**
8252
9227
  * @hidden
@@ -8331,6 +9306,9 @@ class MultiSelectComponent {
8331
9306
  const navigateInput = this.text && event.keyCode !== Keys.ArrowDown && event.keyCode !== Keys.ArrowUp;
8332
9307
  const selectValue = this.text && event.keyCode === Keys.Enter || event.keyCode === Keys.Escape;
8333
9308
  const deleteTag = !this.text && event.keyCode === Keys.Backspace && this.tags.length > 0;
9309
+ if (event.keyCode === Keys.Backspace && this.isActionSheetExpanded) {
9310
+ return;
9311
+ }
8334
9312
  if (deleteTag) {
8335
9313
  this.handleBackspace();
8336
9314
  return;
@@ -8348,7 +9326,8 @@ class MultiSelectComponent {
8348
9326
  originalEvent: eventData
8349
9327
  });
8350
9328
  if (action !== NavigationAction.Undefined &&
8351
- ((action === NavigationAction.Enter && this.isOpen) || action !== NavigationAction.Enter)) {
9329
+ ((action === NavigationAction.Enter && this.isOpen) || action !== NavigationAction.Enter) &&
9330
+ (!this.isActionSheetExpanded && action === NavigationAction.Tab)) {
8352
9331
  event.preventDefault();
8353
9332
  }
8354
9333
  }
@@ -8405,11 +9384,11 @@ class MultiSelectComponent {
8405
9384
  ngOnInit() {
8406
9385
  this.renderer.removeAttribute(this.wrapper.nativeElement, "tabindex");
8407
9386
  this.createCustomValueStream();
8408
- this.localizationChangeSubscription = this.localization
9387
+ this.subs.add(this.localization
8409
9388
  .changes.subscribe(({ rtl }) => {
8410
9389
  this.direction = rtl ? 'rtl' : 'ltr';
8411
9390
  this.cdr.markForCheck();
8412
- });
9391
+ }));
8413
9392
  this.setState(this.value);
8414
9393
  this.setComponentClasses();
8415
9394
  this.initialized = true;
@@ -8428,18 +9407,21 @@ class MultiSelectComponent {
8428
9407
  }
8429
9408
  }
8430
9409
  ngAfterViewInit() {
9410
+ this.windowSize = windowSize();
9411
+ this.cdr.detectChanges();
8431
9412
  this.searchbar.setInputSize();
8432
- this.observableSubscriptions.add(this.renderer.listen(this.wrapper.nativeElement, 'mousedown', this.handleMousedown.bind(this)));
8433
- this.observableSubscriptions.add(this.renderer.listen(this.wrapper.nativeElement, 'keydown', this.handleKeydown.bind(this)));
9413
+ this.subs.add(this.renderer.listen(this.wrapper.nativeElement, 'mousedown', this.handleMousedown.bind(this)));
9414
+ this.subs.add(this.renderer.listen(this.wrapper.nativeElement, 'keydown', this.handleKeydown.bind(this)));
9415
+ this.renderer.setAttribute(this.actionSheet?.element.nativeElement, 'style', '--kendo-actionsheet-height: 60vh; --kendo-actionsheet-max-height: none');
8434
9416
  }
8435
9417
  ngOnDestroy() {
8436
9418
  this._toggle(false);
8437
9419
  this.unsubscribeEvents();
8438
9420
  }
8439
9421
  /**
8440
- * Toggles the visibility of the popup
9422
+ * Toggles the visibility of the popup or actionSheet
8441
9423
  * ([see example]({% slug openstate_multiselect %}#toc-setting-the-initially-opened-component)).
8442
- * If you use the `toggle` method to open or close the popup, the respective `open` and `close` events will not be fired.
9424
+ * If you use the `toggle` method to open or close the popup or actionSheet, the respective `open` and `close` events will not be fired.
8443
9425
  *
8444
9426
  * @param open - The state of the popup.
8445
9427
  */
@@ -8453,10 +9435,10 @@ class MultiSelectComponent {
8453
9435
  });
8454
9436
  }
8455
9437
  /**
8456
- * Returns the current open state of the popup.
9438
+ * Returns the current open state. Returns `true` if the popup or actionSheet is open.
8457
9439
  */
8458
9440
  get isOpen() {
8459
- return this._open;
9441
+ return isTruthy(this._open || this.isActionSheetExpanded);
8460
9442
  }
8461
9443
  /**
8462
9444
  * Resets the value of the MultiSelect.
@@ -8505,6 +9487,15 @@ class MultiSelectComponent {
8505
9487
  this.tags = this.tagMapper(this.selectedDataItems.slice(0));
8506
9488
  this.cdr.markForCheck();
8507
9489
  }
9490
+ /**
9491
+ * @hidden
9492
+ */
9493
+ handleClick() {
9494
+ this.windowSize = windowSize();
9495
+ if (this.isAdaptive) {
9496
+ this.togglePopup(true);
9497
+ }
9498
+ }
8508
9499
  set isFocused(isFocused) {
8509
9500
  this.renderer[isFocused ? 'addClass' : 'removeClass'](this.wrapper.nativeElement, 'k-focus');
8510
9501
  this._isFocused = isFocused;
@@ -8543,7 +9534,7 @@ class MultiSelectComponent {
8543
9534
  this.optionsList.scrollWithOnePage(NavigationAction[event.originalEvent.code]);
8544
9535
  }
8545
9536
  })
8546
- ].forEach(s => this.observableSubscriptions.add(s));
9537
+ ].forEach(s => this.subs.add(s));
8547
9538
  }
8548
9539
  subscribeTouchEvents() {
8549
9540
  if (!isDocumentAvailable() || !this.touchEnabled) {
@@ -8567,13 +9558,10 @@ class MultiSelectComponent {
8567
9558
  if (!isDocumentAvailable()) {
8568
9559
  return;
8569
9560
  }
8570
- this.observableSubscriptions.unsubscribe();
9561
+ this.subs.unsubscribe();
8571
9562
  if (this.customValueSubscription) {
8572
9563
  this.customValueSubscription.unsubscribe();
8573
9564
  }
8574
- if (this.localizationChangeSubscription) {
8575
- this.localizationChangeSubscription.unsubscribe();
8576
- }
8577
9565
  if (this.touchstartDisposeHandler) {
8578
9566
  this.touchstartDisposeHandler();
8579
9567
  }
@@ -8688,7 +9676,7 @@ class MultiSelectComponent {
8688
9676
  }
8689
9677
  handleItemChange(event) {
8690
9678
  this.change(event);
8691
- if (this.autoClose && !event.preventClosingPopup) {
9679
+ if (this.autoClose && !event.preventClosingPopup && !this.isActionSheetExpanded) {
8692
9680
  this.togglePopup(false);
8693
9681
  }
8694
9682
  if (this.autoClose || !this.filterable) {
@@ -8696,21 +9684,23 @@ class MultiSelectComponent {
8696
9684
  }
8697
9685
  }
8698
9686
  handleMousedown(event) {
8699
- const inputElement = this.searchbar.input.nativeElement;
8700
- if (event.button === 0) {
8701
- if (this.isFocused && this.isOpen && event.target === inputElement) {
8702
- return;
8703
- }
8704
- if (!this.touchEnabled || (this.touchEnabled && event.target.tagName !== 'SPAN')) {
8705
- this.searchbar.focus();
8706
- }
8707
- // The check is needed otherwise when appended to the component, the popup reopens on click
8708
- // https://github.com/telerik/kendo-angular/issues/3738
8709
- if ((this.popupRef && this.popupRef.popupElement.contains(event.target))) {
8710
- return;
9687
+ if (!this.isActionSheetExpanded) {
9688
+ const inputElement = this.searchbar.input.nativeElement;
9689
+ if (event.button === 0) {
9690
+ if (this.isFocused && this.isOpen && event.target === inputElement) {
9691
+ return;
9692
+ }
9693
+ if (!this.touchEnabled || (this.touchEnabled && event.target.tagName !== 'SPAN')) {
9694
+ this.searchbar.focus();
9695
+ }
9696
+ // The check is needed otherwise when appended to the component, the popup reopens on click
9697
+ // https://github.com/telerik/kendo-angular/issues/3738
9698
+ if ((this.popupRef && this.popupRef.popupElement.contains(event.target))) {
9699
+ return;
9700
+ }
9701
+ event.preventDefault();
9702
+ this.togglePopup(!this.isOpen);
8711
9703
  }
8712
- event.preventDefault();
8713
- this.togglePopup(!this.isOpen);
8714
9704
  }
8715
9705
  }
8716
9706
  handleKeydown(event) {
@@ -8739,7 +9729,7 @@ class MultiSelectComponent {
8739
9729
  else {
8740
9730
  service.add(focusedIndex);
8741
9731
  }
8742
- if (this.autoClose) {
9732
+ if (this.autoClose && !this.isActionSheetExpanded) {
8743
9733
  this.togglePopup(false);
8744
9734
  }
8745
9735
  if (this.autoClose || !this.filterable) {
@@ -8910,6 +9900,9 @@ class MultiSelectComponent {
8910
9900
  this.togglePopup(true);
8911
9901
  this.focusedTagIndex = undefined;
8912
9902
  }
9903
+ /**
9904
+ * @hidden
9905
+ */
8913
9906
  togglePopup(open) {
8914
9907
  const isDisabled = this.disabled || this.readonly;
8915
9908
  const sameState = this.isOpen === open;
@@ -8934,6 +9927,10 @@ class MultiSelectComponent {
8934
9927
  _toggle(open) {
8935
9928
  this._open = open;
8936
9929
  this.destroyPopup();
9930
+ if (this.isActionSheetExpanded) {
9931
+ this.closeActionSheet();
9932
+ this.focus();
9933
+ }
8937
9934
  if (this._open) {
8938
9935
  this.createPopup();
8939
9936
  }
@@ -8950,6 +9947,11 @@ class MultiSelectComponent {
8950
9947
  if (this.virtual) {
8951
9948
  this.virtual.skip = 0;
8952
9949
  }
9950
+ this.windowSize = windowSize();
9951
+ if (this.isAdaptive) {
9952
+ this.openActionSheet();
9953
+ return;
9954
+ }
8953
9955
  const horizontalAlign = this.direction === "rtl" ? "right" : "left";
8954
9956
  const anchorPosition = { horizontal: horizontalAlign, vertical: "bottom" };
8955
9957
  const popupPosition = { horizontal: horizontalAlign, vertical: "top" };
@@ -8981,7 +9983,9 @@ class MultiSelectComponent {
8981
9983
  }
8982
9984
  this.popupRef.popupOpen.subscribe(() => {
8983
9985
  this.cdr.detectChanges();
9986
+ setListBoxAriaLabelLebBy(this.optionsList, this.searchbar.input, this.renderer);
8984
9987
  this.optionsList.scrollToItem(this.selectionService.focused);
9988
+ this.selectionService.focus(this.selectionService.focused);
8985
9989
  this.opened.emit();
8986
9990
  });
8987
9991
  this.popupRef.popupClose.subscribe(() => {
@@ -9035,9 +10039,28 @@ class MultiSelectComponent {
9035
10039
  this.renderer.addClass(this.wrapper.nativeElement, getFillModeClass('input', this.fillMode));
9036
10040
  }
9037
10041
  }
10042
+ closeActionSheet() {
10043
+ this.actionSheet.toggle(false);
10044
+ this.actionSheetSearchBar.value = '';
10045
+ this.filterable && this.filterChange.emit('');
10046
+ this.closed.emit();
10047
+ }
10048
+ openActionSheet() {
10049
+ this.windowSize = windowSize();
10050
+ this.actionSheet.toggle(true);
10051
+ this.cdr.detectChanges();
10052
+ setListBoxAriaLabelLebBy(this.optionsList, this.searchbar.input, this.renderer);
10053
+ this.title = setActionSheetTitle(this.searchbar.input, this.title);
10054
+ updateActionSheetAdaptiveAppearance(this.actionSheet, this.windowSize, this.renderer);
10055
+ this.cdr.detectChanges();
10056
+ this.opened.emit();
10057
+ this.optionsList.scrollToItem(this.selectionService.focused);
10058
+ this.selectionService.focus(this.selectionService.focused);
10059
+ this.actionSheetSearchBar.focus();
10060
+ }
9038
10061
  }
9039
- 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 });
9040
- 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: [
10062
+ 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 });
10063
+ 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: [
9041
10064
  MULTISELECT_VALUE_ACCESSOR,
9042
10065
  DataService,
9043
10066
  SelectionService,
@@ -9054,7 +10077,7 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
9054
10077
  {
9055
10078
  provide: KendoInput, useExisting: forwardRef(() => MultiSelectComponent)
9056
10079
  }
9057
- ], 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: `
10080
+ ], 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: `
9058
10081
  <ng-container kendoMultiSelectLocalizedMessages
9059
10082
  i18n-noDataText="kendo.multiselect.noDataText|The text displayed in the popup when there are no items"
9060
10083
  noDataText="NO DATA FOUND"
@@ -9064,6 +10087,12 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
9064
10087
 
9065
10088
  i18n-popupLabel="kendo.multiselect.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
9066
10089
  popupLabel="Options list"
10090
+
10091
+ i18n-applyButton="kendo.multiselect.applyButton|The text of the Apply button in the action sheet"
10092
+ applyButton="Apply"
10093
+
10094
+ i18n-cancelButton="kendo.multiselect.cancelButton|The text of the Cancel button in the action sheet"
10095
+ cancelButton="Cancel"
9067
10096
  >
9068
10097
  </ng-container>
9069
10098
  <kendo-taglist
@@ -9094,13 +10123,14 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
9094
10123
  [activeDescendant]="activeDescendant"
9095
10124
  [userInput]="text"
9096
10125
  [disabled]="disabled"
9097
- [readonly]="readonly"
10126
+ [readonly]="readonly || this.isAdaptive"
9098
10127
  [tabIndex]="tabIndex"
9099
10128
  [placeholder]="placeholder"
9100
10129
  (onNavigate)="handleNavigate($event)"
9101
10130
  (valueChange)="handleFilter($event)"
9102
10131
  (onBlur)="onSearchBarBlur()"
9103
10132
  (onFocus)="onSearchBarFocus()"
10133
+ (click)="handleClick()"
9104
10134
  >
9105
10135
  </kendo-searchbar>
9106
10136
  </kendo-taglist>
@@ -9127,6 +10157,29 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
9127
10157
  >
9128
10158
  </span>
9129
10159
  <ng-template #popupTemplate>
10160
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
10161
+ </ng-template>
10162
+ <kendo-resize-sensor *ngIf="isOpen || isAdaptiveModeEnabled" (resize)="onResize()"></kendo-resize-sensor>
10163
+ <ng-container #container></ng-container>
10164
+
10165
+ <!--adaptive rendering-->
10166
+ <responsive-renderer
10167
+ [sharedPopupActionSheetTemplate]="sharedPopupActionSheetTemplate"
10168
+ [isActionSheetExpanded]="isActionSheetExpanded"
10169
+ [title]="title"
10170
+ [showTextInput]="true"
10171
+ [showActionButtons]="true"
10172
+ [subtitle]="subtitle"
10173
+ (closePopup)="togglePopup(false)"
10174
+ (textInputChange)="onAdaptiveTextBoxChange($event)"
10175
+ [placeholder]="placeholder"
10176
+ (navigate)="handleNavigate($event)"
10177
+ (onApply)="applyValue()"
10178
+ (onCancel)="cancelValue()"
10179
+ >
10180
+ </responsive-renderer>
10181
+
10182
+ <ng-template #sharedPopupActionSheetTemplate>
9130
10183
  <!--header template-->
9131
10184
  <ng-template *ngIf="headerTemplate"
9132
10185
  [templateContext]="{
@@ -9165,17 +10218,18 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
9165
10218
  [data]="data"
9166
10219
  [textField]="textField"
9167
10220
  [valueField]="valueField"
9168
- [height]="listHeight"
9169
10221
  [template]="template"
9170
10222
  [groupTemplate]="groupTemplate"
9171
10223
  [fixedGroupTemplate]="fixedGroupTemplate"
10224
+ [height]="listHeight"
9172
10225
  [show]="isOpen"
9173
10226
  [multipleSelection]="true"
9174
10227
  [virtual]="virtual"
9175
10228
  (pageChange)="pageChange($event)"
9176
10229
  [checkboxes]="checkboxes"
9177
10230
  [isMultiselect]="true"
9178
- >
10231
+ [isActionSheetExpanded]="isActionSheetExpanded"
10232
+ >
9179
10233
  </kendo-list>
9180
10234
  <!--no data template-->
9181
10235
  <div class="k-no-data" *ngIf="data.length === 0">
@@ -9195,11 +10249,7 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
9195
10249
  }">
9196
10250
  </ng-template>
9197
10251
  </ng-template>
9198
- <ng-template [ngIf]="isOpen">
9199
- <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
9200
- </ng-template>
9201
- <ng-container #container></ng-container>
9202
- `, 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"] }] });
10252
+ `, 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"] }] });
9203
10253
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MultiSelectComponent, decorators: [{
9204
10254
  type: Component,
9205
10255
  args: [{
@@ -9233,6 +10283,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
9233
10283
 
9234
10284
  i18n-popupLabel="kendo.multiselect.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
9235
10285
  popupLabel="Options list"
10286
+
10287
+ i18n-applyButton="kendo.multiselect.applyButton|The text of the Apply button in the action sheet"
10288
+ applyButton="Apply"
10289
+
10290
+ i18n-cancelButton="kendo.multiselect.cancelButton|The text of the Cancel button in the action sheet"
10291
+ cancelButton="Cancel"
9236
10292
  >
9237
10293
  </ng-container>
9238
10294
  <kendo-taglist
@@ -9263,13 +10319,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
9263
10319
  [activeDescendant]="activeDescendant"
9264
10320
  [userInput]="text"
9265
10321
  [disabled]="disabled"
9266
- [readonly]="readonly"
10322
+ [readonly]="readonly || this.isAdaptive"
9267
10323
  [tabIndex]="tabIndex"
9268
10324
  [placeholder]="placeholder"
9269
10325
  (onNavigate)="handleNavigate($event)"
9270
10326
  (valueChange)="handleFilter($event)"
9271
10327
  (onBlur)="onSearchBarBlur()"
9272
10328
  (onFocus)="onSearchBarFocus()"
10329
+ (click)="handleClick()"
9273
10330
  >
9274
10331
  </kendo-searchbar>
9275
10332
  </kendo-taglist>
@@ -9296,6 +10353,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
9296
10353
  >
9297
10354
  </span>
9298
10355
  <ng-template #popupTemplate>
10356
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
10357
+ </ng-template>
10358
+ <kendo-resize-sensor *ngIf="isOpen || isAdaptiveModeEnabled" (resize)="onResize()"></kendo-resize-sensor>
10359
+ <ng-container #container></ng-container>
10360
+
10361
+ <!--adaptive rendering-->
10362
+ <responsive-renderer
10363
+ [sharedPopupActionSheetTemplate]="sharedPopupActionSheetTemplate"
10364
+ [isActionSheetExpanded]="isActionSheetExpanded"
10365
+ [title]="title"
10366
+ [showTextInput]="true"
10367
+ [showActionButtons]="true"
10368
+ [subtitle]="subtitle"
10369
+ (closePopup)="togglePopup(false)"
10370
+ (textInputChange)="onAdaptiveTextBoxChange($event)"
10371
+ [placeholder]="placeholder"
10372
+ (navigate)="handleNavigate($event)"
10373
+ (onApply)="applyValue()"
10374
+ (onCancel)="cancelValue()"
10375
+ >
10376
+ </responsive-renderer>
10377
+
10378
+ <ng-template #sharedPopupActionSheetTemplate>
9299
10379
  <!--header template-->
9300
10380
  <ng-template *ngIf="headerTemplate"
9301
10381
  [templateContext]="{
@@ -9334,17 +10414,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
9334
10414
  [data]="data"
9335
10415
  [textField]="textField"
9336
10416
  [valueField]="valueField"
9337
- [height]="listHeight"
9338
10417
  [template]="template"
9339
10418
  [groupTemplate]="groupTemplate"
9340
10419
  [fixedGroupTemplate]="fixedGroupTemplate"
10420
+ [height]="listHeight"
9341
10421
  [show]="isOpen"
9342
10422
  [multipleSelection]="true"
9343
10423
  [virtual]="virtual"
9344
10424
  (pageChange)="pageChange($event)"
9345
10425
  [checkboxes]="checkboxes"
9346
10426
  [isMultiselect]="true"
9347
- >
10427
+ [isActionSheetExpanded]="isActionSheetExpanded"
10428
+ >
9348
10429
  </kendo-list>
9349
10430
  <!--no data template-->
9350
10431
  <div class="k-no-data" *ngIf="data.length === 0">
@@ -9364,18 +10445,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
9364
10445
  }">
9365
10446
  </ng-template>
9366
10447
  </ng-template>
9367
- <ng-template [ngIf]="isOpen">
9368
- <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
9369
- </ng-template>
9370
- <ng-container #container></ng-container>
9371
10448
  `
9372
10449
  }]
9373
- }], ctorParameters: function () { 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: [{
10450
+ }], ctorParameters: function () { 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: [{
9374
10451
  type: Optional
9375
10452
  }, {
9376
10453
  type: Inject,
9377
10454
  args: [TOUCH_ENABLED]
9378
- }] }]; }, propDecorators: { focusableId: [{
10455
+ }] }]; }, propDecorators: { responsiveRendererComponent: [{
10456
+ type: ViewChild,
10457
+ args: [ResponsiveRendererComponent]
10458
+ }], focusableId: [{
9379
10459
  type: Input
9380
10460
  }], autoClose: [{
9381
10461
  type: Input
@@ -9402,6 +10482,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
9402
10482
  type: Input
9403
10483
  }], placeholder: [{
9404
10484
  type: Input
10485
+ }], adaptiveMode: [{
10486
+ type: Input
10487
+ }], title: [{
10488
+ type: Input
10489
+ }], subtitle: [{
10490
+ type: Input
9405
10491
  }], disabled: [{
9406
10492
  type: Input
9407
10493
  }], itemDisabled: [{
@@ -9658,6 +10744,10 @@ const getRowWidthFromColumnsMeta = (columns) => {
9658
10744
  class MultiColumnComboBoxComponent extends ComboBoxComponent {
9659
10745
  constructor(localization, popupService, selectionService, navigationService, disabledItemsService, dataService, zone, changeDetector, renderer, wrapper, touchEnabled) {
9660
10746
  super(wrapper, localization, popupService, selectionService, navigationService, disabledItemsService, dataService, zone, changeDetector, renderer, touchEnabled);
10747
+ /**
10748
+ * @hidden
10749
+ */
10750
+ this.animationDuration = animationDuration;
9661
10751
  /**
9662
10752
  * @hidden
9663
10753
  */
@@ -9698,14 +10788,14 @@ class MultiColumnComboBoxComponent extends ComboBoxComponent {
9698
10788
  * @hidden
9699
10789
  */
9700
10790
  get listContainerClasses() {
9701
- return [
9702
- 'k-popup',
9703
- 'k-dropdowngrid-popup'
9704
- ].concat(this.popupSettings.popupClass || []);
10791
+ return ['k-popup', 'k-dropdowngrid-popup'].concat(this.popupSettings.popupClass || []);
9705
10792
  }
9706
10793
  ngAfterViewInit() {
9707
10794
  this.updateColumnsMediaState();
9708
10795
  this.addWindowResizeListener();
10796
+ this.windowSize = windowSize();
10797
+ this.cdr.detectChanges();
10798
+ this.renderer.setAttribute(this.actionSheet?.element.nativeElement, 'style', '--kendo-actionsheet-height: 60vh; --kendo-actionsheet-max-height: none');
9709
10799
  }
9710
10800
  ngOnDestroy() {
9711
10801
  super.ngOnDestroy();
@@ -9741,7 +10831,7 @@ class MultiColumnComboBoxComponent extends ComboBoxComponent {
9741
10831
  if (!isDevMode()) {
9742
10832
  return;
9743
10833
  }
9744
- if (isPresent(this.data) && this.data.length > 0 && this.data.some(item => !isObject(item))) {
10834
+ if (isPresent(this.data) && this.data.length > 0 && this.data.some((item) => !isObject(item))) {
9745
10835
  throw new Error(MultiColumnComboBoxMessages.data);
9746
10836
  }
9747
10837
  if (!isPresent(this.valueField) || !isPresent(this.textField)) {
@@ -9753,26 +10843,26 @@ class MultiColumnComboBoxComponent extends ComboBoxComponent {
9753
10843
  if (!isDocumentAvailable()) {
9754
10844
  return;
9755
10845
  }
9756
- this.zone.runOutsideAngular(() => this.removeWindowResizeListener = this.renderer.listen(window, 'resize', this.updateColumnsMediaState.bind(this)));
10846
+ this.zone.runOutsideAngular(() => (this.removeWindowResizeListener = this.renderer.listen(window, 'resize', this.updateColumnsMediaState.bind(this))));
9757
10847
  }
9758
10848
  updateColumnsMediaState() {
9759
- if (!(isPresent(this.columns) && isDocumentAvailable())) {
10849
+ if (!(isPresent(this.columns) && isDocumentAvailable()) || this.isActionSheetExpanded) {
9760
10850
  return;
9761
10851
  }
9762
- this.columns.forEach(column => {
10852
+ this.columns.forEach((column) => {
9763
10853
  const matchesMedia = !column.media || window.matchMedia(column.media).matches;
9764
10854
  if (column.matchesMedia !== matchesMedia) {
9765
10855
  column.matchesMedia = matchesMedia;
9766
10856
  if (this.isOpen) {
9767
10857
  // enter the zone only if the popup is actually open
9768
10858
  // update its width in case it's dependent on the columns' width
9769
- this.zone.run(() => this.popupRef.popupElement.style.width = this.popupWidth.max);
10859
+ this.zone.run(() => (this.popupRef.popupElement.style.width = this.popupWidth.max));
9770
10860
  }
9771
10861
  }
9772
10862
  });
9773
10863
  }
9774
10864
  }
9775
- 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 });
10865
+ 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 });
9776
10866
  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: [
9777
10867
  SelectionService,
9778
10868
  DataService,
@@ -9781,35 +10871,36 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
9781
10871
  LocalizationService,
9782
10872
  {
9783
10873
  provide: L10N_PREFIX,
9784
- useValue: 'kendo.multicolumncombobox'
10874
+ useValue: 'kendo.multicolumncombobox',
9785
10875
  },
9786
10876
  {
9787
10877
  multi: true,
9788
10878
  provide: NG_VALUE_ACCESSOR,
9789
- useExisting: forwardRef(() => MultiColumnComboBoxComponent)
10879
+ useExisting: forwardRef(() => MultiColumnComboBoxComponent),
9790
10880
  },
9791
10881
  {
9792
10882
  provide: KendoInput,
9793
- useExisting: forwardRef(() => MultiColumnComboBoxComponent)
10883
+ useExisting: forwardRef(() => MultiColumnComboBoxComponent),
9794
10884
  },
9795
10885
  {
9796
10886
  provide: FilterableComponent,
9797
- useExisting: forwardRef(() => MultiColumnComboBoxComponent)
9798
- }
10887
+ useExisting: forwardRef(() => MultiColumnComboBoxComponent),
10888
+ },
9799
10889
  ], queries: [{ propertyName: "columns", predicate: ComboBoxColumnComponent }], viewQueries: [{ propertyName: "header", first: true, predicate: ["header"], descendants: true }], usesInheritance: true, ngImport: i0, template: `
9800
10890
  <ng-container
9801
10891
  kendoMultiColumnComboBoxLocalizedMessages
9802
-
9803
- i18n-noDataText="kendo.multicolumncombobox.noDataText|The text displayed in the popup when there are no items"
10892
+ i18n-noDataText="
10893
+ kendo.multicolumncombobox.noDataText|The text displayed in the popup when there are no items
10894
+ "
9804
10895
  noDataText="NO DATA FOUND"
9805
-
9806
10896
  i18n-clearTitle="kendo.multicolumncombobox.clearTitle|The title of the clear button"
9807
10897
  clearTitle="clear"
9808
-
9809
10898
  i18n-selectButtonText="kendo.multicolumncombobox.selectButtonText|The title of the select button"
9810
10899
  selectButtonText="Select"
9811
-
9812
- i18n-popupLabel="kendo.multicolumncombobox.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
10900
+ i18n-popupLabel="
10901
+ kendo.multicolumncombobox.popupLabel|The label of the popup element that contains the list of options
10902
+ when its role is 'region'
10903
+ "
9813
10904
  popupLabel="Options list"
9814
10905
  ></ng-container>
9815
10906
  <kendo-searchbar
@@ -9832,11 +10923,12 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
9832
10923
  (valueChange)="searchBarChange($event)"
9833
10924
  (onBlur)="handleBlur()"
9834
10925
  (onFocus)="handleFocus()"
10926
+ (click)="handleClick()"
9835
10927
  >
9836
10928
  </kendo-searchbar>
9837
10929
 
9838
10930
  <span
9839
- *ngIf="clearButton && !loading && !disabled && !readonly && text?.length"
10931
+ *ngIf="clearButton && !loading && !disabled && (!readonly || readonly && isAdaptiveModeEnabled && windowSize !== 'large') && text?.length"
9840
10932
  class="k-clear-value"
9841
10933
  [style.visibility]="clearButtonVisiblity"
9842
10934
  aria-hidden="true"
@@ -9846,11 +10938,7 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
9846
10938
  mousedown: preventEventDefault
9847
10939
  }"
9848
10940
  >
9849
- <kendo-icon-wrapper
9850
- name="x"
9851
- [svgIcon]="xIcon"
9852
- >
9853
- </kendo-icon-wrapper>
10941
+ <kendo-icon-wrapper name="x" [svgIcon]="xIcon"> </kendo-icon-wrapper>
9854
10942
  </span>
9855
10943
 
9856
10944
  <button
@@ -9866,16 +10954,36 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
9866
10954
  mousedown: preventEventDefault
9867
10955
  }"
9868
10956
  >
9869
- <kendo-icon-wrapper
9870
- *ngIf="!loading && !iconClass"
9871
- name="caret-alt-down"
9872
- [svgIcon]="caretAltDownIcon"
9873
- >
10957
+ <kendo-icon-wrapper *ngIf="!loading && !iconClass" name="caret-alt-down" [svgIcon]="caretAltDownIcon">
9874
10958
  </kendo-icon-wrapper>
9875
10959
  <span *ngIf="loading || iconClass" class="k-button-icon k-icon" [ngClass]="buttonClasses"></span>
9876
10960
  </button>
9877
10961
 
9878
10962
  <ng-template #popupTemplate>
10963
+ <!--popup/actionsheet content-->
10964
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
10965
+ </ng-template>
10966
+
10967
+ <kendo-resize-sensor *ngIf="isOpen || isAdaptiveModeEnabled" (resize)="onResize()"> </kendo-resize-sensor>
10968
+
10969
+ <!-- when the popupSettings.appendTo value is set to 'component', this container is used -->
10970
+ <ng-container #container></ng-container>
10971
+
10972
+ <!--adaptive rendering-->
10973
+ <responsive-renderer
10974
+ [sharedPopupActionSheetTemplate]="sharedPopupActionSheetTemplate"
10975
+ [isActionSheetExpanded]="isActionSheetExpanded"
10976
+ [title]="title"
10977
+ [showTextInput]="true"
10978
+ [subtitle]="subtitle"
10979
+ (closePopup)="togglePopup(false)"
10980
+ (textInputChange)="onAdaptiveTextBoxChange($event)"
10981
+ (navigate)="handleNavigate($event)"
10982
+ [placeholder]="placeholder"
10983
+ >
10984
+ </responsive-renderer>
10985
+
10986
+ <ng-template #sharedPopupActionSheetTemplate>
9879
10987
  <!--user-defined header template -->
9880
10988
  <ng-template
9881
10989
  *ngIf="headerTemplate"
@@ -9884,23 +10992,15 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
9884
10992
  }"
9885
10993
  >
9886
10994
  </ng-template>
9887
-
9888
10995
  <!--data table-->
9889
10996
  <div class="k-data-table" [ngClass]="tableSizeClass">
9890
-
9891
10997
  <!--grid header-->
9892
- <div
9893
- #header
9894
- class="k-table-header"
9895
- >
10998
+ <div #header class="k-table-header">
9896
10999
  <div class="k-table-header-wrap">
9897
11000
  <table class="k-table" role="presentation">
9898
11001
  <colgroup>
9899
11002
  <ng-container *ngFor="let column of columns">
9900
- <col
9901
- *ngIf="!column.hidden && column.matchesMedia"
9902
- [style.width.px]="column.width"
9903
- />
11003
+ <col *ngIf="!column.hidden && column.matchesMedia" [style.width.px]="column.width" />
9904
11004
  </ng-container>
9905
11005
  </colgroup>
9906
11006
  <thead class="k-table-thead">
@@ -9931,7 +11031,6 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
9931
11031
  </table>
9932
11032
  </div>
9933
11033
  </div>
9934
-
9935
11034
  <!-- item template -->
9936
11035
  <ng-template #rowTemplate let-dataItem>
9937
11036
  <ng-container *ngFor="let column of columns">
@@ -9958,8 +11057,6 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
9958
11057
  </span>
9959
11058
  </ng-container>
9960
11059
  </ng-template>
9961
-
9962
- <!--list-->
9963
11060
  <kendo-list
9964
11061
  #optionsList
9965
11062
  [optionPrefix]="optionPrefix"
@@ -9979,10 +11076,7 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
9979
11076
  </kendo-list>
9980
11077
 
9981
11078
  <!--no-data template-->
9982
- <div
9983
- class="k-no-data"
9984
- *ngIf="data.length === 0"
9985
- >
11079
+ <div class="k-no-data" *ngIf="data.length === 0">
9986
11080
  <ng-template
9987
11081
  [ngIf]="noDataTemplate"
9988
11082
  [templateContext]="{
@@ -10013,21 +11107,10 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
10013
11107
  </tfoot>
10014
11108
  </table>
10015
11109
  </div>
10016
- </ng-container>
10017
-
11110
+ </ng-container>
10018
11111
  </div>
10019
-
10020
11112
  </ng-template>
10021
-
10022
- <kendo-resize-sensor
10023
- *ngIf="isOpen"
10024
- (resize)="onResize()"
10025
- >
10026
- </kendo-resize-sensor>
10027
-
10028
- <!-- when the popupSettings.appendTo value is set to 'component', this container is used -->
10029
- <ng-container #container></ng-container>
10030
- `, 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"] }] });
11113
+ `, 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"] }] });
10031
11114
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MultiColumnComboBoxComponent, decorators: [{
10032
11115
  type: Component,
10033
11116
  args: [{
@@ -10039,37 +11122,38 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10039
11122
  LocalizationService,
10040
11123
  {
10041
11124
  provide: L10N_PREFIX,
10042
- useValue: 'kendo.multicolumncombobox'
11125
+ useValue: 'kendo.multicolumncombobox',
10043
11126
  },
10044
11127
  {
10045
11128
  multi: true,
10046
11129
  provide: NG_VALUE_ACCESSOR,
10047
- useExisting: forwardRef(() => MultiColumnComboBoxComponent)
11130
+ useExisting: forwardRef(() => MultiColumnComboBoxComponent),
10048
11131
  },
10049
11132
  {
10050
11133
  provide: KendoInput,
10051
- useExisting: forwardRef(() => MultiColumnComboBoxComponent)
11134
+ useExisting: forwardRef(() => MultiColumnComboBoxComponent),
10052
11135
  },
10053
11136
  {
10054
11137
  provide: FilterableComponent,
10055
- useExisting: forwardRef(() => MultiColumnComboBoxComponent)
10056
- }
11138
+ useExisting: forwardRef(() => MultiColumnComboBoxComponent),
11139
+ },
10057
11140
  ],
10058
11141
  selector: 'kendo-multicolumncombobox',
10059
11142
  template: `
10060
11143
  <ng-container
10061
11144
  kendoMultiColumnComboBoxLocalizedMessages
10062
-
10063
- i18n-noDataText="kendo.multicolumncombobox.noDataText|The text displayed in the popup when there are no items"
11145
+ i18n-noDataText="
11146
+ kendo.multicolumncombobox.noDataText|The text displayed in the popup when there are no items
11147
+ "
10064
11148
  noDataText="NO DATA FOUND"
10065
-
10066
11149
  i18n-clearTitle="kendo.multicolumncombobox.clearTitle|The title of the clear button"
10067
11150
  clearTitle="clear"
10068
-
10069
11151
  i18n-selectButtonText="kendo.multicolumncombobox.selectButtonText|The title of the select button"
10070
11152
  selectButtonText="Select"
10071
-
10072
- i18n-popupLabel="kendo.multicolumncombobox.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
11153
+ i18n-popupLabel="
11154
+ kendo.multicolumncombobox.popupLabel|The label of the popup element that contains the list of options
11155
+ when its role is 'region'
11156
+ "
10073
11157
  popupLabel="Options list"
10074
11158
  ></ng-container>
10075
11159
  <kendo-searchbar
@@ -10092,11 +11176,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10092
11176
  (valueChange)="searchBarChange($event)"
10093
11177
  (onBlur)="handleBlur()"
10094
11178
  (onFocus)="handleFocus()"
11179
+ (click)="handleClick()"
10095
11180
  >
10096
11181
  </kendo-searchbar>
10097
11182
 
10098
11183
  <span
10099
- *ngIf="clearButton && !loading && !disabled && !readonly && text?.length"
11184
+ *ngIf="clearButton && !loading && !disabled && (!readonly || readonly && isAdaptiveModeEnabled && windowSize !== 'large') && text?.length"
10100
11185
  class="k-clear-value"
10101
11186
  [style.visibility]="clearButtonVisiblity"
10102
11187
  aria-hidden="true"
@@ -10106,11 +11191,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10106
11191
  mousedown: preventEventDefault
10107
11192
  }"
10108
11193
  >
10109
- <kendo-icon-wrapper
10110
- name="x"
10111
- [svgIcon]="xIcon"
10112
- >
10113
- </kendo-icon-wrapper>
11194
+ <kendo-icon-wrapper name="x" [svgIcon]="xIcon"> </kendo-icon-wrapper>
10114
11195
  </span>
10115
11196
 
10116
11197
  <button
@@ -10126,16 +11207,36 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10126
11207
  mousedown: preventEventDefault
10127
11208
  }"
10128
11209
  >
10129
- <kendo-icon-wrapper
10130
- *ngIf="!loading && !iconClass"
10131
- name="caret-alt-down"
10132
- [svgIcon]="caretAltDownIcon"
10133
- >
11210
+ <kendo-icon-wrapper *ngIf="!loading && !iconClass" name="caret-alt-down" [svgIcon]="caretAltDownIcon">
10134
11211
  </kendo-icon-wrapper>
10135
11212
  <span *ngIf="loading || iconClass" class="k-button-icon k-icon" [ngClass]="buttonClasses"></span>
10136
11213
  </button>
10137
11214
 
10138
11215
  <ng-template #popupTemplate>
11216
+ <!--popup/actionsheet content-->
11217
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
11218
+ </ng-template>
11219
+
11220
+ <kendo-resize-sensor *ngIf="isOpen || isAdaptiveModeEnabled" (resize)="onResize()"> </kendo-resize-sensor>
11221
+
11222
+ <!-- when the popupSettings.appendTo value is set to 'component', this container is used -->
11223
+ <ng-container #container></ng-container>
11224
+
11225
+ <!--adaptive rendering-->
11226
+ <responsive-renderer
11227
+ [sharedPopupActionSheetTemplate]="sharedPopupActionSheetTemplate"
11228
+ [isActionSheetExpanded]="isActionSheetExpanded"
11229
+ [title]="title"
11230
+ [showTextInput]="true"
11231
+ [subtitle]="subtitle"
11232
+ (closePopup)="togglePopup(false)"
11233
+ (textInputChange)="onAdaptiveTextBoxChange($event)"
11234
+ (navigate)="handleNavigate($event)"
11235
+ [placeholder]="placeholder"
11236
+ >
11237
+ </responsive-renderer>
11238
+
11239
+ <ng-template #sharedPopupActionSheetTemplate>
10139
11240
  <!--user-defined header template -->
10140
11241
  <ng-template
10141
11242
  *ngIf="headerTemplate"
@@ -10144,23 +11245,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10144
11245
  }"
10145
11246
  >
10146
11247
  </ng-template>
10147
-
10148
11248
  <!--data table-->
10149
11249
  <div class="k-data-table" [ngClass]="tableSizeClass">
10150
-
10151
11250
  <!--grid header-->
10152
- <div
10153
- #header
10154
- class="k-table-header"
10155
- >
11251
+ <div #header class="k-table-header">
10156
11252
  <div class="k-table-header-wrap">
10157
11253
  <table class="k-table" role="presentation">
10158
11254
  <colgroup>
10159
11255
  <ng-container *ngFor="let column of columns">
10160
- <col
10161
- *ngIf="!column.hidden && column.matchesMedia"
10162
- [style.width.px]="column.width"
10163
- />
11256
+ <col *ngIf="!column.hidden && column.matchesMedia" [style.width.px]="column.width" />
10164
11257
  </ng-container>
10165
11258
  </colgroup>
10166
11259
  <thead class="k-table-thead">
@@ -10191,7 +11284,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10191
11284
  </table>
10192
11285
  </div>
10193
11286
  </div>
10194
-
10195
11287
  <!-- item template -->
10196
11288
  <ng-template #rowTemplate let-dataItem>
10197
11289
  <ng-container *ngFor="let column of columns">
@@ -10218,8 +11310,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10218
11310
  </span>
10219
11311
  </ng-container>
10220
11312
  </ng-template>
10221
-
10222
- <!--list-->
10223
11313
  <kendo-list
10224
11314
  #optionsList
10225
11315
  [optionPrefix]="optionPrefix"
@@ -10239,10 +11329,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10239
11329
  </kendo-list>
10240
11330
 
10241
11331
  <!--no-data template-->
10242
- <div
10243
- class="k-no-data"
10244
- *ngIf="data.length === 0"
10245
- >
11332
+ <div class="k-no-data" *ngIf="data.length === 0">
10246
11333
  <ng-template
10247
11334
  [ngIf]="noDataTemplate"
10248
11335
  [templateContext]="{
@@ -10273,23 +11360,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10273
11360
  </tfoot>
10274
11361
  </table>
10275
11362
  </div>
10276
- </ng-container>
10277
-
11363
+ </ng-container>
10278
11364
  </div>
10279
-
10280
11365
  </ng-template>
10281
-
10282
- <kendo-resize-sensor
10283
- *ngIf="isOpen"
10284
- (resize)="onResize()"
10285
- >
10286
- </kendo-resize-sensor>
10287
-
10288
- <!-- when the popupSettings.appendTo value is set to 'component', this container is used -->
10289
- <ng-container #container></ng-container>
10290
- `
11366
+ `,
10291
11367
  }]
10292
- }], ctorParameters: function () { 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: [{
11368
+ }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i2$1.PopupService }, { type: SelectionService }, { type: NavigationService }, { type: DisabledItemsService }, { type: DataService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: undefined, decorators: [{
10293
11369
  type: Inject,
10294
11370
  args: [TOUCH_ENABLED]
10295
11371
  }] }]; }, propDecorators: { hostClasses: [{
@@ -10351,6 +11427,10 @@ class DropDownTreeComponent {
10351
11427
  this.cdr = cdr;
10352
11428
  this.localization = localization;
10353
11429
  this.touchEnabled = touchEnabled;
11430
+ /**
11431
+ * @hidden
11432
+ */
11433
+ this.animationDuration = animationDuration;
10354
11434
  /**
10355
11435
  * @hidden
10356
11436
  */
@@ -10428,13 +11508,7 @@ class DropDownTreeComponent {
10428
11508
  * The hint which is displayed when the component is empty.
10429
11509
  */
10430
11510
  this.placeholder = "";
10431
- /**
10432
- * Sets the height of the options list. By default, `listHeight` is 200px.
10433
- *
10434
- * > The `listHeight` property affects only the list of options and not the whole popup container.
10435
- * > To set the height of the popup container, use `popupSettings.height`.
10436
- */
10437
- this.listHeight = 200;
11511
+ this._listHeight = 200;
10438
11512
  /**
10439
11513
  * Sets the disabled state of the component.
10440
11514
  */
@@ -10483,6 +11557,28 @@ class DropDownTreeComponent {
10483
11557
  * @hidden
10484
11558
  */
10485
11559
  this.selectedKeys = [];
11560
+ /**
11561
+ * Enables or disables the adaptive mode. By default the adaptive rendering is disabled.
11562
+ */
11563
+ this.adaptiveMode = 'none';
11564
+ /**
11565
+ * Sets the title of the ActionSheet that is rendered instead of the Popup when using small screen devices.
11566
+ * By default the ActionSheet title uses the text provided for the label of the AutoComplete.
11567
+ */
11568
+ this.title = '';
11569
+ /**
11570
+ * Sets the subtitle of the ActionSheet that is rendered instead of the Popup when using small screen devices.
11571
+ * By default the ActionSheet subtitle uses the text provided for the `placeholder` of the AutoComplete.
11572
+ */
11573
+ this.subtitle = '';
11574
+ /**
11575
+ * @hidden
11576
+ */
11577
+ this.windowSize = 'large';
11578
+ /**
11579
+ * @hidden
11580
+ */
11581
+ this.isActionSheetExpanded = false;
10486
11582
  /**
10487
11583
  * @hidden
10488
11584
  */
@@ -10515,6 +11611,21 @@ class DropDownTreeComponent {
10515
11611
  this.subscribeTouchEvents();
10516
11612
  this.subscribeFocusEvents();
10517
11613
  }
11614
+ /**
11615
+ * @hidden
11616
+ */
11617
+ get actionSheet() {
11618
+ return this.responsiveRendererComponent?.actionSheet;
11619
+ }
11620
+ /**
11621
+ * @hidden
11622
+ */
11623
+ get actionSheetSearchBar() {
11624
+ return this.responsiveRendererComponent?.actionSheetSearchBar;
11625
+ }
11626
+ get isReadonly() {
11627
+ return this.readonly ? '' : null;
11628
+ }
10518
11629
  get hostAriaInvalid() {
10519
11630
  return this.formControl ? this.formControl.invalid.toString() : null;
10520
11631
  }
@@ -10545,9 +11656,6 @@ class DropDownTreeComponent {
10545
11656
  get hostAriaAutocomplete() {
10546
11657
  return this.filterable ? 'list' : null;
10547
11658
  }
10548
- get isReadonly() {
10549
- return this.readonly ? '' : null;
10550
- }
10551
11659
  set treeview(treeview) {
10552
11660
  if (treeview) {
10553
11661
  if (this.isFocused && !this.filterable || this.touchEnabled) {
@@ -10614,6 +11722,24 @@ class DropDownTreeComponent {
10614
11722
  get dataItem() {
10615
11723
  return this._dataItem ? this._dataItem : this.value;
10616
11724
  }
11725
+ /**
11726
+ * Sets the height of the options list in the popup. By default, `listHeight` is 200px.
11727
+ *
11728
+ * > The `listHeight` property affects only the list of options and not the whole popup container.
11729
+ * > To set the height of the popup container, use `popupSettings.height`.
11730
+ *
11731
+ * > When using `adaptiveMode` and the screen size is `small` or `medium` the `listHeight` property is set to null.
11732
+ */
11733
+ set listHeight(_listHeight) {
11734
+ this._listHeight = _listHeight;
11735
+ }
11736
+ ;
11737
+ get listHeight() {
11738
+ if (this.isAdaptive) {
11739
+ return;
11740
+ }
11741
+ return this._listHeight;
11742
+ }
10617
11743
  /**
10618
11744
  * Specifies the [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.
10619
11745
  */
@@ -10708,10 +11834,10 @@ class DropDownTreeComponent {
10708
11834
  return isPresent(popupHeight) ? `${popupHeight}px` : 'auto';
10709
11835
  }
10710
11836
  /**
10711
- * Returns the current open state of the popup.
11837
+ * Returns the current open state. Returns `true` if the popup or actionSheet is open.
10712
11838
  */
10713
11839
  get isOpen() {
10714
- return isPresent(this.popupRef);
11840
+ return isTruthy(isPresent(this.popupRef) || this.isActionSheetExpanded);
10715
11841
  }
10716
11842
  get clearButtonVisiblity() {
10717
11843
  if (this.touchEnabled) {
@@ -10721,6 +11847,26 @@ class DropDownTreeComponent {
10721
11847
  get isFilterActive() {
10722
11848
  return this.filterInput && document.activeElement === this.filterInput.nativeElement;
10723
11849
  }
11850
+ /**
11851
+ * @hidden
11852
+ */
11853
+ onFilterChange(text) {
11854
+ if (this.filterable) {
11855
+ this.filterChange.emit(text);
11856
+ }
11857
+ }
11858
+ /**
11859
+ * @hidden
11860
+ */
11861
+ get isAdaptiveModeEnabled() {
11862
+ return this.adaptiveMode === 'auto';
11863
+ }
11864
+ /**
11865
+ * @hidden
11866
+ */
11867
+ get isAdaptive() {
11868
+ return this.isAdaptiveModeEnabled && this.windowSize !== 'large';
11869
+ }
10724
11870
  /**
10725
11871
  * @hidden
10726
11872
  *
@@ -10835,8 +11981,27 @@ class DropDownTreeComponent {
10835
11981
  this.verifySettings();
10836
11982
  }
10837
11983
  ngAfterViewInit() {
11984
+ this.windowSize = windowSize();
10838
11985
  this.subs.add(this.renderer.listen(this.wrapper.nativeElement, 'click', this.handleClick.bind(this)));
10839
11986
  this.subs.add(this.renderer.listen(this.wrapper.nativeElement, 'keydown', this.handleKeydown.bind(this)));
11987
+ this.renderer.setAttribute(this.actionSheet?.element.nativeElement, 'style', '--kendo-actionsheet-height: 60vh; --kendo-actionsheet-max-height: none');
11988
+ }
11989
+ /**
11990
+ * @hidden
11991
+ */
11992
+ onResize() {
11993
+ if (this.isAdaptiveModeEnabled && this.windowSize !== windowSize()) {
11994
+ if (this.isOpen) {
11995
+ this.togglePopup(false);
11996
+ }
11997
+ this.windowSize = windowSize();
11998
+ }
11999
+ if (this.isOpen && !this.isActionSheetExpanded) {
12000
+ const popupWrapper = this.popupRef.popupElement;
12001
+ const { min, max } = this.width;
12002
+ popupWrapper.style.minWidth = min;
12003
+ popupWrapper.style.width = max;
12004
+ }
10840
12005
  }
10841
12006
  /**
10842
12007
  * @hidden
@@ -10887,19 +12052,21 @@ class DropDownTreeComponent {
10887
12052
  * @hidden
10888
12053
  */
10889
12054
  handleBlur(e) {
10890
- const relatedTarget = e && e.relatedTarget;
10891
- if (this.wrapper.nativeElement.contains(relatedTarget) ||
10892
- (this.isOpen && this.popupRef.popupElement.contains(relatedTarget))) {
10893
- return;
10894
- }
10895
- this.isFocused = false;
10896
- this.togglePopup(false);
10897
- if (hasObservers(this.onBlur) ||
10898
- isUntouched(this.wrapper.nativeElement)) {
10899
- this._zone.run(() => {
10900
- this.onBlur.emit();
10901
- this.onTouchedCallback();
10902
- });
12055
+ if (!this.isActionSheetExpanded) {
12056
+ const relatedTarget = e && e.relatedTarget;
12057
+ if (this.wrapper.nativeElement.contains(relatedTarget) ||
12058
+ (this.isOpen && this.popupRef.popupElement.contains(relatedTarget))) {
12059
+ return;
12060
+ }
12061
+ this.isFocused = false;
12062
+ this.togglePopup(false);
12063
+ if (hasObservers(this.onBlur) ||
12064
+ isUntouched(this.wrapper.nativeElement)) {
12065
+ this._zone.run(() => {
12066
+ this.onBlur.emit();
12067
+ this.onTouchedCallback();
12068
+ });
12069
+ }
10903
12070
  }
10904
12071
  }
10905
12072
  /**
@@ -10909,7 +12076,11 @@ class DropDownTreeComponent {
10909
12076
  if (this.disabled || this.readonly) {
10910
12077
  return;
10911
12078
  }
10912
- if (!this.isFilterActive && isLetter(event.key)) {
12079
+ if (event.keyCode === Keys.Tab && this.isActionSheetExpanded) {
12080
+ this.togglePopup(false);
12081
+ return;
12082
+ }
12083
+ if (!this.isFilterActive && isLetter(event.key) && !this.actionSheetSearchBar?.onFocus) {
10913
12084
  this.printableCharacters.next(event.key);
10914
12085
  }
10915
12086
  const eventData = event;
@@ -10957,9 +12128,9 @@ class DropDownTreeComponent {
10957
12128
  this.dataItem = undefined;
10958
12129
  }
10959
12130
  /**
10960
- * Toggles the visibility of the popup
12131
+ * Toggles the visibility of the popup or actionSheet.
10961
12132
  * ([see example]({% slug openstate_ddt %})).
10962
- * If you use the `toggle` method to open or close the popup, the `open` and `close` events will not be fired.
12133
+ * If you use the `toggle` method to open or close the popup or actionSheet, the `open` and `close` events will not be fired.
10963
12134
  *
10964
12135
  * @param open - The state of the popup.
10965
12136
  */
@@ -11069,7 +12240,7 @@ class DropDownTreeComponent {
11069
12240
  * @hidden
11070
12241
  */
11071
12242
  handleFilterInputChange(input) {
11072
- this.filterChange.next(input.value);
12243
+ this.filterChange.next(typeof (input) === 'string' ? input : input.value);
11073
12244
  this.allNodesHidden = this.nodes.every((node, index) => !this.isVisible(node, String(index)));
11074
12245
  }
11075
12246
  /**
@@ -11129,8 +12300,24 @@ class DropDownTreeComponent {
11129
12300
  if (this.popupRef) {
11130
12301
  this._searchableNodes = getSearchableItems(this.treeViewId, this.popupRef.popupElement);
11131
12302
  }
12303
+ if (this.isActionSheetExpanded) {
12304
+ this._searchableNodes = getSearchableItems(this.treeViewId, this.actionSheet.element.nativeElement);
12305
+ }
11132
12306
  });
11133
12307
  }
12308
+ /**
12309
+ * @hidden
12310
+ */
12311
+ onExpand() {
12312
+ this._searchableNodes = getSearchableItems(this.treeViewId, this.actionSheet.element.nativeElement);
12313
+ this.isActionSheetExpanded = true;
12314
+ }
12315
+ /**
12316
+ * @hidden
12317
+ */
12318
+ onCollapse() {
12319
+ this.isActionSheetExpanded = false;
12320
+ }
11134
12321
  /**
11135
12322
  * @hidden
11136
12323
  *
@@ -11165,6 +12352,12 @@ class DropDownTreeComponent {
11165
12352
  return eventArgs.isDefaultPrevented();
11166
12353
  }
11167
12354
  createPopup() {
12355
+ this.windowSize = windowSize();
12356
+ if (this.isAdaptive) {
12357
+ this.openActionSheet();
12358
+ this.cdr.detectChanges();
12359
+ return;
12360
+ }
11168
12361
  const horizontalAlign = this.direction === "rtl" ? "right" : "left";
11169
12362
  const anchorPosition = { horizontal: horizontalAlign, vertical: 'bottom' };
11170
12363
  const popupPosition = { horizontal: horizontalAlign, vertical: 'top' };
@@ -11197,6 +12390,9 @@ class DropDownTreeComponent {
11197
12390
  });
11198
12391
  }
11199
12392
  destroyPopup() {
12393
+ if (this.isActionSheetExpanded) {
12394
+ this.closeActionSheet();
12395
+ }
11200
12396
  if (this.popupRef) {
11201
12397
  this.popupRef.close();
11202
12398
  this.popupRef = null;
@@ -11213,10 +12409,13 @@ class DropDownTreeComponent {
11213
12409
  }
11214
12410
  handleClick(e) {
11215
12411
  // The check is needed otherwise when appended to the component, the popup reopens on click
11216
- // https://github.com/telerik/kendo-angular/issues/3738
11217
- if ((this.popupRef && !this.popupRef.popupElement.contains(e.target))
11218
- || (!this.popupRef && !e.target.className.includes('k-treeview-leaf'))) {
11219
- this.togglePopup(!this.isOpen);
12412
+ // https://github.com/telerik/kendo-angular/issues/3738
12413
+ this.windowSize = windowSize();
12414
+ if (!this.isActionSheetExpanded) {
12415
+ if ((this.popupRef && !this.popupRef.popupElement.contains(e.target))
12416
+ || (!this.popupRef && !e.target.className.includes('k-treeview-leaf'))) {
12417
+ this.togglePopup(!this.isOpen);
12418
+ }
11220
12419
  }
11221
12420
  }
11222
12421
  handleEscape() {
@@ -11286,7 +12485,12 @@ class DropDownTreeComponent {
11286
12485
  }
11287
12486
  event.originalEvent.preventDefault();
11288
12487
  if (this.filterable && this.treeview['navigationService']['activeIndex'] === '0') {
11289
- this.filterInput.nativeElement.focus();
12488
+ if (this.isActionSheetExpanded) {
12489
+ this.actionSheetSearchBar.focus();
12490
+ }
12491
+ else {
12492
+ this.filterInput.nativeElement.focus();
12493
+ }
11290
12494
  }
11291
12495
  })
11292
12496
  ].forEach(sub => this.subs.add(sub));
@@ -11371,9 +12575,30 @@ class DropDownTreeComponent {
11371
12575
  }
11372
12576
  });
11373
12577
  }
12578
+ closeActionSheet() {
12579
+ this.actionSheet.toggle(false);
12580
+ if (this.filterable) {
12581
+ this.actionSheetSearchBar.value = '';
12582
+ this.filterChange.emit('');
12583
+ }
12584
+ this.wrapper.nativeElement.focus();
12585
+ this.closed.emit();
12586
+ }
12587
+ openActionSheet() {
12588
+ this.windowSize = windowSize();
12589
+ this.isActionSheetExpanded = true;
12590
+ this.actionSheet.toggle(true);
12591
+ this.title = setActionSheetTitle(this.wrapper, this.title);
12592
+ this.cdr.detectChanges();
12593
+ updateActionSheetAdaptiveAppearance(this.actionSheet, this.windowSize, this.renderer);
12594
+ this.cdr.detectChanges();
12595
+ this.opened.emit();
12596
+ this.removeTreeViewFromTabOrder();
12597
+ this.filterable && this.actionSheetSearchBar.focus();
12598
+ }
11374
12599
  }
11375
- 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 });
11376
- 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: [
12600
+ 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 });
12601
+ 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: [
11377
12602
  DataService,
11378
12603
  SelectionService,
11379
12604
  NavigationService,
@@ -11400,7 +12625,7 @@ DropDownTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
11400
12625
  provide: ExpandableComponent,
11401
12626
  useExisting: forwardRef(() => DropDownTreeComponent)
11402
12627
  }
11403
- ], 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: `
12628
+ ], 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: `
11404
12629
  <ng-container kendoDropDownTreeLocalizedMessages
11405
12630
  i18n-noDataText="kendo.dropdowntree.noDataText|The text displayed in the popup when there are no items"
11406
12631
  noDataText="NO DATA FOUND"
@@ -11464,8 +12689,26 @@ DropDownTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
11464
12689
  </kendo-icon-wrapper>
11465
12690
  </button>
11466
12691
  <ng-template #popupTemplate>
11467
- <span
11468
- *ngIf="filterable"
12692
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
12693
+ </ng-template>
12694
+ <ng-container #container></ng-container>
12695
+
12696
+ <!--adaptive rendering-->
12697
+ <responsive-renderer
12698
+ [sharedPopupActionSheetTemplate]="sharedPopupActionSheetTemplate"
12699
+ [isActionSheetExpanded]="isActionSheetExpanded"
12700
+ [title]="title"
12701
+ [showTextInput]="filterable"
12702
+ [subtitle]="subtitle"
12703
+ (closePopup)="togglePopup(false)"
12704
+ (onExpand)="onExpand()"
12705
+ (onCollapse)="onCollapse()"
12706
+ (textInputChange)="handleFilterInputChange($event)"
12707
+ >
12708
+ </responsive-renderer>
12709
+ <ng-template #sharedPopupActionSheetTemplate>
12710
+ <span
12711
+ *ngIf="filterable && !isActionSheetExpanded"
11469
12712
  class="k-list-filter"
11470
12713
  >
11471
12714
  <span
@@ -11551,8 +12794,9 @@ DropDownTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
11551
12794
  </ng-template>
11552
12795
  </div>
11553
12796
  </ng-template>
11554
- <ng-container #container></ng-container>
11555
- `, 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 });
12797
+
12798
+ <kendo-resize-sensor *ngIf="isOpen || isAdaptiveModeEnabled" (resize)="onResize()"></kendo-resize-sensor>
12799
+ `, 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 });
11556
12800
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: DropDownTreeComponent, decorators: [{
11557
12801
  type: Component,
11558
12802
  args: [{
@@ -11650,8 +12894,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11650
12894
  </kendo-icon-wrapper>
11651
12895
  </button>
11652
12896
  <ng-template #popupTemplate>
11653
- <span
11654
- *ngIf="filterable"
12897
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
12898
+ </ng-template>
12899
+ <ng-container #container></ng-container>
12900
+
12901
+ <!--adaptive rendering-->
12902
+ <responsive-renderer
12903
+ [sharedPopupActionSheetTemplate]="sharedPopupActionSheetTemplate"
12904
+ [isActionSheetExpanded]="isActionSheetExpanded"
12905
+ [title]="title"
12906
+ [showTextInput]="filterable"
12907
+ [subtitle]="subtitle"
12908
+ (closePopup)="togglePopup(false)"
12909
+ (onExpand)="onExpand()"
12910
+ (onCollapse)="onCollapse()"
12911
+ (textInputChange)="handleFilterInputChange($event)"
12912
+ >
12913
+ </responsive-renderer>
12914
+ <ng-template #sharedPopupActionSheetTemplate>
12915
+ <span
12916
+ *ngIf="filterable && !isActionSheetExpanded"
11655
12917
  class="k-list-filter"
11656
12918
  >
11657
12919
  <span
@@ -11737,21 +12999,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11737
12999
  </ng-template>
11738
13000
  </div>
11739
13001
  </ng-template>
11740
- <ng-container #container></ng-container>
13002
+
13003
+ <kendo-resize-sensor *ngIf="isOpen || isAdaptiveModeEnabled" (resize)="onResize()"></kendo-resize-sensor>
11741
13004
  `,
11742
13005
  changeDetection: ChangeDetectionStrategy.OnPush
11743
13006
  }]
11744
- }], ctorParameters: function () { 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: [{
13007
+ }], ctorParameters: function () { 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: [{
11745
13008
  type: Optional
11746
13009
  }, {
11747
13010
  type: Inject,
11748
13011
  args: [TOUCH_ENABLED]
11749
- }] }]; }, propDecorators: { hostClasses: [{
13012
+ }] }]; }, propDecorators: { responsiveRendererComponent: [{
13013
+ type: ViewChild,
13014
+ args: [ResponsiveRendererComponent]
13015
+ }], hostClasses: [{
11750
13016
  type: HostBinding,
11751
13017
  args: ['class.k-dropdowntree']
11752
13018
  }, {
11753
13019
  type: HostBinding,
11754
13020
  args: ['class.k-picker']
13021
+ }], isReadonly: [{
13022
+ type: HostBinding,
13023
+ args: ['attr.readonly']
11755
13024
  }], hostAriaInvalid: [{
11756
13025
  type: HostBinding,
11757
13026
  args: ['attr.aria-invalid']
@@ -11791,9 +13060,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11791
13060
  }], hostAriaAutocomplete: [{
11792
13061
  type: HostBinding,
11793
13062
  args: ['attr.aria-autocomplete']
11794
- }], isReadonly: [{
11795
- type: HostBinding,
11796
- args: ['attr.readonly']
11797
13063
  }], noDataTemplate: [{
11798
13064
  type: ContentChild,
11799
13065
  args: [NoDataTemplateDirective, { static: false }]
@@ -11897,6 +13163,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11897
13163
  type: Input
11898
13164
  }], focusableId: [{
11899
13165
  type: Input
13166
+ }], adaptiveMode: [{
13167
+ type: Input
13168
+ }], title: [{
13169
+ type: Input
13170
+ }], subtitle: [{
13171
+ type: Input
11900
13172
  }] } });
11901
13173
 
11902
13174
  /**
@@ -12351,6 +13623,10 @@ class MultiSelectTreeComponent {
12351
13623
  this.cdr = cdr;
12352
13624
  this.lookup = lookup;
12353
13625
  this.touchEnabled = touchEnabled;
13626
+ /**
13627
+ * @hidden
13628
+ */
13629
+ this.animationDuration = animationDuration;
12354
13630
  /**
12355
13631
  * @hidden
12356
13632
  */
@@ -12363,6 +13639,23 @@ class MultiSelectTreeComponent {
12363
13639
  this.treeViewId = `k-${guid$1()}`;
12364
13640
  this.role = 'combobox';
12365
13641
  this.ariaHasPopup = 'tree';
13642
+ /**
13643
+ * Enables or disables the adaptive mode. By default the adaptive rendering is disabled.
13644
+ */
13645
+ this.adaptiveMode = 'none';
13646
+ /**
13647
+ * Sets the title of the ActionSheet that is rendered instead of the Popup when using small screen devices.
13648
+ * By default the ActionSheet title uses the text provided for the label of the AutoComplete.
13649
+ */
13650
+ this.title = '';
13651
+ /**
13652
+ * @hidden
13653
+ */
13654
+ this.windowSize = 'large';
13655
+ /**
13656
+ * @hidden
13657
+ */
13658
+ this.isActionSheetExpanded = false;
12366
13659
  /**
12367
13660
  * Sets the levels in the data set where the values can be found when `valueField` is an Array.
12368
13661
  * The field serves to correctly allocate a data item used when the MultiSelectTree is initialized with a value.
@@ -12371,14 +13664,8 @@ class MultiSelectTreeComponent {
12371
13664
  /**
12372
13665
  * The hint which is displayed when the component is empty.
12373
13666
  */
12374
- this.placeholder = "";
12375
- /**
12376
- * Sets the height of the options list. By default, `listHeight` is 200px.
12377
- *
12378
- * > The `listHeight` property affects only the list of options and not the whole popup container.
12379
- * > To set the height of the popup container, use `popupSettings.height`.
12380
- */
12381
- this.listHeight = 200;
13667
+ this.placeholder = '';
13668
+ this._listHeight = 200;
12382
13669
  /**
12383
13670
  * Sets the disabled state of the component.
12384
13671
  */
@@ -12521,6 +13808,7 @@ class MultiSelectTreeComponent {
12521
13808
  this._popupSettings = DEFAULT_POPUP_SETTINGS;
12522
13809
  this._checkableSettings = DEFAULT_CHECKABLE_SETTINGS;
12523
13810
  this._isFocused = false;
13811
+ this._initiallyCheckedItems = [];
12524
13812
  this._size = 'medium';
12525
13813
  this._rounded = 'medium';
12526
13814
  this._fillMode = 'solid';
@@ -12581,7 +13869,47 @@ class MultiSelectTreeComponent {
12581
13869
  /**
12582
13870
  * @hidden
12583
13871
  */
12584
- handleKeydown(event) {
13872
+ onFilterChange(text) {
13873
+ if (this.filterable) {
13874
+ this.filterChange.emit(text);
13875
+ }
13876
+ }
13877
+ /**
13878
+ * @hidden
13879
+ */
13880
+ onExpand() {
13881
+ this._searchableNodes = getSearchableItems(this.treeViewId, this.actionSheet.element.nativeElement);
13882
+ this.isActionSheetExpanded = true;
13883
+ }
13884
+ /**
13885
+ * @hidden
13886
+ */
13887
+ onCollapse() {
13888
+ this.isActionSheetExpanded = false;
13889
+ }
13890
+ /**
13891
+ * Sets the subtitle of the ActionSheet that is rendered instead of the Popup when using small screen devices.
13892
+ * By default the ActionSheet subtitle uses the text provided for the `placeholder` of the AutoComplete.
13893
+ */
13894
+ set subtitle(_subtitle) {
13895
+ this._subtitle = _subtitle;
13896
+ }
13897
+ get subtitle() {
13898
+ return this._subtitle || this.placeholder;
13899
+ }
13900
+ /**
13901
+ * @hidden
13902
+ */
13903
+ get isAdaptiveModeEnabled() {
13904
+ return this.adaptiveMode === 'auto';
13905
+ }
13906
+ /**
13907
+ * @hidden
13908
+ */
13909
+ handleKeydown(event, input) {
13910
+ if (input) {
13911
+ event.stopImmediatePropagation();
13912
+ }
12585
13913
  const deleteTag = this.isWrapperActive && event.keyCode === Keys.Backspace && this.tags.length > 0;
12586
13914
  if (deleteTag) {
12587
13915
  this.handleBackspace();
@@ -12590,7 +13918,7 @@ class MultiSelectTreeComponent {
12590
13918
  if (this.disabled || this.readonly) {
12591
13919
  return;
12592
13920
  }
12593
- if (!this.isFilterActive && isLetter(event.key)) {
13921
+ if (!this.isFilterActive && isLetter(event.key) && !this.actionSheetSearchBar?.onFocus) {
12594
13922
  this.printableCharacters.next(event.key);
12595
13923
  }
12596
13924
  const eventData = event;
@@ -12605,6 +13933,24 @@ class MultiSelectTreeComponent {
12605
13933
  this.treeview?.element.nativeElement.dispatchEvent(spaceKeyDownEvent);
12606
13934
  }
12607
13935
  }
13936
+ /**
13937
+ * @hidden
13938
+ */
13939
+ get actionSheet() {
13940
+ return this.responsiveRendererComponent?.actionSheet;
13941
+ }
13942
+ /**
13943
+ * @hidden
13944
+ */
13945
+ get actionSheetSearchBar() {
13946
+ return this.responsiveRendererComponent?.actionSheetSearchBar;
13947
+ }
13948
+ /**
13949
+ * @hidden
13950
+ */
13951
+ get isAdaptive() {
13952
+ return this.isAdaptiveModeEnabled && this.windowSize !== 'large';
13953
+ }
12608
13954
  set treeview(treeview) {
12609
13955
  this._treeview = treeview;
12610
13956
  if (treeview) {
@@ -12790,6 +14136,24 @@ class MultiSelectTreeComponent {
12790
14136
  };
12791
14137
  });
12792
14138
  }
14139
+ /**
14140
+ * Sets the height of the options list in the popup. By default, `listHeight` is 200px.
14141
+ *
14142
+ * > The `listHeight` property affects only the list of options and not the whole popup container.
14143
+ * > To set the height of the popup container, use `popupSettings.height`.
14144
+ *
14145
+ * > When using `adaptiveMode` and the screen size is `small` or `medium` the `listHeight` property is set to null.
14146
+ */
14147
+ set listHeight(_listHeight) {
14148
+ this._listHeight = _listHeight;
14149
+ }
14150
+ ;
14151
+ get listHeight() {
14152
+ if (this.isAdaptive) {
14153
+ return;
14154
+ }
14155
+ return this._listHeight;
14156
+ }
12793
14157
  /**
12794
14158
  * @hidden
12795
14159
  */
@@ -12808,10 +14172,10 @@ class MultiSelectTreeComponent {
12808
14172
  return this._isFocused;
12809
14173
  }
12810
14174
  /**
12811
- * Returns the current open state of the popup.
14175
+ * Returns the current open state. Returns `true` if the popup or actionSheet is open.
12812
14176
  */
12813
14177
  get isOpen() {
12814
- return isPresent(this.popupRef);
14178
+ return isTruthy(isPresent(this.popupRef) || this.isActionSheetExpanded);
12815
14179
  }
12816
14180
  get width() {
12817
14181
  const wrapperWidth = this.wrapper.nativeElement.offsetWidth;
@@ -12922,6 +14286,23 @@ class MultiSelectTreeComponent {
12922
14286
  get isCheckAllActive() {
12923
14287
  return this.checkAllInput && document.activeElement === this.checkAllInput.nativeElement;
12924
14288
  }
14289
+ /**
14290
+ * @hidden
14291
+ */
14292
+ onResize() {
14293
+ if (this.isAdaptiveModeEnabled && this.windowSize !== windowSize()) {
14294
+ if (this.isOpen) {
14295
+ this.togglePopup(false);
14296
+ }
14297
+ this.windowSize = windowSize();
14298
+ }
14299
+ if (this.isOpen && !this.isActionSheetExpanded) {
14300
+ const popupWrapper = this.popupRef.popupElement;
14301
+ const { min, max } = this.width;
14302
+ popupWrapper.style.minWidth = min;
14303
+ popupWrapper.style.width = max;
14304
+ }
14305
+ }
12925
14306
  ngOnInit() {
12926
14307
  this.subs.add(this.printableCharacters.pipe(tap((char) => {
12927
14308
  this._typedValue += char;
@@ -12940,10 +14321,13 @@ class MultiSelectTreeComponent {
12940
14321
  this.cdr.markForCheck();
12941
14322
  }));
12942
14323
  this.setComponentClasses();
14324
+ this._initiallyCheckedItems = [...this.checkedItems];
12943
14325
  }
12944
14326
  ngAfterViewInit() {
14327
+ this.windowSize = windowSize();
12945
14328
  this.subs.add(this.renderer.listen(this.wrapper.nativeElement, 'click', this.handleClick.bind(this)));
12946
14329
  this.subs.add(this.renderer.listen(this.wrapper.nativeElement, 'keydown', this.handleKeydown.bind(this)));
14330
+ this.renderer.setAttribute(this.actionSheet?.element.nativeElement, 'style', '--kendo-actionsheet-height: 60vh; --kendo-actionsheet-max-height: none');
12947
14331
  }
12948
14332
  /**
12949
14333
  * @hidden
@@ -12986,6 +14370,23 @@ class MultiSelectTreeComponent {
12986
14370
  ngAfterContentChecked() {
12987
14371
  this.verifySettings();
12988
14372
  }
14373
+ /**
14374
+ * @hidden
14375
+ */
14376
+ applyValue() {
14377
+ this.value = this._tempValue;
14378
+ this._initiallyCheckedItems = [...this.checkedItems];
14379
+ this.emitValueChange(this.value);
14380
+ this.setTags();
14381
+ this.toggle(false);
14382
+ }
14383
+ /**
14384
+ * @hidden
14385
+ */
14386
+ cancelValue() {
14387
+ this.checkedItems = [...this._initiallyCheckedItems];
14388
+ this.togglePopup(false);
14389
+ }
12989
14390
  ngAfterContentInit() {
12990
14391
  this.isContentInit = true;
12991
14392
  // Still need to keep the call of 'registerLookupItems()' from ngAfterContentInit in the cases when the data is passed initially
@@ -13042,7 +14443,7 @@ class MultiSelectTreeComponent {
13042
14443
  this.valueDepth = [];
13043
14444
  }
13044
14445
  /**
13045
- * Toggles the visibility of the popup
14446
+ * Toggles the visibility of the popup or actionSheet
13046
14447
  * ([see example]({% slug openstate_multiselecttree %})).
13047
14448
  * If you use the `toggle` method to open or close the popup, the `open` and `close` events will not be fired.
13048
14449
  *
@@ -13087,19 +14488,21 @@ class MultiSelectTreeComponent {
13087
14488
  * @hidden
13088
14489
  */
13089
14490
  handleBlur(e) {
13090
- const relatedTarget = e && e.relatedTarget;
13091
- if (this.wrapper.nativeElement.contains(relatedTarget) ||
13092
- (this.isOpen && this.popupRef.popupElement.contains(relatedTarget))) {
13093
- return;
13094
- }
13095
- this.isFocused = false;
13096
- this.togglePopup(false);
13097
- if (hasObservers(this.onBlur) ||
13098
- isUntouched(this.wrapper.nativeElement)) {
13099
- this._zone.run(() => {
13100
- this.onBlur.emit();
13101
- this.onTouchedCallback();
13102
- });
14491
+ if (!this.isActionSheetExpanded) {
14492
+ const relatedTarget = e && e.relatedTarget;
14493
+ if (this.wrapper.nativeElement.contains(relatedTarget) ||
14494
+ (this.isOpen && this.popupRef.popupElement.contains(relatedTarget))) {
14495
+ return;
14496
+ }
14497
+ this.isFocused = false;
14498
+ this.togglePopup(false);
14499
+ if (hasObservers(this.onBlur) ||
14500
+ isUntouched(this.wrapper.nativeElement)) {
14501
+ this._zone.run(() => {
14502
+ this.onBlur.emit();
14503
+ this.onTouchedCallback();
14504
+ });
14505
+ }
13103
14506
  }
13104
14507
  }
13105
14508
  /**
@@ -13326,6 +14729,12 @@ class MultiSelectTreeComponent {
13326
14729
  return eventArgs.isDefaultPrevented();
13327
14730
  }
13328
14731
  createPopup() {
14732
+ this.windowSize = windowSize();
14733
+ if (this.isAdaptive) {
14734
+ this.openActionSheet();
14735
+ this.cdr.detectChanges();
14736
+ return;
14737
+ }
13329
14738
  const horizontalAlign = this.direction === "rtl" ? "right" : "left";
13330
14739
  const anchorPosition = { horizontal: horizontalAlign, vertical: 'bottom' };
13331
14740
  const popupPosition = { horizontal: horizontalAlign, vertical: 'top' };
@@ -13359,6 +14768,9 @@ class MultiSelectTreeComponent {
13359
14768
  });
13360
14769
  }
13361
14770
  destroyPopup() {
14771
+ if (this.isActionSheetExpanded) {
14772
+ this.closeActionSheet();
14773
+ }
13362
14774
  if (this.popupRef) {
13363
14775
  this.popupRef.close();
13364
14776
  this.popupRef = null;
@@ -13377,7 +14789,7 @@ class MultiSelectTreeComponent {
13377
14789
  handleClick(e) {
13378
14790
  // The check is needed otherwise when appended to the component, the popup reopens on click
13379
14791
  // https://github.com/telerik/kendo-angular/issues/3738
13380
- if ((this.popupRef && this.popupRef.popupElement.contains(e.target))) {
14792
+ if ((this.popupRef && this.popupRef.popupElement.contains(e.target)) || this.isActionSheetExpanded) {
13381
14793
  return;
13382
14794
  }
13383
14795
  this.togglePopup(!this.isOpen);
@@ -13437,7 +14849,9 @@ class MultiSelectTreeComponent {
13437
14849
  this.handleBlur(event);
13438
14850
  }
13439
14851
  handleTabKey() {
13440
- this.focus();
14852
+ if (!this.isActionSheetExpanded) {
14853
+ this.focus();
14854
+ }
13441
14855
  if (this.isOpen) {
13442
14856
  this.treeview.blur();
13443
14857
  this.removeTreeViewFromTabOrder();
@@ -13465,7 +14879,7 @@ class MultiSelectTreeComponent {
13465
14879
  }
13466
14880
  else if (this.isCheckAllActive || isFirstNodeActive) {
13467
14881
  if (this.filterable) {
13468
- this.filterInput.nativeElement.focus();
14882
+ this.isActionSheetExpanded ? this.actionSheetSearchBar.focus() : this.filterInput.nativeElement.focus();
13469
14883
  }
13470
14884
  else {
13471
14885
  this.focus();
@@ -13558,7 +14972,9 @@ class MultiSelectTreeComponent {
13558
14972
  }
13559
14973
  setState() {
13560
14974
  if (isPresent(this.dataItems) && isPresent(this.valueField)) {
13561
- this.setTags();
14975
+ if (!this.isActionSheetExpanded) {
14976
+ this.setTags();
14977
+ }
13562
14978
  this.checkedItems = this.dataItems.slice();
13563
14979
  }
13564
14980
  this.cdr.markForCheck();
@@ -13572,8 +14988,13 @@ class MultiSelectTreeComponent {
13572
14988
  const newValue = this.valuePrimitive ?
13573
14989
  value.map(item => valueFrom(item, this.valueField)) :
13574
14990
  value.map(item => item.dataItem);
13575
- this.value = newValue;
13576
- this.emitValueChange(this.value);
14991
+ if (this.isActionSheetExpanded) {
14992
+ this._tempValue = newValue.slice();
14993
+ }
14994
+ else {
14995
+ this.value = newValue;
14996
+ this.emitValueChange(this.value);
14997
+ }
13577
14998
  }
13578
14999
  /**
13579
15000
  * @hidden
@@ -13583,6 +15004,9 @@ class MultiSelectTreeComponent {
13583
15004
  if (this.popupRef) {
13584
15005
  this._searchableNodes = getSearchableItems(this.treeViewId, this.popupRef.popupElement);
13585
15006
  }
15007
+ if (this.isActionSheetExpanded) {
15008
+ this._searchableNodes = getSearchableItems(this.treeViewId, this.actionSheet.element.nativeElement);
15009
+ }
13586
15010
  });
13587
15011
  }
13588
15012
  /**
@@ -13647,9 +15071,28 @@ class MultiSelectTreeComponent {
13647
15071
  });
13648
15072
  }
13649
15073
  }
15074
+ closeActionSheet() {
15075
+ this.wrapper.nativeElement.focus();
15076
+ this.actionSheet.toggle(false);
15077
+ if (this.filterable) {
15078
+ this.actionSheetSearchBar.value = '';
15079
+ this.filterChange.emit('');
15080
+ }
15081
+ this.closed.emit();
15082
+ }
15083
+ openActionSheet() {
15084
+ this.windowSize = windowSize();
15085
+ this.actionSheet.toggle(true);
15086
+ this.title = setActionSheetTitle(this.wrapper, this.title);
15087
+ this.cdr.detectChanges();
15088
+ updateActionSheetAdaptiveAppearance(this.actionSheet, this.windowSize, this.renderer);
15089
+ this.cdr.detectChanges();
15090
+ this.opened.emit();
15091
+ this.filterable && this.actionSheetSearchBar.focus();
15092
+ }
13650
15093
  }
13651
- 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 });
13652
- 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: [
15094
+ 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 });
15095
+ 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: [
13653
15096
  LocalizationService,
13654
15097
  NavigationService,
13655
15098
  DataService,
@@ -13677,7 +15120,7 @@ MultiSelectTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
13677
15120
  provide: KendoInput,
13678
15121
  useExisting: forwardRef(() => MultiSelectTreeComponent)
13679
15122
  }
13680
- ], 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: `
15123
+ ], 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: `
13681
15124
  <ng-container kendoMultiSelectTreeLocalizedMessages
13682
15125
  i18n-noDataText="kendo.multiselecttree.noDataText|The text displayed in the popup when there are no items"
13683
15126
  noDataText="NO DATA FOUND"
@@ -13693,6 +15136,12 @@ MultiSelectTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
13693
15136
 
13694
15137
  i18n-popupLabel="kendo.multiselecttree.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
13695
15138
  popupLabel="Options list"
15139
+
15140
+ i18n-applyButton="kendo.multiselecttree.applyButton|The text of the Apply button in the action sheet"
15141
+ applyButton="Apply"
15142
+
15143
+ i18n-cancelButton="kendo.multiselecttree.cancelButton|The text of the Cancel button in the action sheet"
15144
+ cancelButton="Cancel"
13696
15145
  >
13697
15146
  </ng-container>
13698
15147
  <kendo-taglist
@@ -13739,10 +15188,30 @@ MultiSelectTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
13739
15188
  >
13740
15189
  </span>
13741
15190
  <ng-template #popupTemplate>
15191
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
15192
+ </ng-template>
15193
+ <ng-container #container></ng-container>
15194
+ <!--adaptive rendering-->
15195
+ <responsive-renderer
15196
+ [sharedPopupActionSheetTemplate]="sharedPopupActionSheetTemplate"
15197
+ [isActionSheetExpanded]="isActionSheetExpanded"
15198
+ [title]="title"
15199
+ [showTextInput]="filterable"
15200
+ [showActionButtons]="true"
15201
+ [subtitle]="subtitle"
15202
+ (closePopup)="togglePopup(false)"
15203
+ (onExpand)="onExpand()"
15204
+ (onCollapse)="onCollapse()"
15205
+ (textInputChange)="onFilterChange($event)"
15206
+ (onApply)="applyValue()"
15207
+ (onCancel)="cancelValue()"
15208
+ >
15209
+ </responsive-renderer>
15210
+ <ng-template #sharedPopupActionSheetTemplate>
13742
15211
  <span
13743
- *ngIf="filterable"
15212
+ *ngIf="filterable && !isActionSheetExpanded"
13744
15213
  class="k-list-filter"
13745
- >
15214
+ >
13746
15215
  <span
13747
15216
  class="k-textbox k-input"
13748
15217
  [ngClass]="filterInputClasses"
@@ -13760,7 +15229,7 @@ MultiSelectTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
13760
15229
  (input)="handleFilterInputChange($event.target)"
13761
15230
  [filterInput]="filterable && !touchEnabled"
13762
15231
  [attr.aria-label]="messageFor('filterInputLabel')"
13763
- (keydown)="handleKeydown($event)"
15232
+ (keydown)="handleKeydown($event, filterInput)"
13764
15233
  [(ngModel)]="filter"
13765
15234
  class="k-input-inner"
13766
15235
  role="textbox"
@@ -13782,7 +15251,7 @@ MultiSelectTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
13782
15251
  [templateContext]="{
13783
15252
  templateRef: headerTemplate?.templateRef
13784
15253
  }">
13785
- </ng-template>
15254
+ </ng-template>
13786
15255
  <div *ngIf="checkAll" class="k-check-all">
13787
15256
  <input
13788
15257
  #checkAllInput
@@ -13865,8 +15334,9 @@ MultiSelectTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
13865
15334
  </ng-template>
13866
15335
  </div>
13867
15336
  </ng-template>
13868
- <ng-container #container></ng-container>
13869
- `, 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"] }] });
15337
+
15338
+ <kendo-resize-sensor *ngIf="isOpen || isAdaptiveModeEnabled" (resize)="onResize()"></kendo-resize-sensor>
15339
+ `, 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"] }] });
13870
15340
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MultiSelectTreeComponent, decorators: [{
13871
15341
  type: Component,
13872
15342
  args: [{
@@ -13917,6 +15387,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13917
15387
 
13918
15388
  i18n-popupLabel="kendo.multiselecttree.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
13919
15389
  popupLabel="Options list"
15390
+
15391
+ i18n-applyButton="kendo.multiselecttree.applyButton|The text of the Apply button in the action sheet"
15392
+ applyButton="Apply"
15393
+
15394
+ i18n-cancelButton="kendo.multiselecttree.cancelButton|The text of the Cancel button in the action sheet"
15395
+ cancelButton="Cancel"
13920
15396
  >
13921
15397
  </ng-container>
13922
15398
  <kendo-taglist
@@ -13963,10 +15439,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13963
15439
  >
13964
15440
  </span>
13965
15441
  <ng-template #popupTemplate>
15442
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
15443
+ </ng-template>
15444
+ <ng-container #container></ng-container>
15445
+ <!--adaptive rendering-->
15446
+ <responsive-renderer
15447
+ [sharedPopupActionSheetTemplate]="sharedPopupActionSheetTemplate"
15448
+ [isActionSheetExpanded]="isActionSheetExpanded"
15449
+ [title]="title"
15450
+ [showTextInput]="filterable"
15451
+ [showActionButtons]="true"
15452
+ [subtitle]="subtitle"
15453
+ (closePopup)="togglePopup(false)"
15454
+ (onExpand)="onExpand()"
15455
+ (onCollapse)="onCollapse()"
15456
+ (textInputChange)="onFilterChange($event)"
15457
+ (onApply)="applyValue()"
15458
+ (onCancel)="cancelValue()"
15459
+ >
15460
+ </responsive-renderer>
15461
+ <ng-template #sharedPopupActionSheetTemplate>
13966
15462
  <span
13967
- *ngIf="filterable"
15463
+ *ngIf="filterable && !isActionSheetExpanded"
13968
15464
  class="k-list-filter"
13969
- >
15465
+ >
13970
15466
  <span
13971
15467
  class="k-textbox k-input"
13972
15468
  [ngClass]="filterInputClasses"
@@ -13984,7 +15480,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13984
15480
  (input)="handleFilterInputChange($event.target)"
13985
15481
  [filterInput]="filterable && !touchEnabled"
13986
15482
  [attr.aria-label]="messageFor('filterInputLabel')"
13987
- (keydown)="handleKeydown($event)"
15483
+ (keydown)="handleKeydown($event, filterInput)"
13988
15484
  [(ngModel)]="filter"
13989
15485
  class="k-input-inner"
13990
15486
  role="textbox"
@@ -14006,7 +15502,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
14006
15502
  [templateContext]="{
14007
15503
  templateRef: headerTemplate?.templateRef
14008
15504
  }">
14009
- </ng-template>
15505
+ </ng-template>
14010
15506
  <div *ngIf="checkAll" class="k-check-all">
14011
15507
  <input
14012
15508
  #checkAllInput
@@ -14089,10 +15585,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
14089
15585
  </ng-template>
14090
15586
  </div>
14091
15587
  </ng-template>
14092
- <ng-container #container></ng-container>
15588
+
15589
+ <kendo-resize-sensor *ngIf="isOpen || isAdaptiveModeEnabled" (resize)="onResize()"></kendo-resize-sensor>
14093
15590
  `
14094
15591
  }]
14095
- }], ctorParameters: function () { 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: [{
15592
+ }], ctorParameters: function () { 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: [{
14096
15593
  type: Optional
14097
15594
  }, {
14098
15595
  type: Inject,
@@ -14151,6 +15648,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
14151
15648
  }], ariaActiveDescendant: [{
14152
15649
  type: HostBinding,
14153
15650
  args: ['attr.aria-activedescendant']
15651
+ }], adaptiveMode: [{
15652
+ type: Input
15653
+ }], title: [{
15654
+ type: Input
15655
+ }], subtitle: [{
15656
+ type: Input
15657
+ }], responsiveRendererComponent: [{
15658
+ type: ViewChild,
15659
+ args: [ResponsiveRendererComponent]
14154
15660
  }], headerTemplate: [{
14155
15661
  type: ContentChild,
14156
15662
  args: [HeaderTemplateDirective, { static: false }]
@@ -14688,7 +16194,8 @@ const INTERNAL_DIRECTIVES = [
14688
16194
  TemplateContextDirective,
14689
16195
  TagListComponent,
14690
16196
  CheckDirective,
14691
- CheckAllDirective
16197
+ CheckAllDirective,
16198
+ ResponsiveRendererComponent
14692
16199
  ];
14693
16200
  /**
14694
16201
  * @hidden
@@ -14703,21 +16210,23 @@ SharedModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "
14703
16210
  TemplateContextDirective,
14704
16211
  TagListComponent,
14705
16212
  CheckDirective,
14706
- CheckAllDirective], imports: [CommonModule, FormsModule, ReactiveFormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule, IconsModule], exports: [ListComponent,
16213
+ CheckAllDirective,
16214
+ ResponsiveRendererComponent], imports: [CommonModule, FormsModule, ReactiveFormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule, IconsModule, ActionSheetModule, ButtonModule, TextBoxModule], exports: [ListComponent,
14707
16215
  ListItemDirective,
14708
16216
  SelectableDirective,
14709
16217
  SearchBarComponent,
14710
16218
  TemplateContextDirective,
14711
16219
  TagListComponent,
14712
16220
  CheckDirective,
14713
- CheckAllDirective, CommonModule, FormsModule, ReactiveFormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule, IconsModule] });
14714
- 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] });
16221
+ CheckAllDirective,
16222
+ ResponsiveRendererComponent, CommonModule, FormsModule, ReactiveFormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule, IconsModule, ActionSheetModule, ButtonModule, TextBoxModule] });
16223
+ 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] });
14715
16224
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SharedModule, decorators: [{
14716
16225
  type: NgModule,
14717
16226
  args: [{
14718
16227
  declarations: [INTERNAL_DIRECTIVES],
14719
- exports: [INTERNAL_DIRECTIVES, CommonModule, FormsModule, ReactiveFormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule, IconsModule],
14720
- imports: [CommonModule, FormsModule, ReactiveFormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule, IconsModule]
16228
+ exports: [INTERNAL_DIRECTIVES, CommonModule, FormsModule, ReactiveFormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule, IconsModule, ActionSheetModule, ButtonModule, TextBoxModule],
16229
+ imports: [CommonModule, FormsModule, ReactiveFormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule, IconsModule, ActionSheetModule, ButtonModule, TextBoxModule]
14721
16230
  }]
14722
16231
  }] });
14723
16232
 
@@ -15064,5 +16573,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
15064
16573
  * Generated bundle index. Do not edit.
15065
16574
  */
15066
16575
 
15067
- 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 };
16576
+ 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 };
15068
16577