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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/autocomplete/autocomplete.component.d.ts +82 -20
  2. package/comboboxes/combobox.component.d.ts +76 -8
  3. package/comboboxes/multicolumncombobox.component.d.ts +4 -0
  4. package/common/action-sheet.component.d.ts +43 -0
  5. package/common/list.component.d.ts +2 -1
  6. package/common/localization/messages.d.ts +9 -1
  7. package/common/selection/selectable.directive.d.ts +2 -1
  8. package/common/shared.module.d.ts +11 -7
  9. package/common/util.d.ts +39 -2
  10. package/dropdownlist/dropdownlist.component.d.ts +78 -9
  11. package/dropdowntrees/dropdowntree.component.d.ts +80 -8
  12. package/dropdowntrees/multiselecttree.component.d.ts +90 -6
  13. package/esm2020/autocomplete/autocomplete.component.mjs +294 -116
  14. package/esm2020/comboboxes/combobox.component.mjs +251 -60
  15. package/esm2020/comboboxes/multicolumncombobox.component.mjs +110 -119
  16. package/esm2020/common/action-sheet.component.mjs +243 -0
  17. package/esm2020/common/list.component.mjs +11 -2
  18. package/esm2020/common/localization/messages.mjs +5 -1
  19. package/esm2020/common/selection/selectable.directive.mjs +3 -3
  20. package/esm2020/common/shared.module.mjs +13 -6
  21. package/esm2020/common/util.mjs +68 -2
  22. package/esm2020/dropdownlist/dropdownlist.component.mjs +245 -64
  23. package/esm2020/dropdowntrees/dropdowntree.component.mjs +254 -56
  24. package/esm2020/dropdowntrees/multiselecttree.component.mjs +291 -55
  25. package/esm2020/index.mjs +1 -0
  26. package/esm2020/multiselect/multiselect.component.mjs +320 -88
  27. package/esm2020/package-metadata.mjs +2 -2
  28. package/fesm2015/progress-kendo-angular-dropdowns.mjs +2085 -552
  29. package/fesm2020/progress-kendo-angular-dropdowns.mjs +2054 -545
  30. package/index.d.ts +2 -0
  31. package/multiselect/multiselect.component.d.ts +87 -10
  32. package/package.json +9 -8
  33. package/schematics/ngAdd/index.js +2 -2
@@ -2,7 +2,7 @@
2
2
  * Copyright © 2023 Progress Software Corporation. All rights reserved.
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
- import { guid, isPresent, isArray, isObjectArray, resolveAllValues, selectedIndices, getter, isNumber, isUntouched, inDropDown, getSizeClass, getRoundedClass, getFillModeClass } from '../common/util';
5
+ import { guid, isPresent, isArray, isObjectArray, resolveAllValues, selectedIndices, getter, isNumber, isUntouched, inDropDown, getSizeClass, getRoundedClass, getFillModeClass, animationDuration, isTruthy, windowSize, setListBoxAriaLabelLebBy, setActionSheetTitle, updateActionSheetAdaptiveAppearance } from '../common/util';
6
6
  import { SearchBarComponent } from '../common/searchbar.component';
7
7
  import { ViewChild, Renderer2, ViewContainerRef, Component, HostBinding, Input, ElementRef, TemplateRef, Output, EventEmitter, isDevMode, forwardRef, ContentChild, ChangeDetectorRef, KeyValueDiffers, NgZone, Optional, Inject } from '@angular/core';
8
8
  import { Subscription, Subject, of, merge } from 'rxjs';
@@ -37,6 +37,7 @@ import { ListComponent } from '../common/list.component';
37
37
  import { normalizeCheckboxesSettings } from '../common/models/checkboxes-settings';
38
38
  import { normalizeVirtualizationSettings } from '../common/models/virtualization-settings';
39
39
  import { plusIcon, xIcon } from '@progress/kendo-svg-icons';
40
+ import { ResponsiveRendererComponent } from '../common/action-sheet.component';
40
41
  import * as i0 from "@angular/core";
41
42
  import * as i1 from "@progress/kendo-angular-l10n";
42
43
  import * as i2 from "@progress/kendo-angular-popup";
@@ -47,12 +48,13 @@ import * as i6 from "../common/disabled-items/disabled-items.service";
47
48
  import * as i7 from "../common/taglist.component";
48
49
  import * as i8 from "../common/searchbar.component";
49
50
  import * as i9 from "@progress/kendo-angular-icons";
