@progress/kendo-angular-buttons 25.1.0-develop.2 → 25.1.0-develop.20

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.
@@ -49,8 +49,8 @@ const packageMetadata = {
49
49
  productName: 'Kendo UI for Angular',
50
50
  productCode: 'KENDOUIANGULAR',
51
51
  productCodes: ['KENDOUIANGULAR'],
52
- publishDate: 1786694082,
53
- version: '25.1.0-develop.2',
52
+ publishDate: 1787938291,
53
+ version: '25.1.0-develop.20',
54
54
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
55
55
  };
56
56
 
@@ -2651,6 +2651,12 @@ class ListButton extends MultiTabStop {
2651
2651
  }
2652
2652
  const value = open ?? !this.openState;
2653
2653
  this._toggle(value, false);
2654
+ if (!isDocumentAvailable()) {
2655
+ return;
2656
+ }
2657
+ this.zone.runOutsideAngular(() => {
2658
+ setTimeout(() => this.zone.run(() => this.focusService.focus(value ? 0 : -1)));
2659
+ });
2654
2660
  }
2655
2661
  /**
2656
2662
  * @hidden
@@ -6772,6 +6778,10 @@ class SegmentedControlComponent {
6772
6778
  * @hidden
6773
6779
  */
6774
6780
  selectedButtonIndex = 0;
6781
+ /**
6782
+ * @hidden
6783
+ */
6784
+ isActiveTabStop = signal(true, ...(ngDevMode ? [{ debugName: "isActiveTabStop" }] : []));
6775
6785
  _items = [];
6776
6786
  _size;
6777
6787
  _layoutMode = 'compact';
