@progress/kendo-angular-dropdowns 7.0.3-dev.202207081325 → 7.1.0-dev.202208301349

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.
@@ -432,7 +432,7 @@ export declare class ComboBoxComponent implements ControlValueAccessor, OnDestro
432
432
  /**
433
433
  * @hidden
434
434
  */
435
- clearValue(event: any): void;
435
+ clearValue(event?: any): void;
436
436
  /**
437
437
  * @hidden
438
438
  */
@@ -17,6 +17,7 @@ import { MultiSelectCheckableSettings } from './models/checkboxes-settings';
17
17
  import { DropDownSize } from './models/size';
18
18
  import { DropDownRounded } from './models/rounded';
19
19
  import { ListType } from './models/list-type';
20
+ import { NavigationAction } from './navigation/navigation-action';
20
21
  import * as i0 from "@angular/core";
21
22
  /**
22
23
  * @hidden
@@ -100,6 +101,7 @@ export declare class ListComponent implements OnChanges, OnDestroy, AfterViewIni
100
101
  isDisabled(index: number): boolean;
101
102
  isAltRow(index: number): boolean;
102
103
  scrollToItem(index: number): void;
104
+ scrollWithOnePage(action: NavigationAction): void;
103
105
  scrollToIndex(index: number): void;
104
106
  scroll(item: ElementRef<HTMLElement>): void;
105
107
  /**
@@ -19,5 +19,7 @@ export declare enum NavigationAction {
19
19
  Up = 10,
20
20
  Down = 11,
21
21
  Left = 12,
22
- Right = 13
22
+ Right = 13,
23
+ PageDown = 14,
24
+ PageUp = 15
23
25
  }
@@ -37,6 +37,8 @@ export declare class NavigationService {
37
37
  backspace: EventEmitter<NavigationEvent>;
38
38
  home: EventEmitter<NavigationEvent>;
39
39
  end: EventEmitter<NavigationEvent>;
40
+ pagedown: EventEmitter<NavigationEvent>;
41
+ pageup: EventEmitter<NavigationEvent>;
40
42
  constructor(disabledItemsService: DisabledItemsService, selectionService: SelectionService);
41
43
  process(args: any): NavigationAction;
42
44
  private next;
@@ -318,6 +318,7 @@ export declare class DropDownListComponent implements ControlValueAccessor, OnDe
318
318
  optionPrefix: string;
319
319
  valueLabelId: string;
320
320
  filterText: string;
321
+ private subs;
321
322
  private _isFocused;
322
323
  set isFocused(isFocused: boolean);
323
324
  get isFocused(): boolean;
@@ -330,18 +331,10 @@ export declare class DropDownListComponent implements ControlValueAccessor, OnDe
330
331
  private word;
331
332
  private last;
332
333
  private typingTimeout;
333
- private navigationSubscription;
334
- private enterSubscription;
335
- private escSubscription;
336
- private openSubscription;
337
- private closeSubscription;
338
334
  private filterFocused;
339
335
  private filterBlurred;
340
336
  private hostElementFocused;
341
337
  private hostElementBlurred;
342
- private componentBlurredSubscription;
343
- private filterBlurredSubscription;
344
- private selectionSubscription;
345
338
  private touchstartDisposeHandler;
346
339
  private _value;
347
340
  private _open;
@@ -350,7 +343,6 @@ export declare class DropDownListComponent implements ControlValueAccessor, OnDe
350
343
  private text;
351
344
  private _popupSettings;
352
345
  private _virtualSettings;
353
- private localizationChangesSubscription;
354
346
  private _size;
355
347
  private _rounded;
356
348
  private _fillMode;
@@ -477,7 +469,6 @@ export declare class DropDownListComponent implements ControlValueAccessor, OnDe
477
469
  private subscribeTouchEvents;
478
470
  private subscribeFocusEvents;
479
471
  private unSubscribeFocusEvents;
480
- private unsubscribeEvents;
481
472
  private itemFromEvent;
482
473
  private currentOrDefault;
483
474
  private firstFocusableIndex;
@@ -620,6 +620,8 @@ export class AutoCompleteComponent {
620
620
  action !== NavigationAction.End &&
621
621
  action !== NavigationAction.Left &&
622
622
  action !== NavigationAction.Right &&
623
+ action !== NavigationAction.PageDown &&
624
+ action !== NavigationAction.PageUp &&
623
625
  ((action === NavigationAction.Enter && this.isOpen) || action !== NavigationAction.Enter)) {
624
626
  event.preventDefault();
625
627
  }
@@ -646,7 +648,12 @@ export class AutoCompleteComponent {
646
648
  this.change(value);
647
649
  }
648
650
  handleEscape() {
649
- this.togglePopup(false);
651
+ if (this.isOpen) {
652
+ this.togglePopup(false);
653
+ }
654
+ else {
655
+ this.value = '';
656
+ }
650
657
  this.selectionService.focused = -1;
651
658
  this.suggestedText = null;
652
659
  }
@@ -745,8 +752,14 @@ export class AutoCompleteComponent {
745
752
  this.focusSubscription = this.selectionService.onFocus.subscribe(this.handleItemFocus.bind(this));
746
753
  this.navigationSubscription = merge(this.navigationService.up, this.navigationService.down).subscribe((event) => this.navigate(event.index));
747
754
  this.closeSubscription = this.navigationService.close.subscribe(() => this.togglePopup(false));
755
+ this.openSubscription = this.navigationService.open.subscribe(() => this.togglePopup(true));
748
756
  this.enterSubscription = this.navigationService.enter.subscribe(this.handleEnter.bind(this));
749
757
  this.escSubscription = this.navigationService.esc.subscribe(this.handleEscape.bind(this));
758
+ this.scrollSubscription = merge(this.navigationService.pagedown, this.navigationService.pageup).subscribe((event) => {
759
+ if (this.isOpen) {
760
+ this.optionsList.scrollWithOnePage(NavigationAction[event.originalEvent.code]);
761
+ }
762
+ });
750
763
  }
751
764
  subscribeTouchEvents() {
752
765
  if (!isDocumentAvailable() || !this.touchEnabled) {
@@ -768,8 +781,10 @@ export class AutoCompleteComponent {
768
781
  this.changeSubscription.unsubscribe();
769
782
  this.navigationSubscription.unsubscribe();
770
783
  this.closeSubscription.unsubscribe();
784
+ this.openSubscription.unsubscribe();
771
785
  this.enterSubscription.unsubscribe();
772
786
  this.escSubscription.unsubscribe();
787
+ this.scrollSubscription.unsubscribe();
773
788
  this.valueChangeSubscription.unsubscribe();
774
789
  this.focusSubscription.unsubscribe();
775
790
  if (this.touchstartDisposeHandler) {
@@ -619,6 +619,11 @@ export class ComboBoxComponent {
619
619
  .subscribe((event) => this.navigate(event.index)));
620
620
  this.subs.add(this.navigationService.open.subscribe(this.handleNavigationOpen.bind(this)));
621
621
  this.subs.add(this.navigationService.close.subscribe(() => this.togglePopup(false)));
622
+ this.subs.add(merge(this.navigationService.pagedown, this.navigationService.pageup).subscribe((event) => {
623
+ if (this.isOpen) {
624
+ this.optionsList.scrollWithOnePage(NavigationAction[event.originalEvent.code]);
625
+ }
626
+ }));
622
627
  this.subs.add(this.navigationService.esc.subscribe(this.handleEscape.bind(this)));
623
628
  this.subs.add(this.navigationService.enter.pipe(tap((event) => {
624
629
  if (this.isOpen) {
@@ -751,9 +756,10 @@ export class ComboBoxComponent {
751
756
  * @hidden
752
757
  */