50
- import * as i10 from "../common/list.component";
51
- import * as i11 from "@progress/kendo-angular-common";
52
- import * as i12 from "../common/localization/localized-messages.directive";
53
- import * as i13 from "@angular/common";
54
- import * as i14 from "../common/templates/template-context.directive";
55
- import * as i15 from "../common/selection/selectable.directive";
51
+ import * as i10 from "@progress/kendo-angular-common";
52
+ import * as i11 from "../common/action-sheet.component";
53
+ import * as i12 from "../common/list.component";
54
+ import * as i13 from "../common/localization/localized-messages.directive";
55
+ import * as i14 from "@angular/common";
56
+ import * as i15 from "../common/templates/template-context.directive";
57
+ import * as i16 from "../common/selection/selectable.directive";
56
58
  const MULTISELECT_VALUE_ACCESSOR = {
57
59
  multi: true,
58
60
  provide: NG_VALUE_ACCESSOR,
@@ -92,6 +94,10 @@ export class MultiSelectComponent {
92
94
  this.renderer = renderer;
93
95
  this._zone = _zone;
94
96
  this.touchEnabled = touchEnabled;
97
+ /**
98
+ * @hidden
99
+ */
100
+ this.animationDuration = animationDuration;
95
101
  /**
96
102
  * @hidden
97
103
  */
@@ -119,6 +125,15 @@ export class MultiSelectComponent {
119
125
  * Specifies the [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.
120
126
  */
121
127
  this.tabindex = 0;
128
+ /**
129
+ * Enables or disables the adaptive mode. By default the adaptive rendering is disabled.
130
+ */
131
+ this.adaptiveMode = 'none';
132
+ /**
133
+ * Sets the title of the ActionSheet that is rendered instead of the Popup when using small screen devices.
134
+ * By default the ActionSheet title uses the text provided for the label of the AutoComplete.
135
+ */
136
+ this.title = '';
122
137
  /**
123
138
  * Sets the disabled state of the component.
124
139
  */
@@ -131,13 +146,7 @@ export class MultiSelectComponent {
131
146
  * Enables the [filtering]({% slug filtering_multiselect %}) functionality of the MultiSelect.
132
147
  */
133
148
  this.filterable = false;
134
- /**
135
- * Sets the height of the suggestions list. By default, `listHeight` is 200px.
136
- *
137
- * > The `listHeight` property affects only the list of suggestions and not the whole popup container.
138
- * > To set the height of the popup container, use `popupSettings.height`.
139
- */
140
- this.listHeight = 200;
149
+ this._listHeight = 200;
141
150
  /**
142
151
  * If set to `true`, renders a button on hovering over the component.
143
152
  * Clicking this button resets the value of the component to an empty array and triggers the `change` event.
@@ -260,6 +269,10 @@ export class MultiSelectComponent {
260
269
  */
261
270
  this.removeTag = new EventEmitter();
262
271
  this.hostClasses = true;
272
+ /**
273
+ * @hidden
274
+ */
275
+ this.windowSize = 'large';
263
276
  this.initialized = false;
264
277
  this._size = 'medium';
265
278
  this._rounded = 'medium';
@@ -274,7 +287,7 @@ export class MultiSelectComponent {
274
287
  this._isFocused = false;
275
288
  this.selectedDataItems = [];
276
289
  this.customValueSubject = new Subject();
277
- this.observableSubscriptions = new Subscription();
290
+ this.subs = new Subscription();
278
291
  validatePackage(packageMetadata);
279
292
  this.popupMouseDownHandler = this.onMouseDown.bind(this);
280
293
  this.data = [];
@@ -282,6 +295,18 @@ export class MultiSelectComponent {
282
295
  this.subscribeEvents();
283
296
  this.subscribeTouchEvents();
284
297
  }
298
+ /**
299
+ * @hidden
300
+ */
301
+ get actionSheet() {
302
+ return this.responsiveRendererComponent?.actionSheet;
303
+ }
304
+ /**
305
+ * @hidden
306
+ */
307
+ get actionSheetSearchBar() {
308
+ return this.responsiveRendererComponent?.actionSheetSearchBar;
309
+ }
285
310
  /**
286
311
  * @hidden
287
312
  */
@@ -324,6 +349,16 @@ export class MultiSelectComponent {
324
349
  }
325
350
  }
326
351
  }
352
+ /**
353
+ * @hidden
354
+ */
355
+ onAdaptiveTextBoxChange(text) {
356
+ if (this.filterable) {
357
+ this.filterChange.emit(text);
358
+ return;
359
+ }
360
+ this.searchTextAndFocus(text);
361
+ }
327
362
  /**
328
363
  * Blurs the MultiSelect.
329
364
  */
@@ -336,28 +371,30 @@ export class MultiSelectComponent {
336
371
  * @hidden
337
372
  */
338
373
  onSearchBarBlur() {
339
- if (!this.isFocused) {
340
- return;
341
- }
342
- this.isFocused = false;
343
- if (hasObservers(this.onBlur) ||
344
- hasObservers(this.filterChange) ||
345
- hasObservers(this.close) ||
346
- isUntouched(this.wrapper.nativeElement)) {
347
- this._zone.run(() => {
348
- this.closePopup();
349
- if (!(this.isOpen && this.allowCustom)) {
374
+ if (!this.isActionSheetExpanded) {
375
+ if (!this.isFocused) {
376
+ return;
377
+ }
378
+ this.isFocused = false;
379
+ if (hasObservers(this.onBlur) ||
380
+ hasObservers(this.filterChange) ||
381
+ hasObservers(this.close) ||
382
+ isUntouched(this.wrapper.nativeElement)) {
383
+ this._zone.run(() => {
384
+ this.closePopup();
385
+ if (!(this.isOpen && this.allowCustom)) {
386
+ this.clearFilter();
387
+ }
388
+ this.onBlur.emit();
389
+ this.onTouchedCallback();
390
+ });
391
+ }
392
+ else {
393
+ if (!this.allowCustom) {
350
394
  this.clearFilter();
351
395
  }
352
- this.onBlur.emit();
353
- this.onTouchedCallback();
354
- });
355
- }
356
- else {
357
- if (!this.allowCustom) {
358
- this.clearFilter();
396
+ this.closePopup();
359
397
  }
360
- this.closePopup();
361
398
  }
362
399
  }
363
400
  /**
@@ -370,7 +407,14 @@ export class MultiSelectComponent {
370
407
  * @hidden
371
408
  */
372
409
  onResize() {
373
- if (this._open) {
410
+ if (this.isAdaptiveModeEnabled && this.windowSize !== windowSize()) {
411
+ if (this.isOpen) {
412
+ this.togglePopup(false);
413
+ }
414
+ this.windowSize = windowSize();
415
+ this.cdr.detectChanges();
416
+ }
417
+ if (this.isOpen && !this.isActionSheetExpanded) {
374
418
  const popupWrapper = this.popupRef.popupElement;
375
419
  const { min, max } = this.width;
376
420
  popupWrapper.style.minWidth = min;
@@ -511,6 +555,22 @@ export class MultiSelectComponent {
511
555
  get placeholder() {
512
556
  return this.selectedDataItems.length ? '' : this._placeholder;
513
557
  }
558
+ /**
559
+ * Sets the subtitle of the ActionSheet that is rendered instead of the Popup when using small screen devices.
560
+ * By default the ActionSheet subtitle uses the text provided for the `placeholder` of the AutoComplete.
561
+ */
562
+ set subtitle(_subtitle) {
563
+ this._subtitle = _subtitle;
564
+ }
565
+ get subtitle() {
566
+ return this._subtitle || this.placeholder;
567
+ }
568
+ /**
569
+ * @hidden
570
+ */
571
+ get isAdaptiveModeEnabled() {
572
+ return this.adaptiveMode === 'auto';
573
+ }
514
574
  /**
515
575
  * Defines a Boolean function that is executed for each data item in the component
516
576
  * ([see examples]({% slug disableditems_multiselect %})). Determines whether the item will be disabled.
@@ -555,6 +615,24 @@ export class MultiSelectComponent {
555
615
  get popupSettings() {
556
616
  return this._popupSettings;
557
617
  }
618
+ /**
619
+ * Sets the height of the options list in the popup. By default, `listHeight` is 200px.
620
+ *
621
+ * > The `listHeight` property affects only the list of options and not the whole popup container.
622
+ * > To set the height of the popup container, use `popupSettings.height`.
623
+ *
624
+ * > When using `adaptiveMode` and the screen size is `small` or `medium` the `listHeight` property is set to null.
625
+ */
626
+ set listHeight(_listHeight) {
627
+ this._listHeight = _listHeight;
628
+ }
629
+ ;
630
+ get listHeight() {
631
+ if (this.isAdaptive) {
632
+ return;
633
+ }
634
+ return this._listHeight;
635
+ }
558
636
  /**
559
637
  * Specifies the type of the selected value.
560
638
  * If set to `true`, the selected value has to be of the primitive type
@@ -578,6 +656,19 @@ export class MultiSelectComponent {
578
656
  get isLoading() {
579
657
  return this.loading;
580
658
  }
659
+ /**
660
+ * @hidden
661
+ */
662
+ get isActionSheetExpanded() {
663
+ return this.actionSheet?.expanded;
664
+ }
665
+ ;
666
+ /**
667
+ * @hidden
668
+ */
669
+ get isAdaptive() {
670
+ return this.isAdaptiveModeEnabled && this.windowSize !== 'large';
671
+ }
581
672
  get listContainerClasses() {
582
673
  const containerClasses = ['k-list-container', 'k-reset'];
583
674
  if (this.popupSettings.popupClass) {
@@ -628,6 +719,21 @@ export class MultiSelectComponent {
628
719
  return 'visible';
629
720
  }
630
721
  }
722
+ /**
723
+ * @hidden
724
+ */
725
+ applyValue() {
726
+ this.value = this._valueHolder;
727
+ this.emitValueChange();
728
+ this.togglePopup(false);
729
+ }
730
+ /**
731
+ * @hidden
732
+ */
733
+ cancelValue() {
734
+ this._valueHolder = [];
735
+ this.togglePopup(false);
736
+ }
631
737
  /**
632
738
  * @hidden
633
739
  */
@@ -659,8 +765,12 @@ export class MultiSelectComponent {
659
765
  event.added.forEach((itemIndex) => {
660
766
  const dataItem = this.dataService.itemAt(itemIndex);
661
767
  const newItem = (this.valuePrimitive && isPresent(dataItem) && isPresent(dataItem[this.valueField])) ? dataItem[this.valueField] : dataItem;
768
+ this._valueHolder = this.value.filter(filter);
662
769
  if (newItem) {
663
- this.value = [...this.value, newItem];
770
+ this._valueHolder = [...this.value, newItem];
771
+ if (!this.isAdaptive) {
772
+ this.value = this._valueHolder;
773
+ }
664
774
  }
665
775
  });
666
776
  }
@@ -668,7 +778,10 @@ export class MultiSelectComponent {
668
778
  event.removed.forEach((itemIndex) => {
669
779
  const dataItem = this.dataService.itemAt(itemIndex);
670
780
  const filter = (item) => getter(item, this.valueField) !== getter(dataItem, this.valueField);
671
- this.value = this.value.filter(filter);
781
+ this._valueHolder = this.value.filter(filter);
782
+ if (!this.isAdaptive) {
783
+ this.value = this._valueHolder;
784
+ }
672
785
  });
673
786
  this.cdr.detectChanges();
674
787
  }
@@ -683,17 +796,25 @@ export class MultiSelectComponent {
683
796
  if (isPresent(event.added)) {
684
797
  const dataItem = this.dataService.itemAt(event.added);
685
798
  const newItem = (this.valuePrimitive && isPresent(dataItem) && isPresent(dataItem[this.valueField])) ? dataItem[this.valueField] : dataItem;
686
- this.value = [...this.value, newItem];
799
+ this._valueHolder = [...this.value, newItem];
800
+ if (!this.isAdaptive) {
801
+ this.value = this._valueHolder;
802
+ }
687
803
  }
688
804
  if (isPresent(event.removed)) {
689
805
  const dataItem = this.dataService.itemAt(event.removed);
690
806
  const filter = (item) => getter(item, this.valueField) !== getter(dataItem, this.valueField);
691
- this.value = this.value.filter(filter);
807
+ this._valueHolder = this.value.filter(filter);
808
+ if (!this.isAdaptive) {
809
+ this.value = this._valueHolder;
810
+ }
692
811
  this.selectionService.focused = event.removed;
693
812
  this.cdr.detectChanges();
694
813
  }
695
814
  }
696
- this.emitValueChange();
815
+ if (!this.isAdaptive) {
816
+ this.emitValueChange();
817
+ }
697
818
  }
698
819
  /**
699
820
  * @hidden
@@ -778,6 +899,9 @@ export class MultiSelectComponent {
778
899
  const navigateInput = this.text && event.keyCode !== Keys.ArrowDown && event.keyCode !== Keys.ArrowUp;
779
900
  const selectValue = this.text && event.keyCode === Keys.Enter || event.keyCode === Keys.Escape;
780
901
  const deleteTag = !this.text && event.keyCode === Keys.Backspace && this.tags.length > 0;
902
+ if (event.keyCode === Keys.Backspace && this.isActionSheetExpanded) {
903
+ return;
904
+ }
781
905
  if (deleteTag) {
782
906
  this.handleBackspace();
783
907
  return;
@@ -795,7 +919,8 @@ export class MultiSelectComponent {
795
919
  originalEvent: eventData
796
920
  });
797
921
  if (action !== NavigationAction.Undefined &&
798
- ((action === NavigationAction.Enter && this.isOpen) || action !== NavigationAction.Enter)) {
922
+ ((action === NavigationAction.Enter && this.isOpen) || action !== NavigationAction.Enter) &&
923
+ (!this.isActionSheetExpanded && action === NavigationAction.Tab)) {
799
924
  event.preventDefault();
800
925
  }
801
926
  }
@@ -852,11 +977,11 @@ export class MultiSelectComponent {
852
977
  ngOnInit() {
853
978
  this.renderer.removeAttribute(this.wrapper.nativeElement, "tabindex");
854
979
  this.createCustomValueStream();
855
- this.localizationChangeSubscription = this.localization
980
+ this.subs.add(this.localization
856
981
  .changes.subscribe(({ rtl }) => {
857
982
  this.direction = rtl ? 'rtl' : 'ltr';
858
983
  this.cdr.markForCheck();
859
- });
984
+ }));
860
985
  this.setState(this.value);
861
986
  this.setComponentClasses();
862
987
  this.initialized = true;
@@ -875,18 +1000,21 @@ export class MultiSelectComponent {
875
1000
  }
876
1001
  }
877
1002
  ngAfterViewInit() {
1003
+ this.windowSize = windowSize();
1004
+ this.cdr.detectChanges();
878
1005
  this.searchbar.setInputSize();
879
- this.observableSubscriptions.add(this.renderer.listen(this.wrapper.nativeElement, 'mousedown', this.handleMousedown.bind(this)));
880
- this.observableSubscriptions.add(this.renderer.listen(this.wrapper.nativeElement, 'keydown', this.handleKeydown.bind(this)));
1006
+ this.subs.add(this.renderer.listen(this.wrapper.nativeElement, 'mousedown', this.handleMousedown.bind(this)));
1007
+ this.subs.add(this.renderer.listen(this.wrapper.nativeElement, 'keydown', this.handleKeydown.bind(this)));
1008
+ this.renderer.setAttribute(this.actionSheet?.element.nativeElement, 'style', '--kendo-actionsheet-height: 60vh; --kendo-actionsheet-max-height: none');
881
1009
  }
882
1010
  ngOnDestroy() {
883
1011
  this._toggle(false);
884
1012
  this.unsubscribeEvents();
885
1013
  }
886
1014
  /**
887
- * Toggles the visibility of the popup
1015
+ * Toggles the visibility of the popup or actionSheet
888
1016
  * ([see example]({% slug openstate_multiselect %}#toc-setting-the-initially-opened-component)).
889
- * If you use the `toggle` method to open or close the popup, the respective `open` and `close` events will not be fired.
1017
+ * If you use the `toggle` method to open or close the popup or actionSheet, the respective `open` and `close` events will not be fired.
890
1018
  *
891
1019
  * @param open - The state of the popup.
892
1020
  */
@@ -900,10 +1028,10 @@ export class MultiSelectComponent {
900
1028
  });
901
1029
  }
902
1030
  /**
903
- * Returns the current open state of the popup.
1031
+ * Returns the current open state. Returns `true` if the popup or actionSheet is open.
904
1032
  */
905
1033
  get isOpen() {
906
- return this._open;
1034
+ return isTruthy(this._open || this.isActionSheetExpanded);
907
1035
  }
908
1036
  /**
909
1037
  * Resets the value of the MultiSelect.
@@ -952,6 +1080,15 @@ export class MultiSelectComponent {
952
1080
  this.tags = this.tagMapper(this.selectedDataItems.slice(0));
953
1081
  this.cdr.markForCheck();
954
1082
  }
1083
+ /**
1084
+ * @hidden
1085
+ */
1086
+ handleClick() {
1087
+ this.windowSize = windowSize();
1088
+ if (this.isAdaptive) {
1089
+ this.togglePopup(true);
1090
+ }
1091
+ }
955
1092
  set isFocused(isFocused) {
956
1093
  this.renderer[isFocused ? 'addClass' : 'removeClass'](this.wrapper.nativeElement, 'k-focus');
957
1094
  this._isFocused = isFocused;
@@ -990,7 +1127,7 @@ export class MultiSelectComponent {
990
1127
  this.optionsList.scrollWithOnePage(NavigationAction[event.originalEvent.code]);
991
1128
  }
992
1129
  })
993
- ].forEach(s => this.observableSubscriptions.add(s));
1130
+ ].forEach(s => this.subs.add(s));
994
1131
  }
995
1132
  subscribeTouchEvents() {
996
1133
  if (!isDocumentAvailable() || !this.touchEnabled) {
@@ -1014,13 +1151,10 @@ export class MultiSelectComponent {
1014
1151
  if (!isDocumentAvailable()) {
1015
1152
  return;
1016
1153
  }
1017
- this.observableSubscriptions.unsubscribe();
1154
+ this.subs.unsubscribe();
1018
1155
  if (this.customValueSubscription) {
1019
1156
  this.customValueSubscription.unsubscribe();
1020
1157
  }
1021
- if (this.localizationChangeSubscription) {
1022
- this.localizationChangeSubscription.unsubscribe();
1023
- }
1024
1158
  if (this.touchstartDisposeHandler) {
1025
1159
  this.touchstartDisposeHandler();
1026
1160
  }
@@ -1135,7 +1269,7 @@ export class MultiSelectComponent {
1135
1269
  }
1136
1270
  handleItemChange(event) {
1137
1271
  this.change(event);
1138
- if (this.autoClose && !event.preventClosingPopup) {
1272
+ if (this.autoClose && !event.preventClosingPopup && !this.isActionSheetExpanded) {
1139
1273
  this.togglePopup(false);
1140
1274
  }
1141
1275
  if (this.autoClose || !this.filterable) {
@@ -1143,21 +1277,23 @@ export class MultiSelectComponent {
1143
1277
  }
1144
1278
  }
1145
1279
  handleMousedown(event) {
1146
- const inputElement = this.searchbar.input.nativeElement;
1147
- if (event.button === 0) {
1148
- if (this.isFocused && this.isOpen && event.target === inputElement) {
1149
- return;
1150
- }
1151
- if (!this.touchEnabled || (this.touchEnabled && event.target.tagName !== 'SPAN')) {
1152
- this.searchbar.focus();
1153
- }
1154
- // The check is needed otherwise when appended to the component, the popup reopens on click
1155
- // https://github.com/telerik/kendo-angular/issues/3738
1156
- if ((this.popupRef && this.popupRef.popupElement.contains(event.target))) {
1157
- return;
1280
+ if (!this.isActionSheetExpanded) {
1281
+ const inputElement = this.searchbar.input.nativeElement;
1282
+ if (event.button === 0) {
1283
+ if (this.isFocused && this.isOpen && event.target === inputElement) {
1284
+ return;
1285
+ }
1286
+ if (!this.touchEnabled || (this.touchEnabled && event.target.tagName !== 'SPAN')) {
1287
+ this.searchbar.focus();
1288
+ }
1289
+ // The check is needed otherwise when appended to the component, the popup reopens on click
1290
+ // https://github.com/telerik/kendo-angular/issues/3738
1291
+ if ((this.popupRef && this.popupRef.popupElement.contains(event.target))) {
1292
+ return;
1293
+ }
1294
+ event.preventDefault();
1295
+ this.togglePopup(!this.isOpen);
1158
1296
  }
1159
- event.preventDefault();
1160
- this.togglePopup(!this.isOpen);
1161
1297
  }
1162
1298
  }
1163
1299
  handleKeydown(event) {
@@ -1186,7 +1322,7 @@ export class MultiSelectComponent {
1186
1322
  else {
1187
1323
  service.add(focusedIndex);
1188
1324
  }
1189
- if (this.autoClose) {
1325
+ if (this.autoClose && !this.isActionSheetExpanded) {
1190
1326
  this.togglePopup(false);
1191
1327
  }
1192
1328
  if (this.autoClose || !this.filterable) {
@@ -1357,6 +1493,9 @@ export class MultiSelectComponent {
1357
1493
  this.togglePopup(true);
1358
1494
  this.focusedTagIndex = undefined;
1359
1495
  }
1496
+ /**
1497
+ * @hidden
1498
+ */
1360
1499
  togglePopup(open) {
1361
1500
  const isDisabled = this.disabled || this.readonly;
1362
1501
  const sameState = this.isOpen === open;
@@ -1381,6 +1520,10 @@ export class MultiSelectComponent {
1381
1520
  _toggle(open) {
1382
1521
  this._open = open;
1383
1522
  this.destroyPopup();
1523
+ if (this.isActionSheetExpanded) {
1524
+ this.closeActionSheet();
1525
+ this.focus();
1526
+ }
1384
1527
  if (this._open) {
1385
1528
  this.createPopup();
1386
1529
  }
@@ -1397,6 +1540,11 @@ export class MultiSelectComponent {
1397
1540
  if (this.virtual) {
1398
1541
  this.virtual.skip = 0;
1399
1542
  }
1543
+ this.windowSize = windowSize();
1544
+ if (this.isAdaptive) {
1545
+ this.openActionSheet();
1546
+ return;
1547
+ }
1400
1548
  const horizontalAlign = this.direction === "rtl" ? "right" : "left";
1401
1549
  const anchorPosition = { horizontal: horizontalAlign, vertical: "bottom" };
1402
1550
  const popupPosition = { horizontal: horizontalAlign, vertical: "top" };
@@ -1428,7 +1576,9 @@ export class MultiSelectComponent {
1428
1576
  }
1429
1577
  this.popupRef.popupOpen.subscribe(() => {
1430
1578
  this.cdr.detectChanges();
1579
+ setListBoxAriaLabelLebBy(this.optionsList, this.searchbar.input, this.renderer);
1431
1580
  this.optionsList.scrollToItem(this.selectionService.focused);
1581
+ this.selectionService.focus(this.selectionService.focused);
1432
1582
  this.opened.emit();
1433
1583
  });
1434
1584
  this.popupRef.popupClose.subscribe(() => {
@@ -1482,9 +1632,28 @@ export class MultiSelectComponent {
1482
1632
  this.renderer.addClass(this.wrapper.nativeElement, getFillModeClass('input', this.fillMode));
1483
1633
  }
1484
1634
  }
1635
+ closeActionSheet() {
1636
+ this.actionSheet.toggle(false);
1637
+ this.actionSheetSearchBar.value = '';
1638
+ this.filterable && this.filterChange.emit('');
1639
+ this.closed.emit();
1640
+ }
1641
+ openActionSheet() {
1642
+ this.windowSize = windowSize();
1643
+ this.actionSheet.toggle(true);
1644
+ this.cdr.detectChanges();
1645
+ setListBoxAriaLabelLebBy(this.optionsList, this.searchbar.input, this.renderer);
1646
+ this.title = setActionSheetTitle(this.searchbar.input, this.title);
1647
+ updateActionSheetAdaptiveAppearance(this.actionSheet, this.windowSize, this.renderer);
1648
+ this.cdr.detectChanges();
1649
+ this.opened.emit();
1650
+ this.optionsList.scrollToItem(this.selectionService.focused);
1651
+ this.selectionService.focus(this.selectionService.focused);
1652
+ this.actionSheetSearchBar.focus();
1653
+ }
1485
1654
  }
1486
1655
  MultiSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MultiSelectComponent, deps: [{ token: i0.ElementRef }, { token: i1.LocalizationService }, { token: i2.PopupService }, { token: i3.DataService }, { token: i4.SelectionService }, { token: i5.NavigationService }, { token: i6.DisabledItemsService }, { token: i0.ChangeDetectorRef }, { token: i0.KeyValueDiffers }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: TOUCH_ENABLED, optional: true }], target: i0.ɵɵFactoryTarget.Component });
1487
- 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: [
1656
+ 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: [
1488
1657
  MULTISELECT_VALUE_ACCESSOR,
1489
1658
  DataService,
1490
1659
  SelectionService,
@@ -1501,7 +1670,7 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
1501
1670
  {
1502
1671
  provide: KendoInput, useExisting: forwardRef(() => MultiSelectComponent)
1503
1672
  }
1504
- ], 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: `
1673
+ ], 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: `
1505
1674
  <ng-container kendoMultiSelectLocalizedMessages
1506
1675
  i18n-noDataText="kendo.multiselect.noDataText|The text displayed in the popup when there are no items"
1507
1676
  noDataText="NO DATA FOUND"
@@ -1511,6 +1680,12 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
1511
1680
 
1512
1681
  i18n-popupLabel="kendo.multiselect.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
1513
1682
  popupLabel="Options list"
1683
+
1684
+ i18n-applyButton="kendo.multiselect.applyButton|The text of the Apply button in the action sheet"
1685
+ applyButton="Apply"
1686
+
1687
+ i18n-cancelButton="kendo.multiselect.cancelButton|The text of the Cancel button in the action sheet"
1688
+ cancelButton="Cancel"
1514
1689
  >
1515
1690
  </ng-container>
1516
1691
  <kendo-taglist
@@ -1541,13 +1716,14 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
1541
1716
  [activeDescendant]="activeDescendant"
1542
1717
  [userInput]="text"
1543
1718
  [disabled]="disabled"
1544
- [readonly]="readonly"
1719
+ [readonly]="readonly || this.isAdaptive"
1545
1720
  [tabIndex]="tabIndex"
1546
1721
  [placeholder]="placeholder"
1547
1722
  (onNavigate)="handleNavigate($event)"
1548
1723
  (valueChange)="handleFilter($event)"
1549
1724
  (onBlur)="onSearchBarBlur()"
1550
1725
  (onFocus)="onSearchBarFocus()"
1726
+ (click)="handleClick()"
1551
1727
  >
1552
1728
  </kendo-searchbar>
1553
1729
  </kendo-taglist>
@@ -1574,6 +1750,29 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
1574
1750
  >
1575
1751
  </span>
1576
1752
  <ng-template #popupTemplate>
1753
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
1754
+ </ng-template>
1755
+ <kendo-resize-sensor *ngIf="isOpen || isAdaptiveModeEnabled" (resize)="onResize()"></kendo-resize-sensor>
1756
+ <ng-container #container></ng-container>
1757
+
1758
+ <!--adaptive rendering-->
1759
+ <responsive-renderer
1760
+ [sharedPopupActionSheetTemplate]="sharedPopupActionSheetTemplate"
1761
+ [isActionSheetExpanded]="isActionSheetExpanded"
1762
+ [title]="title"
1763
+ [showTextInput]="true"
1764
+ [showActionButtons]="true"
1765
+ [subtitle]="subtitle"
1766
+ (closePopup)="togglePopup(false)"
1767
+ (textInputChange)="onAdaptiveTextBoxChange($event)"
1768
+ [placeholder]="placeholder"
1769
+ (navigate)="handleNavigate($event)"
1770
+ (onApply)="applyValue()"
1771
+ (onCancel)="cancelValue()"
1772
+ >
1773
+ </responsive-renderer>
1774
+
1775
+ <ng-template #sharedPopupActionSheetTemplate>
1577
1776
  <!--header template-->
1578
1777
  <ng-template *ngIf="headerTemplate"
1579
1778
  [templateContext]="{
@@ -1612,17 +1811,18 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
1612
1811
  [data]="data"
1613
1812
  [textField]="textField"
1614
1813
  [valueField]="valueField"
1615
- [height]="listHeight"
1616
1814
  [template]="template"
1617
1815
  [groupTemplate]="groupTemplate"
1618
1816
  [fixedGroupTemplate]="fixedGroupTemplate"
1817
+ [height]="listHeight"
1619
1818
  [show]="isOpen"
1620
1819
  [multipleSelection]="true"
1621
1820
  [virtual]="virtual"
1622
1821
  (pageChange)="pageChange($event)"
1623
1822
  [checkboxes]="checkboxes"
1624
1823
  [isMultiselect]="true"
1625
- >
1824
+ [isActionSheetExpanded]="isActionSheetExpanded"
1825
+ >
1626
1826
  </kendo-list>
1627
1827
  <!--no data template-->
1628
1828
  <div class="k-no-data" *ngIf="data.length === 0">
@@ -1642,11 +1842,7 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
1642
1842
  }">
1643
1843
  </ng-template>
1644
1844
  </ng-template>
1645
- <ng-template [ngIf]="isOpen">
1646
- <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
1647
- </ng-template>
1648
- <ng-container #container></ng-container>
1649
- `, isInline: true, components: [{ type: i7.TagListComponent, selector: "kendo-taglist", inputs: ["tags", "textField", "valueField", "valueDepth", "focused", "template", "groupTemplate", "disabled", "tagPrefix", "id", "size", "rounded", "fillMode", "disabledIndices"], outputs: ["removeTag"] }, { type: i8.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: i9.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: i10.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: i11.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }], directives: [{ type: i12.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: i14.TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: i13.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i15.SelectableDirective, selector: "[kendoDropDownsSelectable]", inputs: ["index", "checkboxes", "height", "multipleSelection"] }] });
1845
+ `, isInline: true, components: [{ type: i7.TagListComponent, selector: "kendo-taglist", inputs: ["tags", "textField", "valueField", "valueDepth", "focused", "template", "groupTemplate", "disabled", "tagPrefix", "id", "size", "rounded", "fillMode", "disabledIndices"], outputs: ["removeTag"] }, { type: i8.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: i9.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: i10.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { type: i11.ResponsiveRendererComponent, selector: "responsive-renderer", inputs: ["title", "showActionButtons", "subtitle", "size", "showTextInput", "sharedPopupActionSheetTemplate", "isActionSheetExpanded", "text", "placeholder"], outputs: ["closePopup", "textInputChange", "navigate", "onExpand", "onCollapse", "onApply", "onCancel"] }, { type: i12.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: i13.LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { type: i14.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i14.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i15.TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: i14.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i16.SelectableDirective, selector: "[kendoDropDownsSelectable]", inputs: ["index", "checkboxes", "height", "isMultiselect", "multipleSelection"] }] });
1650
1846
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MultiSelectComponent, decorators: [{
1651
1847
  type: Component,
1652
1848
  args: [{
@@ -1680,6 +1876,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
1680
1876
 
1681
1877
  i18n-popupLabel="kendo.multiselect.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
1682
1878
  popupLabel="Options list"
1879
+
1880
+ i18n-applyButton="kendo.multiselect.applyButton|The text of the Apply button in the action sheet"
1881
+ applyButton="Apply"
1882
+
1883
+ i18n-cancelButton="kendo.multiselect.cancelButton|The text of the Cancel button in the action sheet"
1884
+ cancelButton="Cancel"
1683
1885
  >
1684
1886
  </ng-container>
1685
1887
  <kendo-taglist
@@ -1710,13 +1912,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
1710
1912
  [activeDescendant]="activeDescendant"
1711
1913
  [userInput]="text"
1712
1914
  [disabled]="disabled"
1713
- [readonly]="readonly"
1915
+ [readonly]="readonly || this.isAdaptive"
1714
1916
  [tabIndex]="tabIndex"
1715
1917
  [placeholder]="placeholder"
1716
1918
  (onNavigate)="handleNavigate($event)"
1717
1919
  (valueChange)="handleFilter($event)"
1718
1920
  (onBlur)="onSearchBarBlur()"
1719
1921
  (onFocus)="onSearchBarFocus()"
1922
+ (click)="handleClick()"
1720
1923
  >
1721
1924
  </kendo-searchbar>
1722
1925
  </kendo-taglist>
@@ -1743,6 +1946,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
1743
1946
  >
1744
1947
  </span>
1745
1948
  <ng-template #popupTemplate>
1949
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
1950
+ </ng-template>
1951
+ <kendo-resize-sensor *ngIf="isOpen || isAdaptiveModeEnabled" (resize)="onResize()"></kendo-resize-sensor>
1952
+ <ng-container #container></ng-container>
1953
+
1954
+ <!--adaptive rendering-->
1955
+ <responsive-renderer
1956
+ [sharedPopupActionSheetTemplate]="sharedPopupActionSheetTemplate"
1957
+ [isActionSheetExpanded]="isActionSheetExpanded"
1958
+ [title]="title"
1959
+ [showTextInput]="true"
1960
+ [showActionButtons]="true"
1961
+ [subtitle]="subtitle"
1962
+ (closePopup)="togglePopup(false)"
1963
+ (textInputChange)="onAdaptiveTextBoxChange($event)"
1964
+ [placeholder]="placeholder"
1965
+ (navigate)="handleNavigate($event)"
1966
+ (onApply)="applyValue()"
1967
+ (onCancel)="cancelValue()"
1968
+ >
1969
+ </responsive-renderer>
1970
+
1971
+ <ng-template #sharedPopupActionSheetTemplate>
1746
1972
  <!--header template-->
1747
1973
  <ng-template *ngIf="headerTemplate"
1748
1974
  [templateContext]="{
@@ -1781,17 +2007,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
1781
2007
  [data]="data"
1782
2008
  [textField]="textField"
1783
2009
  [valueField]="valueField"
1784
- [height]="listHeight"
1785
2010
  [template]="template"
1786
2011
  [groupTemplate]="groupTemplate"
1787
2012
  [fixedGroupTemplate]="fixedGroupTemplate"
2013
+ [height]="listHeight"
1788
2014
  [show]="isOpen"
1789
2015
  [multipleSelection]="true"
1790
2016
  [virtual]="virtual"
1791
2017
  (pageChange)="pageChange($event)"
1792
2018
  [checkboxes]="checkboxes"
1793
2019
  [isMultiselect]="true"
1794
- >
2020
+ [isActionSheetExpanded]="isActionSheetExpanded"
2021
+ >
1795
2022
  </kendo-list>
1796
2023
  <!--no data template-->
1797
2024
  <div class="k-no-data" *ngIf="data.length === 0">
@@ -1811,10 +2038,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
1811
2038
  }">
1812
2039
  </ng-template>
1813
2040
  </ng-template>
1814
- <ng-template [ngIf]="isOpen">
1815
- <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
1816
- </ng-template>
1817
- <ng-container #container></ng-container>
1818
2041
  `
1819
2042
  }]
1820
2043
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.LocalizationService }, { type: i2.PopupService }, { type: i3.DataService }, { type: i4.SelectionService }, { type: i5.NavigationService }, { type: i6.DisabledItemsService }, { type: i0.ChangeDetectorRef }, { type: i0.KeyValueDiffers }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: undefined, decorators: [{
@@ -1822,7 +2045,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
1822
2045
  }, {
1823
2046
  type: Inject,
1824
2047
  args: [TOUCH_ENABLED]
1825
- }] }]; }, propDecorators: { focusableId: [{
2048
+ }] }]; }, propDecorators: { responsiveRendererComponent: [{
2049
+ type: ViewChild,
2050
+ args: [ResponsiveRendererComponent]
2051
+ }], focusableId: [{
1826
2052
  type: Input
1827
2053
  }], autoClose: [{
1828
2054
  type: Input
@@ -1849,6 +2075,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
1849
2075
  type: Input
1850
2076
  }], placeholder: [{
1851
2077
  type: Input
2078
+ }], adaptiveMode: [{
2079
+ type: Input
2080
+ }], title: [{
2081
+ type: Input
2082
+ }], subtitle: [{
2083
+ type: Input
1852
2084
  }], disabled: [{
1853
2085
  type: Input
1854
2086
  }], itemDisabled: [{