@@ -6815,10 +6825,53 @@ class SegmentedControlComponent {
6815
6825
  /**
6816
6826
  * @hidden
6817
6827
  */
6818
- handleKeydown(event, button) {
6819
- if (button.disabled && (event.code === Keys.Enter || event.code === Keys.NumpadEnter || event.code === Keys.Space)) {
6828
+ handleKeydown(event, button, index) {
6829
+ const code = normalizeKeys(event);
6830
+ if (button.disabled && (code === Keys.Enter || code === Keys.NumpadEnter || code === Keys.Space)) {
6820
6831
  event.preventDefault();
6832
+ return;
6833
+ }
6834
+ if (code === Keys.ArrowLeft || code === Keys.ArrowRight) {
6835
+ const moved = this.moveFocus(index, code === Keys.ArrowRight ? 1 : -1);
6836
+ if (moved) {
6837
+ event.preventDefault();
6838
+ }
6839
+ }
6840
+ }
6841
+ /**
6842
+ * @hidden
6843
+ * Marks whether the SegmentedControl is currently the active tab-stop item in a host
6844
+ * toolbar's own roving tabindex (e.g. Gantt, Scheduler).
6845
+ */
6846
+ setIsActiveTabStop(tabbable) {
6847
+ this.isActiveTabStop.set(tabbable);
6848
+ }
6849
+ /**
6850
+ * @hidden
6851
+ * Moves DOM focus to the currently selected button. Used by host toolbars.
6852
+ */
6853
+ focusSelectedButton(preventScroll = true) {
6854
+ this.focusButtonAt(this.selectedButtonIndex, preventScroll);
6855
+ }
6856
+ /**
6857
+ * Moves DOM focus to the adjacent button in the given direction. Disabled buttons are not
6858
+ * skipped so that keyboard users are still made aware of their presence and disabled state.
6859
+ */
6860
+ moveFocus(currentIndex, step) {
6861
+ const count = this._items.length;
6862
+ const index = currentIndex + step;
6863
+ if (index < 0 || index >= count) {
6864
+ return false;
6865
+ }
6866
+ this.focusButtonAt(index, false);
6867
+ return true;
6868
+ }
6869
+ focusButtonAt(index, preventScroll) {
6870
+ if (!isDocumentAvailable()) {
6871
+ return;
6821
6872
  }
6873
+ const buttons = this.wrapper.nativeElement.querySelectorAll('.k-segmented-control-button');
6874
+ buttons[index]?.focus({ preventScroll });
6822
6875
  }
6823
6876
  handleSizeClass(newValue, prevValue) {
6824
6877
  if (!this.wrapper) {
@@ -6873,8 +6926,9 @@ class SegmentedControlComponent {
6873
6926
  [attr.aria-disabled]="button.disabled ? true : null"
6874
6927
  [attr.title]="button.title"
6875
6928
  [attr.aria-label]="button.title && !button.text ? button.title : null"
6929
+ [attr.tabindex]="isActiveTabStop() && selectedButtonIndex === idx ? 0 : -1"
6876
6930
  (click)="handleClick(button, idx)"
6877
- (keydown)="handleKeydown($event, button)"
6931
+ (keydown)="handleKeydown($event, button, idx)"
6878
6932
  [class.k-selected]="selectedButtonIndex === idx"
6879
6933
  [attr.aria-pressed]="selectedButtonIndex === idx ? 'true' : 'false'">
6880
6934
  @if (button.icon || button.svgIcon) {
@@ -6916,8 +6970,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
6916
6970
  [attr.aria-disabled]="button.disabled ? true : null"
6917
6971
  [attr.title]="button.title"
6918
6972
  [attr.aria-label]="button.title && !button.text ? button.title : null"
6973
+ [attr.tabindex]="isActiveTabStop() && selectedButtonIndex === idx ? 0 : -1"
6919
6974
  (click)="handleClick(button, idx)"
6920
- (keydown)="handleKeydown($event, button)"
6975
+ (keydown)="handleKeydown($event, button, idx)"
6921
6976
  [class.k-selected]="selectedButtonIndex === idx"
6922
6977
  [attr.aria-pressed]="selectedButtonIndex === idx ? 'true' : 'false'">
6923
6978
  @if (button.icon || button.svgIcon) {
package/index.d.ts CHANGED
@@ -2866,6 +2866,10 @@ declare class SegmentedControlComponent implements AfterViewInit, OnDestroy {
2866
2866
  * @hidden
2867
2867
  */
2868
2868
  selectedButtonIndex: number;
2869
+ /**
2870
+ * @hidden
2871
+ */
2872
+ isActiveTabStop: i0.WritableSignal<boolean>;
2869
2873
  private _items;
2870
2874
  private _size;
2871
2875
  private _layoutMode;
@@ -2881,7 +2885,24 @@ declare class SegmentedControlComponent implements AfterViewInit, OnDestroy {
2881
2885
  /**
2882
2886
  * @hidden
2883
2887
  */
2884
- handleKeydown(event: KeyboardEvent, button: SegmentedItemSettings): void;
2888
+ handleKeydown(event: KeyboardEvent, button: SegmentedItemSettings, index: number): void;
2889
+ /**
2890
+ * @hidden
2891
+ * Marks whether the SegmentedControl is currently the active tab-stop item in a host
2892
+ * toolbar's own roving tabindex (e.g. Gantt, Scheduler).
2893
+ */
2894
+ setIsActiveTabStop(tabbable: boolean): void;
2895
+ /**
2896
+ * @hidden
2897
+ * Moves DOM focus to the currently selected button. Used by host toolbars.
2898
+ */
2899
+ focusSelectedButton(preventScroll?: boolean): void;
2900
+ /**
2901
+ * Moves DOM focus to the adjacent button in the given direction. Disabled buttons are not
2902
+ * skipped so that keyboard users are still made aware of their presence and disabled state.
2903
+ */
2904
+ private moveFocus;
2905
+ private focusButtonAt;
2885
2906
  private handleSizeClass;
2886
2907
  /**
2887
2908
  * Updates the thumb position to reflect the currently selected button.
@@ -7,7 +7,7 @@ export const packageMetadata = {
7
7
  "productCodes": [
8
8
  "KENDOUIANGULAR"
9
9
  ],
10
- "publishDate": 1786694082,
11
- "version": "25.1.0-develop.2",
10
+ "publishDate": 1787938291,
11
+ "version": "25.1.0-develop.20",
12
12
  "licensingDocsUrl": "https://www.telerik.com/kendo-angular-ui/my-license/"
13
13
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@progress/kendo-angular-buttons",
3
- "version": "25.1.0-develop.2",
3
+ "version": "25.1.0-develop.20",
4
4
  "description": "Buttons Package for Angular",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "author": "Progress",
@@ -56,7 +56,7 @@
56
56
  "package": {
57
57
  "productName": "Kendo UI for Angular",
58
58
  "productCode": "KENDOUIANGULAR",
59
- "publishDate": 1786694082,
59
+ "publishDate": 1787938291,
60
60
  "licensingDocsUrl": "https://www.telerik.com/kendo-angular-ui/my-license/"
61
61
  }
62
62
  },
@@ -66,15 +66,15 @@
66
66
  "@angular/core": "20 - 22",
67
67
  "@angular/platform-browser": "20 - 22",
68
68
  "@progress/kendo-licensing": "^1.11.0",
69
- "@progress/kendo-angular-common": "25.1.0-develop.2",
70
- "@progress/kendo-angular-l10n": "25.1.0-develop.2",
71
- "@progress/kendo-angular-popup": "25.1.0-develop.2",
72
- "@progress/kendo-angular-icons": "25.1.0-develop.2",
69
+ "@progress/kendo-angular-common": "25.1.0-develop.20",
70
+ "@progress/kendo-angular-l10n": "25.1.0-develop.20",
71
+ "@progress/kendo-angular-popup": "25.1.0-develop.20",
72
+ "@progress/kendo-angular-icons": "25.1.0-develop.20",
73
73
  "rxjs": "^6.5.3 || ^7.0.0"
74
74
  },
75
75
  "dependencies": {
76
76
  "tslib": "^2.3.1",
77
- "@progress/kendo-angular-schematics": "25.1.0-develop.2",
77
+ "@progress/kendo-angular-schematics": "25.1.0-develop.20",
78
78
  "@progress/kendo-common": "^1.0.1",
79
79
  "@progress/kendo-webspeech-common": "1.0.1",
80
80
  "@progress/kendo-smartpaste-common": "1.0.0"