@progress/kendo-angular-buttons 25.1.0-develop.18 → 25.1.0-develop.19

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: 1787934408,
53
- version: '25.1.0-develop.18',
52
+ publishDate: 1787936822,
53
+ version: '25.1.0-develop.19',
54
54
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
55
55
  };
56
56
 
@@ -6772,6 +6772,10 @@ class SegmentedControlComponent {
6772
6772
  * @hidden
6773
6773
  */
6774
6774
  selectedButtonIndex = 0;
6775
+ /**
6776
+ * @hidden
6777
+ */
6778
+ isActiveTabStop = signal(true, ...(ngDevMode ? [{ debugName: "isActiveTabStop" }] : []));
6775
6779
  _items = [];
6776
6780
  _size;
6777
6781
  _layoutMode = 'compact';
@@ -6815,10 +6819,53 @@ class SegmentedControlComponent {
6815
6819
  /**
6816
6820
  * @hidden
6817
6821
  */
6818
- handleKeydown(event, button) {
6819
- if (button.disabled && (event.code === Keys.Enter || event.code === Keys.NumpadEnter || event.code === Keys.Space)) {
6822
+ handleKeydown(event, button, index) {
6823
+ const code = normalizeKeys(event);
6824
+ if (button.disabled && (code === Keys.Enter || code === Keys.NumpadEnter || code === Keys.Space)) {
6820
6825
  event.preventDefault();
6826
+ return;
6827
+ }
6828
+ if (code === Keys.ArrowLeft || code === Keys.ArrowRight) {
6829
+ const moved = this.moveFocus(index, code === Keys.ArrowRight ? 1 : -1);
6830
+ if (moved) {
6831
+ event.preventDefault();
6832
+ }
6833
+ }
6834
+ }
6835
+ /**
6836
+ * @hidden
6837
+ * Marks whether the SegmentedControl is currently the active tab-stop item in a host
6838
+ * toolbar's own roving tabindex (e.g. Gantt, Scheduler).
6839
+ */
6840
+ setIsActiveTabStop(tabbable) {
6841
+ this.isActiveTabStop.set(tabbable);
6842
+ }
6843
+ /**
6844
+ * @hidden
6845
+ * Moves DOM focus to the currently selected button. Used by host toolbars.
6846
+ */
6847
+ focusSelectedButton(preventScroll = true) {
6848
+ this.focusButtonAt(this.selectedButtonIndex, preventScroll);
6849
+ }
6850
+ /**
6851
+ * Moves DOM focus to the adjacent button in the given direction. Disabled buttons are not
6852
+ * skipped so that keyboard users are still made aware of their presence and disabled state.
6853
+ */
6854
+ moveFocus(currentIndex, step) {
6855
+ const count = this._items.length;
6856
+ const index = currentIndex + step;
6857
+ if (index < 0 || index >= count) {
6858
+ return false;
6859
+ }
6860
+ this.focusButtonAt(index, false);
6861
+ return true;
6862
+ }
6863
+ focusButtonAt(index, preventScroll) {
6864
+ if (!isDocumentAvailable()) {
6865
+ return;
6821
6866
  }
6867
+ const buttons = this.wrapper.nativeElement.querySelectorAll('.k-segmented-control-button');
6868
+ buttons[index]?.focus({ preventScroll });
6822
6869
  }
6823
6870
  handleSizeClass(newValue, prevValue) {
6824
6871
  if (!this.wrapper) {
@@ -6873,8 +6920,9 @@ class SegmentedControlComponent {
6873
6920
  [attr.aria-disabled]="button.disabled ? true : null"
6874
6921
  [attr.title]="button.title"
6875
6922
  [attr.aria-label]="button.title && !button.text ? button.title : null"
6923
+ [attr.tabindex]="isActiveTabStop() && selectedButtonIndex === idx ? 0 : -1"
6876
6924
  (click)="handleClick(button, idx)"
6877
- (keydown)="handleKeydown($event, button)"
6925
+ (keydown)="handleKeydown($event, button, idx)"
6878
6926
  [class.k-selected]="selectedButtonIndex === idx"
6879
6927
  [attr.aria-pressed]="selectedButtonIndex === idx ? 'true' : 'false'">
6880
6928
  @if (button.icon || button.svgIcon) {
@@ -6916,8 +6964,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.27", ngImpo
6916
6964
  [attr.aria-disabled]="button.disabled ? true : null"
6917
6965
  [attr.title]="button.title"
6918
6966
  [attr.aria-label]="button.title && !button.text ? button.title : null"
6967
+ [attr.tabindex]="isActiveTabStop() && selectedButtonIndex === idx ? 0 : -1"
6919
6968
  (click)="handleClick(button, idx)"
6920
- (keydown)="handleKeydown($event, button)"
6969
+ (keydown)="handleKeydown($event, button, idx)"
6921
6970
  [class.k-selected]="selectedButtonIndex === idx"
6922
6971
  [attr.aria-pressed]="selectedButtonIndex === idx ? 'true' : 'false'">
6923
6972
  @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": 1787934408,
11
- "version": "25.1.0-develop.18",
10
+ "publishDate": 1787936822,
11
+ "version": "25.1.0-develop.19",
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.18",
3
+ "version": "25.1.0-develop.19",
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": 1787934408,
59
+ "publishDate": 1787936822,
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.18",
70
- "@progress/kendo-angular-l10n": "25.1.0-develop.18",
71
- "@progress/kendo-angular-popup": "25.1.0-develop.18",
72
- "@progress/kendo-angular-icons": "25.1.0-develop.18",
69
+ "@progress/kendo-angular-common": "25.1.0-develop.19",
70
+ "@progress/kendo-angular-l10n": "25.1.0-develop.19",
71
+ "@progress/kendo-angular-popup": "25.1.0-develop.19",
72
+ "@progress/kendo-angular-icons": "25.1.0-develop.19",
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.18",
77
+ "@progress/kendo-angular-schematics": "25.1.0-develop.19",
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"