753
758
  clearValue(event) {
754
- event.stopImmediatePropagation();
755
- this.focus();
756
- this._filtering = true;
759
+ event === null || event === void 0 ? void 0 : event.stopImmediatePropagation();
760
+ if (event) {
761
+ this.focus();
762
+ }
757
763
  this._previousDataItem = undefined;
758
764
  this.selectionService.resetSelection([]);
759
765
  this.clearValueSubject.next();
@@ -787,7 +793,7 @@ export class ComboBoxComponent {
787
793
  * @hidden
788
794
  */
789
795
  get buttonClasses() {
790
- return this.loading ? 'k-i-loading k-input-loading-icon' : this.iconClass || 'k-i-arrow-s';
796
+ return this.loading ? 'k-i-loading k-input-loading-icon' : this.iconClass || 'k-i-caret-alt-down';
791
797
  }
792
798
  /**
793
799
  * @hidden
@@ -980,6 +986,8 @@ export class ComboBoxComponent {
980
986
  action !== NavigationAction.Right &&
981
987
  action !== NavigationAction.Backspace &&
982
988
  action !== NavigationAction.Delete &&
989
+ action !== NavigationAction.PageDown &&
990
+ action !== NavigationAction.PageUp &&
983
991
  ((action === NavigationAction.Enter && this.isOpen) || action !== NavigationAction.Enter)) {
984
992
  event.preventDefault();
985
993
  }
@@ -1046,7 +1054,7 @@ export class ComboBoxComponent {
1046
1054
  * @hidden
1047
1055
  */
1048
1056
  handleEscape() {
1049
- this.togglePopup(false);
1057
+ this.isOpen ? this.togglePopup(false) : this.clearValue();
1050
1058
  // clear the focus only if the focused item is not selected
1051
1059
  const hasSelected = this.selectionService.selected.length > 0;
1052
1060
  if (!hasSelected) {
@@ -8,6 +8,7 @@ import { ListItemDirective } from './list-item.directive';
8
8
  import { isPresent, getter, closest, getSizeClass, getRoundedClass } from './util';
9
9
  import { fromEvent, merge } from 'rxjs';
10
10
  import { map, tap, auditTime, switchMap, take } from 'rxjs/operators';
11
+ import { NavigationAction } from './navigation/navigation-action';
11
12
  import * as i0 from "@angular/core";
12
13
  import * as i1 from "./data.service";
13
14
  import * as i2 from "./selection/selection.service";
@@ -274,6 +275,16 @@ export class ListComponent {
274
275
  this.scroll(items[flatIndex].element);
275
276
  }
276
277
  }
278
+ scrollWithOnePage(action) {
279
+ let content = this.content.nativeElement;
280
+ const contentOffsetHeight = content.clientHeight;
281
+ if (action === NavigationAction.PageDown) {
282
+ content.scrollTop += contentOffsetHeight;
283
+ }
284
+ else if (action === NavigationAction.PageUp) {
285
+ content.scrollTop -= contentOffsetHeight;
286
+ }
287
+ }
277
288
  scrollToIndex(index) {
278
289
  let content = this.content.nativeElement;
279
290
  let contentScrollTop = content.scrollTop;
@@ -22,4 +22,6 @@ export var NavigationAction;
22
22
  NavigationAction[NavigationAction["Down"] = 11] = "Down";
23
23
  NavigationAction[NavigationAction["Left"] = 12] = "Left";
24
24
  NavigationAction[NavigationAction["Right"] = 13] = "Right";
25
+ NavigationAction[NavigationAction["PageDown"] = 14] = "PageDown";
26
+ NavigationAction[NavigationAction["PageUp"] = 15] = "PageUp";
25
27
  })(NavigationAction || (NavigationAction = {}));
@@ -42,6 +42,8 @@ export class NavigationService {
42
42
  this.backspace = new EventEmitter();
43
43
  this.home = new EventEmitter();
44
44
  this.end = new EventEmitter();
45
+ this.pagedown = new EventEmitter();
46
+ this.pageup = new EventEmitter();
45
47
  }
46
48
  process(args) {
47
49
  const keyCode = args.originalEvent.keyCode;
@@ -93,6 +95,12 @@ export class NavigationService {
93
95
  else if (keyCode === Keys.Backspace) {
94
96
  action = NavigationAction.Backspace;
95
97
  }
98
+ else if (keyCode === Keys.PageDown) {
99
+ action = NavigationAction.PageDown;
100
+ }
101
+ else if (keyCode === Keys.PageUp) {
102
+ action = NavigationAction.PageUp;
103
+ }
96
104
  const eventData = new NavigationEvent(index, args.originalEvent);
97
105
  if (action !== NavigationAction.Undefined) {
98
106
  this[NavigationAction[action].toLowerCase()].emit(eventData);
@@ -115,7 +115,7 @@ export class SearchBarComponent {
115
115
  handleKeydown(event) {
116
116
  const keyCode = event.keyCode;
117
117
  const keys = [Keys.ArrowUp, Keys.ArrowDown, Keys.ArrowLeft, Keys.ArrowRight, Keys.Enter,
118
- Keys.Escape, Keys.Delete, Keys.Backspace, Keys.Home, Keys.End];
118
+ Keys.Escape, Keys.Delete, Keys.Backspace, Keys.Home, Keys.End, Keys.PageDown, Keys.PageUp];
119
119
  if (keys.indexOf(keyCode) > -1) {
120
120
  this.onNavigate.emit(event);
121
121
  }
@@ -172,6 +172,7 @@ export class DropDownListComponent {
172
172
  this.listBoxId = guid();
173
173
  this.optionPrefix = guid();
174
174
  this.filterText = "";
175
+ this.subs = new Subscription();
175
176
  this._isFocused = false;
176
177
  this.onTouchedCallback = (_) => { };
177
178
  this.onChangeCallback = (_) => { };
@@ -181,7 +182,6 @@ export class DropDownListComponent {
181
182
  this.filterBlurred = new EventEmitter();
182
183
  this.hostElementFocused = new EventEmitter();
183
184
  this.hostElementBlurred = new EventEmitter();
184
- this.selectionSubscription = new Subscription();
185
185
  this._open = false;
186
186
  this._popupSettings = { animate: true };
187
187
  this._size = 'medium';
@@ -513,6 +513,8 @@ export class DropDownListComponent {
513
513
  action !== NavigationAction.Tab &&
514
514
  action !== NavigationAction.Backspace &&
515
515
  action !== NavigationAction.Delete &&
516
+ action !== NavigationAction.PageDown &&
517
+ action !== NavigationAction.PageUp &&
516
518
  !(leftRightKeys && this.filterable) &&
517
519
  action !== NavigationAction.Enter //enter when popup is opened is handled before `handleEnter`
518
520
  ) {
@@ -545,11 +547,11 @@ export class DropDownListComponent {
545
547
  }
546
548
  ngOnInit() {
547
549
  this.renderer.removeAttribute(this.wrapper.nativeElement, "tabindex");
548
- this.localizationChangesSubscription = this.localization
550
+ this.subs.add(this.localization
549
551
  .changes.subscribe(({ rtl }) => {
550
552
  this.direction = rtl ? 'rtl' : 'ltr';
551
553
  this.cdr.detectChanges();
552
- });
554
+ }));
553
555
  this.assignAriaDescribedBy();
554
556
  this.setComponentClasses();
555
557
  }
@@ -572,9 +574,10 @@ export class DropDownListComponent {
572
574
  */
573
575
  ngOnDestroy() {
574
576
  this.destroyPopup();
575
- this.unsubscribeEvents();
576
- if (this.localizationChangesSubscription) {
577
- this.localizationChangesSubscription.unsubscribe();
577
+ this.subs.unsubscribe();
578
+ this.unSubscribeFocusEvents();
579
+ if (this.touchstartDisposeHandler) {
580
+ this.touchstartDisposeHandler();
578
581
  }
579
582
  }
580
583
  /**
@@ -727,7 +730,7 @@ export class DropDownListComponent {
727
730
  * @hidden
728
731
  */
729
732
  get buttonClasses() {
730
- return this.loading ? 'k-i-loading k-input-loading-icon' : this.iconClass || 'k-i-arrow-s';
733
+ return this.loading ? 'k-i-loading k-input-loading-icon' : this.iconClass || 'k-i-caret-alt-down';
731
734
  }
732
735
  /**
733
736
  * @hidden
@@ -799,16 +802,16 @@ export class DropDownListComponent {
799
802
  popupWrapper.style.width = max;
800
803
  popupWrapper.style.height = this.height;
801
804
  popupWrapper.setAttribute("dir", this.direction);
802
- this.popupRef.popupOpen.subscribe(() => {
805
+ this.subs.add(this.popupRef.popupOpen.subscribe(() => {
803
806
  this.cdr.detectChanges();
804
807
  this.optionsList.scrollToItem(this.selectionService.focused);
805
808
  this.opened.emit();
806
- });
807
- this.popupRef.popupClose.subscribe(() => {
809
+ }));
810
+ this.subs.add(this.popupRef.popupClose.subscribe(() => {
808
811
  this.closed.emit();
809
- });
812
+ }));
810
813
  if (!this.filterable) {
811
- this.popupRef.popupAnchorViewportLeave.subscribe(() => this.togglePopup(false));
814
+ this.subs.add(this.popupRef.popupAnchorViewportLeave.subscribe(() => this.togglePopup(false)));
812
815
  }
813
816
  }
814
817
  destroyPopup() {
@@ -847,10 +850,10 @@ export class DropDownListComponent {
847
850
  return;
848
851
  }
849
852
  // Item selection when the popup is open.
850
- this.selectionSubscription.add(this.selectionService.onSelect.pipe(filter(_ => this.isOpen), map(this.itemFromEvent.bind(this)))
853
+ this.subs.add(this.selectionService.onSelect.pipe(filter(_ => this.isOpen), map(this.itemFromEvent.bind(this)))
851
854
  .subscribe(this.onSelectionChange.bind(this)));
852
855
  // Item selection when the popup is closed | clicked | enter, and so on.
853
- this.selectionSubscription.add(merge(this.selectionService.onSelect.pipe(filter(_ => !this.isOpen)), this.selectionService.onChange).pipe(map(this.itemFromEvent.bind(this)), tap(_ => this.togglePopup(false)))
856
+ this.subs.add(merge(this.selectionService.onSelect.pipe(filter(_ => !this.isOpen)), this.selectionService.onChange).pipe(map(this.itemFromEvent.bind(this)), tap(_ => this.togglePopup(false)))
854
857
  .subscribe(({ dataItem, value: newValue, newSelection }) => {
855
858
  if (newSelection) {
856
859
  this.onSelectionChange({ dataItem });
@@ -868,27 +871,31 @@ export class DropDownListComponent {
868
871
  }
869
872
  this.clearFilter();
870
873
  }));
871
- this.navigationSubscription = merge(this.navigationService.up, this.navigationService.down, this.navigationService.left.pipe(skipWhile(() => this.filterable)), this.navigationService.right.pipe(skipWhile(() => this.filterable)), this.navigationService.home, this.navigationService.end)
874
+ this.subs.add(merge(this.navigationService.up, this.navigationService.down, this.navigationService.left.pipe(skipWhile(() => this.filterable)), this.navigationService.right.pipe(skipWhile(() => this.filterable)), this.navigationService.home, this.navigationService.end)
872
875
  .pipe(filter((event) => !isNaN(event.index)))
873
- .subscribe((event) => this.selectionService.select(event.index));
874
- this.openSubscription = this.navigationService.open.subscribe(() => this.togglePopup(true));
875
- this.closeSubscription = this.navigationService.close.subscribe(() => {
876
+ .subscribe((event) => this.selectionService.select(event.index)));
877
+ this.subs.add(merge(this.navigationService.pagedown, this.navigationService.pageup).subscribe((event) => {
878
+ if (this.isOpen) {
879
+ this.optionsList.scrollWithOnePage(NavigationAction[event.originalEvent.code]);
880
+ }
881
+ }));
882
+ this.subs.add(this.navigationService.open.subscribe(() => this.togglePopup(true)));
883
+ this.subs.add(this.navigationService.close.subscribe(() => {
876
884
  this.togglePopup(false);
877
885
  this.focus();
878
- });
879
- this.enterSubscription = this.navigationService.enter
886
+ }));
887
+ this.subs.add(this.navigationService.enter
880
888
  .pipe(tap((event) => event.originalEvent.preventDefault()))
881
- .subscribe(this.handleEnter.bind(this));
882
- this.escSubscription = this.navigationService.esc
883
- .subscribe(this.handleEscape.bind(this));
884
- this.filterBlurredSubscription = this.filterBlurred.pipe(concatMap(() => interval(10).pipe(take(1), takeUntil(this.hostElementFocused))))
889
+ .subscribe(this.handleEnter.bind(this)));
890
+ this.subs.add(this.navigationService.esc
891
+ .subscribe(this.handleEscape.bind(this)));
892
+ this.subs.add(this.filterBlurred.pipe(concatMap(() => interval(10).pipe(take(1), takeUntil(this.hostElementFocused))))
885
893
  .subscribe(() => {
886
894
  this.hostElementBlurred.emit();
887
- });
895
+ }));
888
896
  this._zone.runOutsideAngular(() => {
889
- this.componentBlurredSubscription =
890
- merge(this.hostElementBlurred.pipe(concatMap(() => interval(10).pipe(take(1), takeUntil(this.filterFocused)))), this.navigationService.tab).pipe(tap(event => event instanceof NavigationEvent && this.focus()), filter(() => this.isFocused))
891
- .subscribe(() => this.componentBlur());
897
+ this.subs.add(merge(this.hostElementBlurred.pipe(concatMap(() => interval(10).pipe(take(1), takeUntil(this.filterFocused)))), this.navigationService.tab).pipe(tap(event => event instanceof NavigationEvent && this.focus()), filter(() => this.isFocused))
898
+ .subscribe(() => this.componentBlur()));
892
899
  });
893
900
  }
894
901
  subscribeTouchEvents() {
@@ -928,25 +935,6 @@ export class DropDownListComponent {
928
935
  document.removeEventListener('blur', this.blurComponent, useCapture);
929
936
  }
930
937
  }
931
- unsubscribeEvents() {
932
- if (!isDocumentAvailable()) {
933
- return;
934
- }
935
- this.navigationSubscription.unsubscribe();
936
- this.openSubscription.unsubscribe();
937
- this.closeSubscription.unsubscribe();
938
- this.enterSubscription.unsubscribe();
939
- this.escSubscription.unsubscribe();
940
- this.componentBlurredSubscription.unsubscribe();
941
- this.filterBlurredSubscription.unsubscribe();
942
- this.unSubscribeFocusEvents();
943
- if (this.touchstartDisposeHandler) {
944
- this.touchstartDisposeHandler();
945
- }
946
- if (this.selectionSubscription) {
947
- this.selectionSubscription.unsubscribe();
948
- }
949
- }
950
938
  itemFromEvent(event) {
951
939
  const index = event.indices[0];
952
940
  let dataItem = this.dataService.itemAt(index);
@@ -732,7 +732,7 @@ export class DropDownTreeComponent {
732
732
  * @hidden
733
733
  */
734
734
  get buttonClasses() {
735
- return this.loading ? 'k-i-loading k-input-loading-icon' : 'k-i-arrow-s';
735
+ return this.loading ? 'k-i-loading k-input-loading-icon' : 'k-i-caret-alt-down';
736
736
  }
737
737
  /**
738
738
  * @hidden
@@ -9,7 +9,7 @@ export const packageMetadata = {
9
9
  name: '@progress/kendo-angular-dropdowns',
10
10
  productName: 'Kendo UI for Angular',
11
11
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
12
- publishDate: 1657286636,
12
+ publishDate: 1661867343,
13
13
  version: '',
14
14
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'
15
15
  };