@progress/kendo-angular-toolbar 25.3.1-develop.2 → 25.4.0-develop.1

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.
@@ -3,15 +3,15 @@
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
5
  import * as i0 from '@angular/core';
6
- import { EventEmitter, Injectable, inject, ElementRef, Input, ViewChild, Directive, Output, forwardRef, HostBinding, Component, ViewContainerRef, HostListener, ContentChildren, isDevMode, ViewChildren, signal, computed, afterNextRender, ChangeDetectionStrategy, NgModule } from '@angular/core';
6
+ import { EventEmitter, Injectable, signal, afterNextRender, inject, ElementRef, Input, ViewChild, Directive, Output, forwardRef, HostBinding, ChangeDetectionStrategy, Component, computed, ViewContainerRef, HostListener, ContentChildren, isDevMode, ViewChildren, NgModule } from '@angular/core';
7
7
  import * as i2 from '@progress/kendo-angular-popup';
8
8
  import { PopupComponent, PopupService } from '@progress/kendo-angular-popup';
9
9
  import { isDocumentAvailable, normalizeKeys, Keys, isPresent as isPresent$1, getLicenseMessage, shouldShowValidationUI, guid, parseCSSClassNames, ResizeSensorComponent, WatermarkOverlayComponent, provideComponentName, hasObservers, DraggableDirective, ResizeBatchService } from '@progress/kendo-angular-common';
10
10
  import * as i1 from '@progress/kendo-angular-l10n';
11
11
  import { ComponentMessages, LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';
12
12
  import { validatePackage } from '@progress/kendo-licensing';
13
- import { take, filter, takeUntil } from 'rxjs/operators';
14
13
  import { Subject, Subscription, merge, fromEvent } from 'rxjs';
14
+ import { filter, takeUntil } from 'rxjs/operators';
15
15
  import { chevronLeftIcon, chevronRightIcon, moreHorizontalIcon, moreVerticalIcon, chevronDownIcon, handleDragDotsIcon } from '@progress/kendo-svg-icons';
16
16
  import { ButtonComponent, ButtonGroupComponent, DropDownButtonComponent, SplitButtonComponent } from '@progress/kendo-angular-buttons';
17
17
  import { NgTemplateOutlet, NgClass, NgStyle } from '@angular/common';
@@ -26,8 +26,8 @@ const packageMetadata = {
26
26
  productName: 'Kendo UI for Angular',
27
27
  productCode: 'KENDOUIANGULAR',
28
28
  productCodes: ['KENDOUIANGULAR'],
29
- publishDate: 1791536933,
30
- version: '25.3.1-develop.2',
29
+ publishDate: 1791873159,
30
+ version: '25.4.0-develop.1',
31
31
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
32
32
  };
33
33
 
@@ -52,8 +52,8 @@ const DEFAULT_SCROLL_SPEED = 100;
52
52
  * @hidden
53
53
  */
54
54
  class ScrollService {
55
- ngZone;
56
55
  localization;
56
+ ngZone;
57
57
  owner;
58
58
  position = 0;
59
59
  scrollButtonActiveStateChange = new Subject();
@@ -73,9 +73,9 @@ class ScrollService {
73
73
  get toolsOverflow() {
74
74
  return this.scrollContainerOverflowSize > 0;
75
75
  }
76
- constructor(ngZone, localization) {
77
- this.ngZone = ngZone;
76
+ constructor(localization, ngZone) {
78
77
  this.localization = localization;
78
+ this.ngZone = ngZone;
79
79
  }
80
80
  toggleScrollButtonsState() {
81
81
  const toolbar = this.owner;
@@ -89,7 +89,7 @@ class ScrollService {
89
89
  const calculatedPrevButtonActive = (this.position * rtlDelta) > 0 && this.scrollContainerOverflowSize > 0;
90
90
  const calculatedNextButtonActive = (this.position * rtlDelta) < this.scrollContainerOverflowSize - defaultOffset && this.scrollContainerOverflowSize > 0;
91
91
  if (calculatedPrevButtonActive !== currentPrevButtonActive) {
92
- this.ngZone.run(() => this.toggleButtonActiveState('prev', calculatedPrevButtonActive));
92
+ this.toggleButtonActiveState('prev', calculatedPrevButtonActive);
93
93
  }
94
94
  if (calculatedNextButtonActive !== currentNextButtonActive) {
95
95
  this.ngZone.run(() => this.toggleButtonActiveState('next', calculatedNextButtonActive));
@@ -154,12 +154,12 @@ class ScrollService {
154
154
  this.scrollButtonActiveStateChange.next({ buttonType, active });
155
155
  }
156
156
  isDisabled = (buttonType) => this.owner[`${buttonType}ScrollButton`]?.nativeElement.classList.contains('k-disabled');
157
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: ScrollService, deps: [{ token: i0.NgZone }, { token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Injectable });
157
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: ScrollService, deps: [{ token: i1.LocalizationService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
158
158
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: ScrollService });
159
159
  }
160
160
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: ScrollService, decorators: [{
161
161
  type: Injectable
162
- }], ctorParameters: () => [{ type: i0.NgZone }, { type: i1.LocalizationService }] });
162
+ }], ctorParameters: () => [{ type: i1.LocalizationService }, { type: i0.NgZone }] });
163
163
 
164
164
  /**
165
165
  * @hidden
@@ -416,19 +416,19 @@ const normalizeOverflowSettings = (overflow) => {
416
416
  * @hidden
417
417
  */
418
418
  class NavigationService {
419
- zone;
420
419
  scrollService;
420
+ injector;
421
421
  overflowButton;
422
422
  focused = { renderedTool: null, index: -1 };
423
- renderedTools = [];
423
+ renderedTools = signal([], ...(ngDevMode ? [{ debugName: "renderedTools" }] : /* istanbul ignore next */ []));
424
424
  isPopupFocused = false;
425
425
  isOverflowButtonFocused = false;
426
- constructor(zone, scrollService) {
427
- this.zone = zone;
426
+ constructor(scrollService, injector) {
428
427
  this.scrollService = scrollService;
428
+ this.injector = injector;
429
429
  }
430
430
  setRenderedTools(rts) {
431
- this.renderedTools = rts;
431
+ this.renderedTools.set(rts);
432
432
  }
433
433
  click({ context, event: ev }) {
434
434
  if (this.focused.renderedTool !== context && ev) {
@@ -518,11 +518,11 @@ class NavigationService {
518
518
  }
519
519
  }
520
520
  getFocusableTools() {
521
- return this.renderedTools.filter(rt => (rt.tool.overflows === this.isPopupFocused) && rt.tool.canFocus());
521
+ return this.renderedTools().filter(rt => (rt.tool.overflows === this.isPopupFocused) && rt.tool.canFocus());
522
522
  }
523
523
  focus(renderedTool, ev) {
524
- // running the code below in onStable fixes issue #2939
525
- this.zone.onStable.pipe(take(1)).subscribe(() => {
524
+ // running the code below in afterNextRender fixes issue #2939
525
+ afterNextRender(() => {
526
526
  if (!renderedTool) {
527
527
  const focusableRTs = this.getFocusableTools();
528
528
  const lastFocusedRT = focusableRTs.find(rt => rt === this.focused.renderedTool) || focusableRTs[0];
@@ -544,7 +544,7 @@ class NavigationService {
544
544
  }
545
545
  this.blurOverflowButton();
546
546
  }
547
- });
547
+ }, { injector: this.injector });
548
548
  }
549
549
  blurOverflowButton() {
550
550
  if (this.overflowButton) {
@@ -563,12 +563,12 @@ class NavigationService {
563
563
  return (isPresent(this.overflowButton) &&
564
564
  window.getComputedStyle(this.overflowButton.nativeElement).getPropertyValue('visibility') === 'visible');
565
565
  }
566
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: NavigationService, deps: [{ token: i0.NgZone }, { token: ScrollService }], target: i0.ɵɵFactoryTarget.Injectable });
566
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: NavigationService, deps: [{ token: ScrollService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
567
567
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: NavigationService });
568
568
  }
569
569
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: NavigationService, decorators: [{
570
570
  type: Injectable
571
- }], ctorParameters: () => [{ type: i0.NgZone }, { type: ScrollService }] });
571
+ }], ctorParameters: () => [{ type: ScrollService }, { type: i0.Injector }] });
572
572
 
573
573
  /**
574
574
  * Represents the base ToolBar Tool component for Angular.
@@ -597,11 +597,36 @@ class ToolBarToolComponent {
597
597
  toolbarTemplate;
598
598
  sectionTemplate;
599
599
  popupTemplate;
600
- tabIndex = -1; //Focus movement inside the toolbar is managed using roving tabindex.
601
- overflows = true;
602
- visibility;
600
+ //Focus movement inside the toolbar is managed using roving tabindex.
601
+ set tabIndex(value) {
602
+ this._tabIndex.set(value);
603
+ }
604
+ get tabIndex() {
605
+ return this._tabIndex();
606
+ }
603
607
  element;
604
- isBuiltInTool = false;
608
+ set overflows(value) {
609
+ this._overflows.set(value);
610
+ }
611
+ get overflows() {
612
+ return this._overflows();
613
+ }
614
+ set visibility(value) {
615
+ this._visibility.set(value);
616
+ }
617
+ get visibility() {
618
+ return this._visibility();
619
+ }
620
+ set isBuiltInTool(value) {
621
+ this._isBuiltInTool.set(value);
622
+ }
623
+ get isBuiltInTool() {
624
+ return this._isBuiltInTool();
625
+ }
626
+ _isBuiltInTool = signal(false, ...(ngDevMode ? [{ debugName: "_isBuiltInTool" }] : /* istanbul ignore next */ []));
627
+ _location = signal(null, ...(ngDevMode ? [{ debugName: "_location" }] : /* istanbul ignore next */ []));
628
+ _overflows = signal(true, ...(ngDevMode ? [{ debugName: "_overflows" }] : /* istanbul ignore next */ []));
629
+ _visibility = signal(null, ...(ngDevMode ? [{ debugName: "_visibility" }] : /* istanbul ignore next */ []));
605
630
  /**
606
631
  * @hidden
607
632
  */
@@ -609,7 +634,12 @@ class ToolBarToolComponent {
609
634
  /**
610
635
  * @hidden
611
636
  */
612
- location;
637
+ set location(value) {
638
+ this._location.set(value);
639
+ }
640
+ get location() {
641
+ return this._location();
642
+ }
613
643
  constructor() {
614
644
  this.element = inject(ElementRef);
615
645
  }
@@ -650,6 +680,7 @@ class ToolBarToolComponent {
650
680
  handleKey(_ev) {
651
681
  return false;
652
682
  }
683
+ _tabIndex = signal(-1, ...(ngDevMode ? [{ debugName: "_tabIndex" }] : /* istanbul ignore next */ []));
653
684
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: ToolBarToolComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
654
685
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.23", type: ToolBarToolComponent, isStandalone: true, inputs: { responsive: "responsive" }, viewQueries: [{ propertyName: "toolbarTemplate", first: true, predicate: ["toolbarTemplate"], descendants: true, static: true }, { propertyName: "sectionTemplate", first: true, predicate: ["sectionTemplate"], descendants: true, static: true }, { propertyName: "popupTemplate", first: true, predicate: ["popupTemplate"], descendants: true, static: true }], ngImport: i0 });
655
686
  }
@@ -745,11 +776,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImpo
745
776
  class ToolbarToolsService {
746
777
  renderedToolsChange = new Subject();
747
778
  overflowToolsChange = new Subject();
748
- renderedTools = [];
749
- overflowTools = [];
750
- allTools = [];
779
+ renderedTools = signal([], ...(ngDevMode ? [{ debugName: "renderedTools" }] : /* istanbul ignore next */ []));
780
+ overflowTools = signal([], ...(ngDevMode ? [{ debugName: "overflowTools" }] : /* istanbul ignore next */ []));
781
+ allTools = signal([], ...(ngDevMode ? [{ debugName: "allTools" }] : /* istanbul ignore next */ []));
751
782
  reset() {
752
- this.renderedTools = this.overflowTools = this.allTools = [];
783
+ this.renderedTools.set([]);
784
+ this.overflowTools.set([]);
785
+ this.allTools.set([]);
753
786
  }
754
787
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: ToolbarToolsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
755
788
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: ToolbarToolsService });
@@ -768,9 +801,24 @@ class ToolBarRendererComponent {
768
801
  refreshService;
769
802
  toolsService;
770
803
  viewContainer;
771
- tool;
772
- location;
773
- resizable;
804
+ set tool(value) {
805
+ this._tool.set(value);
806
+ }
807
+ get tool() {
808
+ return this._tool();
809
+ }
810
+ set location(value) {
811
+ this._location.set(value);
812
+ }
813
+ get location() {
814
+ return this._location();
815
+ }
816
+ set resizable(value) {
817
+ this._resizable.set(value);
818
+ }
819
+ get resizable() {
820
+ return this._resizable();
821
+ }
774
822
  rendererClick = new EventEmitter();
775
823
  template;
776
824
  element;
@@ -779,6 +827,9 @@ class ToolBarRendererComponent {
779
827
  }
780
828
  refreshSubscription;
781
829
  internalComponentRef;
830
+ _tool = signal(null, ...(ngDevMode ? [{ debugName: "_tool" }] : /* istanbul ignore next */ []));
831
+ _location = signal(null, ...(ngDevMode ? [{ debugName: "_location" }] : /* istanbul ignore next */ []));
832
+ _resizable = signal(false, ...(ngDevMode ? [{ debugName: "_resizable" }] : /* istanbul ignore next */ []));
782
833
  constructor(renderer, rendererService, refreshService, toolsService, viewContainer) {
783
834
  this.renderer = renderer;
784
835
  this.rendererService = rendererService;
@@ -800,6 +851,13 @@ class ToolBarRendererComponent {
800
851
  ngOnDestroy() {
801
852
  this.refreshSubscription?.unsubscribe();
802
853
  this.internalComponentRef?.removeEventListener('click', this.onClick);
854
+ if (this.location === 'toolbar') {
855
+ this.toolsService.renderedTools.set(this.toolsService.renderedTools().filter(t => t !== this));
856
+ this.toolsService.renderedToolsChange.next(this.toolsService.renderedTools());
857
+ }
858
+ else {
859
+ this.toolsService.overflowTools.set(this.toolsService.overflowTools().filter(t => t !== this));
860
+ }
803
861
  }
804
862
  ngAfterViewInit() {
805
863
  const viewContainerRootNodes = this.viewContainer.get(0)?.rootNodes?.filter(isElementOrTextNode);
@@ -899,19 +957,22 @@ class ToolBarRendererComponent {
899
957
  };
900
958
  updateTools() {
901
959
  this.tool.location = this.location;
902
- const isInToolbar = this.toolsService.renderedTools.some(t => t.tool === this.tool);
903
- const isInPopup = this.toolsService.overflowTools.some(t => t.tool === this.tool);
960
+ const isInToolbar = this.toolsService.renderedTools().some(t => t.tool === this.tool);
961
+ const isInPopup = this.toolsService.overflowTools().some(t => t.tool === this.tool);
904
962
  if (this.location === 'toolbar') {
905
- isInPopup && (this.toolsService.overflowTools = this.toolsService.overflowTools.filter(t => t.tool !== this.tool));
906
- !isInToolbar && this.toolsService.renderedTools.push(this);
963
+ if (isInPopup) {
964
+ this.toolsService.overflowTools.set(this.toolsService.overflowTools().filter(t => t.tool !== this.tool));
965
+ }
966
+ if (!isInToolbar) {
967
+ this.toolsService.renderedTools.update(tools => [...tools, this]);
968
+ this.toolsService.renderedToolsChange.next(this.toolsService.renderedTools());
969
+ }
907
970
  }
908
971
  else {
909
972
  if (!isInPopup) {
910
- this.toolsService.overflowTools.push(this);
911
- this.toolsService.overflowTools.sort((t1, t2) => {
912
- // ensures correct navigation order in Popup
913
- return this.toolsService.allTools.indexOf(t1.tool) - this.toolsService.allTools.indexOf(t2.tool);
914
- });
973
+ this.toolsService.overflowTools.update(tools =>
974
+ // ensures correct navigation order in Popup
975
+ [...tools, this].sort((t1, t2) => this.toolsService.allTools().indexOf(t1.tool) - this.toolsService.allTools().indexOf(t2.tool)));
915
976
  }
916
977
  }
917
978
  }
@@ -946,15 +1007,33 @@ class ToolbarMessages extends ComponentMessages {
946
1007
  /**
947
1008
  * Sets the title of the **More Tools** button in a responsive ToolBar.
948
1009
  */
949
- moreToolsTitle;
1010
+ set moreToolsTitle(value) {
1011
+ this._moreToolsTitle.set(value);
1012
+ }
1013
+ get moreToolsTitle() {
1014
+ return this._moreToolsTitle();
1015
+ }
950
1016
  /**
951
1017
  * Sets the title for the **Previous Tool** button when the ToolBar is scrollable.
952
1018
  */
953
- previousToolButton;
1019
+ set previousToolButton(value) {
1020
+ this._previousToolButton.set(value);
1021
+ }
1022
+ get previousToolButton() {
1023
+ return this._previousToolButton();
1024
+ }
954
1025
  /**
955
1026
  * Sets the title for the **Next Tool** button when the ToolBar is scrollable.
956
1027
  */
957
- nextToolButton;
1028
+ set nextToolButton(value) {
1029
+ this._nextToolButton.set(value);
1030
+ }
1031
+ get nextToolButton() {
1032
+ return this._nextToolButton();
1033
+ }
1034
+ _moreToolsTitle = signal(null, ...(ngDevMode ? [{ debugName: "_moreToolsTitle" }] : /* istanbul ignore next */ []));
1035
+ _previousToolButton = signal(null, ...(ngDevMode ? [{ debugName: "_previousToolButton" }] : /* istanbul ignore next */ []));
1036
+ _nextToolButton = signal(null, ...(ngDevMode ? [{ debugName: "_nextToolButton" }] : /* istanbul ignore next */ []));
958
1037
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: ToolbarMessages, deps: null, target: i0.ɵɵFactoryTarget.Directive });
959
1038
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.23", type: ToolbarMessages, isStandalone: true, selector: "kendo-toolbar-messages-base", inputs: { moreToolsTitle: "moreToolsTitle", previousToolButton: "previousToolButton", nextToolButton: "nextToolButton" }, usesInheritance: true, ngImport: i0 });
960
1039
  }
@@ -1012,8 +1091,8 @@ const DIRECTION_CLASSES = {
1012
1091
  class ToolbarScrollableButtonComponent {
1013
1092
  host;
1014
1093
  renderer;
1015
- ngZone;
1016
1094
  localization;
1095
+ ngZone;
1017
1096
  get prevClass() {
1018
1097
  return this.prev;
1019
1098
  }
@@ -1036,11 +1115,11 @@ class ToolbarScrollableButtonComponent {
1036
1115
  chevronLeftIcon = chevronLeftIcon;
1037
1116
  chevronRightIcon = chevronRightIcon;
1038
1117
  subs = new Subscription();
1039
- constructor(host, renderer, ngZone, localization) {
1118
+ constructor(host, renderer, localization, ngZone) {
1040
1119
  this.host = host;
1041
1120
  this.renderer = renderer;
1042
- this.ngZone = ngZone;
1043
1121
  this.localization = localization;
1122
+ this.ngZone = ngZone;
1044
1123
  }
1045
1124
  ngAfterViewInit() {
1046
1125
  this.ngZone.runOutsideAngular(() => {
@@ -1099,7 +1178,7 @@ class ToolbarScrollableButtonComponent {
1099
1178
  }
1100
1179
  }
1101
1180
  }
1102
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: ToolbarScrollableButtonComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
1181
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: ToolbarScrollableButtonComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.LocalizationService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
1103
1182
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.23", type: ToolbarScrollableButtonComponent, isStandalone: true, selector: "[kendoToolbarScrollableButton]", inputs: { prev: "prev", overflow: "overflow" }, outputs: { onClick: "onClick" }, host: { properties: { "class.k-toolbar-prev": "this.prevClass", "class.k-toolbar-next": "this.nextClass", "attr.role": "this.role" } }, ngImport: i0, template: `
1104
1183
  <kendo-icon-wrapper
1105
1184
  [name]="iconClass"
@@ -1108,7 +1187,7 @@ class ToolbarScrollableButtonComponent {
1108
1187
  innerCssClass="k-button-icon"
1109
1188
  >
1110
1189
  </kendo-icon-wrapper>
1111
- `, isInline: true, dependencies: [{ kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }] });
1190
+ `, isInline: true, dependencies: [{ kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1112
1191
  }
1113
1192
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: ToolbarScrollableButtonComponent, decorators: [{
1114
1193
  type: Component,
@@ -1124,9 +1203,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImpo
1124
1203
  `,
1125
1204
  selector: '[kendoToolbarScrollableButton]',
1126
1205
  standalone: true,
1206
+ changeDetection: ChangeDetectionStrategy.OnPush,
1127
1207
  imports: [IconWrapperComponent]
1128
1208
  }]
1129
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i1.LocalizationService }], propDecorators: { prevClass: [{
1209
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.LocalizationService }, { type: i0.NgZone }], propDecorators: { prevClass: [{
1130
1210
  type: HostBinding,
1131
1211
  args: ['class.k-toolbar-prev']
1132
1212
  }], nextClass: [{
@@ -1182,11 +1262,12 @@ class ToolBarComponent {
1182
1262
  refreshService;
1183
1263
  navigationService;
1184
1264
  element;
1185
- zone;
1186
1265
  renderer;
1187
1266
  _cdr;
1188
1267
  toolsService;
1189
1268
  scrollService;
1269
+ injector;
1270
+ zone;
1190
1271
  get overflowClass() {
1191
1272
  return this.size ? `k-button-${SIZES[this.size]}` : '';
1192
1273
  }
@@ -1199,19 +1280,19 @@ class ToolBarComponent {
1199
1280
  if (this.isScrollMode) {
1200
1281
  this.removeSubscriptions(['scrollButtonStateChangeSub', 'scrollContainerScrollSub']);
1201
1282
  }
1202
- this._overflow = overflow;
1283
+ this._overflow.set(overflow);
1203
1284
  if (this.isScrollMode) {
1204
1285
  this.handleScrollModeUpdates();
1205
1286
  }
1206
1287
  this.setScrollableOverlayClasses();
1207
- this.zone.onStable.pipe(take(1)).subscribe(() => this.onResize());
1288
+ afterNextRender(() => this.onResize(), { injector: this.injector });
1208
1289
  }
1209
1290
  get overflow() {
1210
- return this._overflow;
1291
+ return this._overflow();
1211
1292
  }
1212
1293
  get showScrollButtons() {
1213
1294
  const buttonsVisibility = this.normalizedOverflow.scrollButtons;
1214
- const showAuto = buttonsVisibility === 'auto' && this.showAutoButtons;
1295
+ const showAuto = buttonsVisibility === 'auto' && this._showAutoButtons();
1215
1296
  const showAlways = buttonsVisibility === 'visible';
1216
1297
  return this.isScrollMode && (showAuto || showAlways);
1217
1298
  }
@@ -1244,7 +1325,9 @@ class ToolBarComponent {
1244
1325
  /**
1245
1326
  * @hidden
1246
1327
  */
1247
- scrollButtonClasses = [];
1328
+ get scrollButtonClasses() {
1329
+ return this._scrollButtonClasses();
1330
+ }
1248
1331
  /**
1249
1332
  * @hidden
1250
1333
  */
@@ -1263,10 +1346,10 @@ class ToolBarComponent {
1263
1346
  * ([see example](https://www.telerik.com/kendo-angular-ui/components/toolbar/responsive-toolbar#customizing-the-popup)).
1264
1347
  */
1265
1348
  set popupSettings(settings) {
1266
- this._popupSettings = Object.assign({}, getInitialPopupSettings(this.localization.rtl), settings);
1349
+ this._popupSettings.set(Object.assign({}, getInitialPopupSettings(this.localization.rtl), settings));
1267
1350
  }
1268
1351
  get popupSettings() {
1269
- return this._popupSettings || getInitialPopupSettings(this.localization.rtl);
1352
+ return this._popupSettings() || getInitialPopupSettings(this.localization.rtl);
1270
1353
  }
1271
1354
  /**
1272
1355
  * Sets the fill mode for the ToolBar.
@@ -1275,11 +1358,10 @@ class ToolBarComponent {
1275
1358
  */
1276
1359
  set fillMode(fillMode) {
1277
1360
  this.handleClasses(fillMode, 'fillMode');
1278
- this._fillMode = fillMode;
1279
- this.updateScrollButtonClasses();
1361
+ this._fillMode.set(fillMode);
1280
1362
  }
1281
1363
  get fillMode() {
1282
- return this._fillMode;
1364
+ return this._fillMode();
1283
1365
  }
1284
1366
  /**
1285
1367
  * Sets the `tabindex` attribute of the ToolBar.
@@ -1287,18 +1369,23 @@ class ToolBarComponent {
1287
1369
  *
1288
1370
  * @default 0
1289
1371
  */
1290
- tabindex = 0;
1372
+ set tabindex(value) {
1373
+ this._tabindex.set(value);
1374
+ this.element.nativeElement.setAttribute('tabindex', value.toString());
1375
+ }
1376
+ get tabindex() {
1377
+ return this._tabindex();
1378
+ }
1291
1379
  /**
1292
1380
  * Sets the size for all ToolBar elements.
1293
1381
  * Use this property to control the padding of the ToolBar elements. The default value is set by the Kendo theme.
1294
1382
  */
1295
1383
  set size(size) {
1296
1384
  this.handleClasses(size, 'size');
1297
- this._size = size;
1298
- this.updateScrollButtonClasses();
1385
+ this._size.set(size);
1299
1386
  }
1300
1387
  get size() {
1301
- return this._size;
1388
+ return this._size();
1302
1389
  }
1303
1390
  /**
1304
1391
  * @hidden
@@ -1315,11 +1402,11 @@ class ToolBarComponent {
1315
1402
  * @default 'always'
1316
1403
  */
1317
1404
  set showIcon(value) {
1318
- if (this._showIcon === value) {
1405
+ if (this._showIcon() === value) {
1319
1406
  return;
1320
1407
  }
1321
1408
  const normalizedValue = this.normalizeDisplayValue(value);
1322
- this._showIcon = value;
1409
+ this._showIcon.set(value);
1323
1410
  this.propertyChange.emit({
1324
1411
  property: 'showIcon',
1325
1412
  value: normalizedValue
@@ -1331,11 +1418,11 @@ class ToolBarComponent {
1331
1418
  * @default 'always'
1332
1419
  */
1333
1420
  set showText(value) {
1334
- if (this._showText === value) {
1421
+ if (this._showText() === value) {
1335
1422
  return;
1336
1423
  }
1337
1424
  const normalizedValue = this.normalizeDisplayValue(value);
1338
- this._showText = value;
1425
+ this._showText.set(value);
1339
1426
  this.propertyChange.emit({
1340
1427
  property: 'showText',
1341
1428
  value: normalizedValue
@@ -1371,8 +1458,16 @@ class ToolBarComponent {
1371
1458
  startButtonGroup;
1372
1459
  endButtonGroup;
1373
1460
  scrollSeparator;
1374
- popupRef;
1375
- direction;
1461
+ set popupRef(value) {
1462
+ this._popupRef.set(value);
1463
+ }
1464
+ get popupRef() {
1465
+ return this._popupRef();
1466
+ }
1467
+ _popupRef = signal(null, ...(ngDevMode ? [{ debugName: "_popupRef" }] : /* istanbul ignore next */ []));
1468
+ get direction() {
1469
+ return this._direction();
1470
+ }
1376
1471
  get appendTo() {
1377
1472
  const { appendTo } = this.popupSettings;
1378
1473
  if (!appendTo || appendTo === 'root') {
@@ -1397,7 +1492,7 @@ class ToolBarComponent {
1397
1492
  this.toggle(open);
1398
1493
  }
1399
1494
  get popupOpen() {
1400
- return this._open;
1495
+ return this._open();
1401
1496
  }
1402
1497
  /**
1403
1498
  * @hidden
@@ -1418,21 +1513,32 @@ class ToolBarComponent {
1418
1513
  get sectionClass() {
1419
1514
  return this.normalizedOverflow.mode === 'section';
1420
1515
  }
1421
- _overflow = false;
1422
- _popupSettings;
1423
- cachedOverflowAnchorWidth;
1424
- _open;
1516
+ _overflow = signal(false, ...(ngDevMode ? [{ debugName: "_overflow" }] : /* istanbul ignore next */ []));
1517
+ _popupSettings = signal(undefined, ...(ngDevMode ? [{ debugName: "_popupSettings" }] : /* istanbul ignore next */ []));
1518
+ cachedOverflowAnchorWidth = signal(null, ...(ngDevMode ? [{ debugName: "cachedOverflowAnchorWidth" }] : /* istanbul ignore next */ []));
1519
+ _open = signal(false, ...(ngDevMode ? [{ debugName: "_open" }] : /* istanbul ignore next */ []));
1520
+ _direction = signal('ltr', ...(ngDevMode ? [{ debugName: "_direction" }] : /* istanbul ignore next */ []));
1521
+ _tabindex = signal(0, ...(ngDevMode ? [{ debugName: "_tabindex" }] : /* istanbul ignore next */ []));
1425
1522
  toolbarKeydownListener;
1426
1523
  overflowKeydownListener;
1427
1524
  sectionKeydownListener;
1428
1525
  cancelRenderedToolsSubscription$ = new Subject();
1429
- cachedGap;
1430
- _size = undefined;
1431
- _fillMode = undefined;
1432
- _showText = 'always';
1433
- _showIcon = 'always';
1434
- overflowButtonClickedTime = null;
1435
- showAutoButtons = false;
1526
+ cachedGap = signal(null, ...(ngDevMode ? [{ debugName: "cachedGap" }] : /* istanbul ignore next */ []));
1527
+ _size = signal(undefined, ...(ngDevMode ? [{ debugName: "_size" }] : /* istanbul ignore next */ []));
1528
+ _fillMode = signal(undefined, ...(ngDevMode ? [{ debugName: "_fillMode" }] : /* istanbul ignore next */ []));
1529
+ _scrollButtonClasses = computed(() => {
1530
+ const size = SIZES[this._size()];
1531
+ const fillMode = this._fillMode();
1532
+ return [
1533
+ size && `k-button-${size}`,
1534
+ fillMode && `k-button-${fillMode}`
1535
+ ].filter(Boolean);
1536
+ }, ...(ngDevMode ? [{ debugName: "_scrollButtonClasses" }] : /* istanbul ignore next */ []));
1537
+ _showText = signal('always', ...(ngDevMode ? [{ debugName: "_showText" }] : /* istanbul ignore next */ []));
1538
+ _showIcon = signal('always', ...(ngDevMode ? [{ debugName: "_showIcon" }] : /* istanbul ignore next */ []));
1539
+ overflowButtonClickedTime = signal(null, ...(ngDevMode ? [{ debugName: "overflowButtonClickedTime" }] : /* istanbul ignore next */ []));
1540
+ _showAutoButtons = signal(false, ...(ngDevMode ? [{ debugName: "_showAutoButtons" }] : /* istanbul ignore next */ []));
1541
+ _showOverflowSeparator = signal(false, ...(ngDevMode ? [{ debugName: "_showOverflowSeparator" }] : /* istanbul ignore next */ []));
1436
1542
  scrollButtonStateChangeSub;
1437
1543
  scrollContainerScrollSub;
1438
1544
  /**
@@ -1485,37 +1591,38 @@ class ToolBarComponent {
1485
1591
  licenseMessage;
1486
1592
  constructor(localization, popupService, refreshService, navigationService,
1487
1593
  // Needs to be public as it is being accessed in the Editor component
1488
- element, zone, renderer, _cdr, toolsService, scrollService) {
1594
+ element, renderer, _cdr, toolsService, scrollService, injector, zone) {
1489
1595
  this.localization = localization;
1490
1596
  this.popupService = popupService;
1491
1597
  this.refreshService = refreshService;
1492
1598
  this.navigationService = navigationService;
1493
1599
  this.element = element;
1494
- this.zone = zone;
1495
1600
  this.renderer = renderer;
1496
1601
  this._cdr = _cdr;
1497
1602
  this.toolsService = toolsService;
1498
1603
  this.scrollService = scrollService;
1604
+ this.injector = injector;
1605
+ this.zone = zone;
1499
1606
  const isValid = validatePackage(packageMetadata);
1500
1607
  this.licenseMessage = getLicenseMessage(packageMetadata);
1501
1608
  this.showLicenseWatermark = shouldShowValidationUI(isValid);
1502
- this.direction = localization.rtl ? 'rtl' : 'ltr';
1609
+ this._direction.set(localization.rtl ? 'rtl' : 'ltr');
1503
1610
  this.scrollService.owner = this;
1504
1611
  }
1505
1612
  ngAfterContentInit() {
1506
- this.toolsService.allTools = this.allTools.toArray();
1613
+ this.toolsService.allTools.set(this.allTools.toArray());
1507
1614
  this.subscriptions.add(this.allTools.changes.subscribe(() => {
1508
1615
  this.toolsService.reset();
1509
- this.toolsService.allTools = this.allTools.toArray();
1616
+ this.toolsService.allTools.set(this.allTools.toArray());
1510
1617
  this.allTools.forEach((tool) => {
1511
1618
  this.refreshService.refresh(tool);
1512
1619
  });
1513
- this.zone.onStable.pipe(take(1)).subscribe(() => this.onResize());
1620
+ afterNextRender(() => this.onResize(), { injector: this.injector });
1514
1621
  }));
1515
1622
  }
1516
1623
  ngAfterViewInit() {
1517
- this.toolsService.renderedToolsChange.next(this.toolsService.renderedTools);
1518
- this.toolsService.overflowToolsChange.next(this.toolsService.overflowTools);
1624
+ this.toolsService.renderedToolsChange.next(this.toolsService.renderedTools());
1625
+ this.toolsService.overflowToolsChange.next(this.toolsService.overflowTools());
1519
1626
  const element = this.element.nativeElement;
1520
1627
  if (!element.getAttribute('tabindex')) {
1521
1628
  this.element.nativeElement.setAttribute('tabindex', '0');
@@ -1579,13 +1686,19 @@ class ToolBarComponent {
1579
1686
  }
1580
1687
  // because of https://github.com/telerik/kendo-angular-buttons/pull/276
1581
1688
  // button icons are not rendered until onResize() is called
1582
- this.zone.runOutsideAngular(() => {
1583
- setTimeout(() => {
1584
- this.zone.run(() => {
1585
- this.onResize();
1689
+ afterNextRender(() => {
1690
+ this.zone.run(() => {
1691
+ this.onResize();
1692
+ });
1693
+ // check if still needed after the Editor migration
1694
+ this.zone.runOutsideAngular(() => {
1695
+ setTimeout(() => {
1696
+ this.zone.run(() => {
1697
+ this.onResize();
1698
+ });
1586
1699
  });
1587
1700
  });
1588
- });
1701
+ }, { injector: this.injector });
1589
1702
  }
1590
1703
  if (this.isScrollMode) {
1591
1704
  this.handleScrollModeUpdates();
@@ -1595,11 +1708,11 @@ class ToolBarComponent {
1595
1708
  this.focusedByPointer = true;
1596
1709
  }
1597
1710
  }));
1598
- this.navigationService.setRenderedTools(this.toolsService.renderedTools);
1711
+ this.navigationService.setRenderedTools(this.toolsService.renderedTools());
1599
1712
  }
1600
1713
  ngOnInit() {
1601
- this.subscriptions.add(this.localization.changes.subscribe(({ rtl }) => (this.direction = rtl ? 'rtl' : 'ltr')));
1602
- this.zone.onStable.pipe(take(1)).subscribe(() => this.onResize());
1714
+ this.subscriptions.add(this.localization.changes.subscribe(({ rtl }) => this._direction.set(rtl ? 'rtl' : 'ltr')));
1715
+ afterNextRender(() => this.onResize(), { injector: this.injector });
1603
1716
  if (isDocumentAvailable()) {
1604
1717
  this.zone.runOutsideAngular(() => this.subscriptions.add(fromEvent(document, 'click')
1605
1718
  .pipe(filter(() => !!this.popupRef), filter((ev) => !this.popupRef.popup.instance.container.nativeElement.contains(ev.target)), filter((ev) => !this.overflowButton.nativeElement.contains(ev.target)))
@@ -1610,12 +1723,6 @@ class ToolBarComponent {
1610
1723
  })));
1611
1724
  }
1612
1725
  }
1613
- ngOnChanges(changes) {
1614
- if (changes['tabindex']) {
1615
- // prevents ExpressionChangedAfterItHasBeenCheckedError when tools with popup are opened/closed asynchronously
1616
- this.element.nativeElement.setAttribute('tabindex', changes['tabindex'].currentValue.toString());
1617
- }
1618
- }
1619
1726
  ngOnDestroy() {
1620
1727
  this.destroyPopup();
1621
1728
  if (this.toolbarKeydownListener) {
@@ -1627,7 +1734,9 @@ class ToolBarComponent {
1627
1734
  /**
1628
1735
  * @hidden
1629
1736
  */
1630
- showOverflowSeparator = false;
1737
+ get showOverflowSeparator() {
1738
+ return this._showOverflowSeparator();
1739
+ }
1631
1740
  /**
1632
1741
  * @hidden
1633
1742
  */
@@ -1689,13 +1798,13 @@ class ToolBarComponent {
1689
1798
  showPopup() {
1690
1799
  this.popupOpen = !this.popupOpen;
1691
1800
  this.navigationService.click({ context: undefined, event: undefined });
1692
- this.overflowButtonClickedTime = Date.now();
1801
+ this.overflowButtonClickedTime.set(Date.now());
1693
1802
  }
1694
1803
  /**
1695
1804
  * Toggles the visibility of the overflow popup.
1696
1805
  */
1697
1806
  toggle(popupOpen) {
1698
- this._open = popupOpen !== undefined ? popupOpen : !this.popupOpen;
1807
+ this._open.set(popupOpen !== undefined ? popupOpen : !this.popupOpen);
1699
1808
  if (this.popupRef) {
1700
1809
  this.popupRef.close();
1701
1810
  this.popupRef = null;
@@ -1739,7 +1848,7 @@ class ToolBarComponent {
1739
1848
  this.shrink(containerWidth, this.childrenWidth);
1740
1849
  this.stretch(containerWidth, this.childrenWidth);
1741
1850
  this.displayAnchor();
1742
- const isImmediateResize = (Date.now() - this.overflowButtonClickedTime) < immediateResizeThreshold;
1851
+ const isImmediateResize = (Date.now() - this.overflowButtonClickedTime()) < immediateResizeThreshold;
1743
1852
  if (this.popupOpen && !isImmediateResize) {
1744
1853
  const eventArgs = new PreventableEvent();
1745
1854
  this.close.emit(eventArgs);
@@ -1753,7 +1862,7 @@ class ToolBarComponent {
1753
1862
  if (this.normalizedOverflow.scrollButtons === 'auto') {
1754
1863
  const containerWidth = innerWidth(this.element.nativeElement);
1755
1864
  let scrollButtonsWidth = 0;
1756
- if (this.showAutoButtons) {
1865
+ if (this._showAutoButtons()) {
1757
1866
  const separatorWidth = this.scrollSeparator.nativeElement.getBoundingClientRect().width + 2 * this.gap;
1758
1867
  if (this.hasScrollButtons.position === 'split') {
1759
1868
  scrollButtonsWidth = innerWidth(this.prevScrollButton.nativeElement) + innerWidth(this.nextScrollButton.nativeElement) + 2 * separatorWidth;
@@ -1766,8 +1875,8 @@ class ToolBarComponent {
1766
1875
  }
1767
1876
  }
1768
1877
  const shouldShowButtons = (this.childrenWidth + scrollButtonsWidth) > containerWidth;
1769
- if (shouldShowButtons !== this.showAutoButtons) {
1770
- this.showAutoButtons = shouldShowButtons;
1878
+ if (shouldShowButtons !== this._showAutoButtons()) {
1879
+ this._showAutoButtons.set(shouldShowButtons);
1771
1880
  this.cdr.detectChanges();
1772
1881
  }
1773
1882
  this.scrollService.toggleScrollButtonsState();
@@ -1884,11 +1993,13 @@ class ToolBarComponent {
1884
1993
  }
1885
1994
  });
1886
1995
  this.cancelRenderedToolsSubscription$.next(undefined);
1887
- this.navigationService.setRenderedTools(this.toolsService.overflowTools);
1996
+ this.navigationService.setRenderedTools(this.toolsService.overflowTools());
1888
1997
  this.navigationService.moveFocusToPopup();
1889
1998
  this.toolsService.overflowToolsChange
1890
1999
  .pipe(takeUntil(this.cancelRenderedToolsSubscription$))
1891
- .subscribe((rts) => this.navigationService.setRenderedTools(rts));
2000
+ .subscribe((rts) => {
2001
+ this.navigationService.setRenderedTools(rts);
2002
+ });
1892
2003
  this.renderer.setAttribute(this.overflowButton.nativeElement, 'aria-controls', this.popupId);
1893
2004
  }
1894
2005
  /**
@@ -1896,7 +2007,7 @@ class ToolBarComponent {
1896
2007
  */
1897
2008
  onPopupClose() {
1898
2009
  this.cancelRenderedToolsSubscription$.next(undefined);
1899
- this.navigationService.setRenderedTools(this.toolsService.renderedTools);
2010
+ this.navigationService.setRenderedTools(this.toolsService.renderedTools());
1900
2011
  this.toolsService.renderedToolsChange
1901
2012
  .pipe(takeUntil(this.cancelRenderedToolsSubscription$))
1902
2013
  .subscribe((rts) => this.navigationService.setRenderedTools(rts));
@@ -1921,22 +2032,21 @@ class ToolBarComponent {
1921
2032
  const visibility = this.allTools.filter(t => t.overflows && t.responsive).length > 0 ? 'visible' : 'hidden';
1922
2033
  this.overflowButton && this.renderer.setStyle(this.overflowButton.nativeElement, 'visibility', visibility);
1923
2034
  const isVisible = visibility === 'visible';
1924
- if (isVisible !== this.showOverflowSeparator) {
1925
- this.showOverflowSeparator = isVisible;
1926
- this.cdr.detectChanges();
2035
+ if (isVisible !== this._showOverflowSeparator()) {
2036
+ this._showOverflowSeparator.set(isVisible);
1927
2037
  }
1928
2038
  if (!isVisible) {
1929
2039
  this.destroyPopup();
1930
2040
  }
1931
2041
  }
1932
2042
  get popupWidth() {
1933
- if (!this.popupSettings || !this.popupSettings.width) {
2043
+ if (!this.popupSettings?.width) {
1934
2044
  return 'auto';
1935
2045
  }
1936
2046
  return isNaN(this.popupSettings.width) ? this.popupSettings.width : `${this.popupSettings.width}px`;
1937
2047
  }
1938
2048
  get popupHeight() {
1939
- if (!this.popupSettings || !this.popupSettings.height) {
2049
+ if (!this.popupSettings?.height) {
1940
2050
  return;
1941
2051
  }
1942
2052
  return isNaN(this.popupSettings.height) ? this.popupSettings.height : `${this.popupSettings.height}px`;
@@ -1945,21 +2055,21 @@ class ToolBarComponent {
1945
2055
  if (!this.showMenu) {
1946
2056
  return 0;
1947
2057
  }
1948
- if (!this.cachedOverflowAnchorWidth) {
1949
- this.cachedOverflowAnchorWidth = this.overflowButton.nativeElement.offsetWidth;
2058
+ if (!this.cachedOverflowAnchorWidth()) {
2059
+ this.cachedOverflowAnchorWidth.set(this.overflowButton.nativeElement.offsetWidth);
1950
2060
  }
1951
- return this.cachedOverflowAnchorWidth;
2061
+ return this.cachedOverflowAnchorWidth();
1952
2062
  }
1953
2063
  get gap() {
1954
- if (isPresent(this.cachedGap)) {
1955
- return this.cachedGap;
2064
+ if (isPresent(this.cachedGap())) {
2065
+ return this.cachedGap();
1956
2066
  }
1957
2067
  const computedGap = getComputedStyle(this.element.nativeElement).gap;
1958
- this.cachedGap = isPresent(computedGap) ? parseInt(computedGap, 10) : 0;
1959
- return this.cachedGap;
2068
+ this.cachedGap.set(isPresent(computedGap) ? parseInt(computedGap, 10) : 0);
2069
+ return this.cachedGap();
1960
2070
  }
1961
2071
  get childrenWidth() {
1962
- const width = this.toolsService.renderedTools.reduce((totalWidth, tool) => tool.width + totalWidth + (tool.isDisplayed() ? this.gap : 0), 0);
2072
+ const width = this.toolsService.renderedTools().reduce((totalWidth, tool) => tool.width + totalWidth + (tool.isDisplayed() ? this.gap : 0), 0);
1963
2073
  return Math.ceil(width);
1964
2074
  }
1965
2075
  get visibleTools() {
@@ -2005,7 +2115,7 @@ class ToolBarComponent {
2005
2115
  if (!tool) {
2006
2116
  return null;
2007
2117
  }
2008
- const renderedElement = this.toolsService.renderedTools.find((r) => {
2118
+ const renderedElement = this.toolsService.renderedTools().find((r) => {
2009
2119
  return r.tool === tool;
2010
2120
  });
2011
2121
  if (!isPresent(renderedElement)) {
@@ -2021,8 +2131,8 @@ class ToolBarComponent {
2021
2131
  if (!tool) {
2022
2132
  return null;
2023
2133
  }
2024
- const renderedElement = this.toolsService.renderedTools.find((r) => r.tool === tool);
2025
- if (!isPresent(renderedElement)) {
2134
+ const renderedElement = this.toolsService.renderedTools().find((r) => r.tool === tool);
2135
+ if (!renderedElement) {
2026
2136
  return 0;
2027
2137
  }
2028
2138
  tool.overflows = false;
@@ -2054,16 +2164,9 @@ class ToolBarComponent {
2054
2164
  this.popupSubs.unsubscribe();
2055
2165
  this.popupRef.close();
2056
2166
  this.popupRef = null;
2057
- this._open = false;
2167
+ this._open.set(false);
2058
2168
  }
2059
2169
  }
2060
- updateScrollButtonClasses() {
2061
- const size = SIZES[this._size];
2062
- this.scrollButtonClasses = [
2063
- size && `k-button-${size}`,
2064
- this._fillMode && `k-button-${this._fillMode}`
2065
- ].filter(Boolean);
2066
- }
2067
2170
  handleClasses(value, input) {
2068
2171
  const elem = this.element.nativeElement;
2069
2172
  const classes = getStylingClasses('toolbar', input, this[input], value);
@@ -2168,7 +2271,7 @@ class ToolBarComponent {
2168
2271
  }
2169
2272
  return value;
2170
2273
  }
2171
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: ToolBarComponent, deps: [{ token: i1.LocalizationService }, { token: i2.PopupService }, { token: RefreshService }, { token: NavigationService }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: ToolbarToolsService }, { token: ScrollService }], target: i0.ɵɵFactoryTarget.Component });
2274
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: ToolBarComponent, deps: [{ token: i1.LocalizationService }, { token: i2.PopupService }, { token: RefreshService }, { token: NavigationService }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: ToolbarToolsService }, { token: ScrollService }, { token: i0.Injector }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
2172
2275
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.23", type: ToolBarComponent, isStandalone: true, selector: "kendo-toolbar", inputs: { overflow: "overflow", resizable: "resizable", popupSettings: "popupSettings", fillMode: "fillMode", tabindex: "tabindex", size: "size", tabIndex: "tabIndex", showIcon: "showIcon", showText: "showText", toolsSource: "toolsSource" }, outputs: { open: "open", close: "close" }, host: { listeners: { "focus": "onFocus($event)", "focusout": "onFocusOut($event)" }, properties: { "class.k-toolbar": "this.hostClass", "class.k-toolbar-scrollable": "this.scrollableClass", "class.k-toolbar-section": "this.sectionClass", "attr.role": "this.role", "attr.dir": "this.getDir", "class.k-toolbar-resizable": "this.resizableClass" } }, providers: [
2173
2276
  RefreshService,
2174
2277
  NavigationService,
@@ -2180,7 +2283,7 @@ class ToolBarComponent {
2180
2283
  useValue: 'kendo.toolbar'
2181
2284
  },
2182
2285
  provideComponentName('toolbar')
2183
- ], queries: [{ propertyName: "contentTools", predicate: ToolBarToolComponent }], viewQueries: [{ propertyName: "overflowButton", first: true, predicate: ["overflowButton"], descendants: true, read: ElementRef }, { propertyName: "popupTemplate", first: true, predicate: ["popupTemplate"], descendants: true, static: true }, { propertyName: "popupSectionTemplate", first: true, predicate: ["popupSectionTemplate"], descendants: true, static: true }, { propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true, read: ElementRef }, { propertyName: "resizeSensor", first: true, predicate: ["resizeSensor"], descendants: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "prevScrollButton", first: true, predicate: ["prevScrollButton"], descendants: true, read: ElementRef }, { propertyName: "nextScrollButton", first: true, predicate: ["nextScrollButton"], descendants: true, read: ElementRef }, { propertyName: "startButtonGroup", first: true, predicate: ["startButtonGroup"], descendants: true, read: ElementRef }, { propertyName: "endButtonGroup", first: true, predicate: ["endButtonGroup"], descendants: true, read: ElementRef }, { propertyName: "scrollSeparator", first: true, predicate: ["scrollSeparator"], descendants: true, read: ElementRef }], exportAs: ["kendoToolBar"], usesOnChanges: true, ngImport: i0, template: `
2286
+ ], queries: [{ propertyName: "contentTools", predicate: ToolBarToolComponent }], viewQueries: [{ propertyName: "overflowButton", first: true, predicate: ["overflowButton"], descendants: true, read: ElementRef }, { propertyName: "popupTemplate", first: true, predicate: ["popupTemplate"], descendants: true, static: true }, { propertyName: "popupSectionTemplate", first: true, predicate: ["popupSectionTemplate"], descendants: true, static: true }, { propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true, read: ElementRef }, { propertyName: "resizeSensor", first: true, predicate: ["resizeSensor"], descendants: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "prevScrollButton", first: true, predicate: ["prevScrollButton"], descendants: true, read: ElementRef }, { propertyName: "nextScrollButton", first: true, predicate: ["nextScrollButton"], descendants: true, read: ElementRef }, { propertyName: "startButtonGroup", first: true, predicate: ["startButtonGroup"], descendants: true, read: ElementRef }, { propertyName: "endButtonGroup", first: true, predicate: ["endButtonGroup"], descendants: true, read: ElementRef }, { propertyName: "scrollSeparator", first: true, predicate: ["scrollSeparator"], descendants: true, read: ElementRef }], exportAs: ["kendoToolBar"], ngImport: i0, template: `
2184
2287
  <ng-container kendoToolbarLocalizedMessages
2185
2288
  i18n-moreToolsTitle="kendo.toolbar.moreToolsTitle|The title of the **more tools** button in a responsive ToolBar"
2186
2289
  moreToolsTitle="More tools"
@@ -2378,7 +2481,7 @@ class ToolBarComponent {
2378
2481
  @if (showLicenseWatermark) {
2379
2482
  <div kendoWatermarkOverlay [licenseMessage]="licenseMessage"></div>
2380
2483
  }
2381
- `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: LocalizedToolbarMessagesDirective, selector: "[kendoToolbarLocalizedMessages]" }, { kind: "directive", type: ToolBarRendererComponent, selector: "[kendoToolbarRenderer]", inputs: ["tool", "location", "resizable"], outputs: ["rendererClick"] }, { kind: "component", type: ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { kind: "component", type: ToolbarScrollableButtonComponent, selector: "[kendoToolbarScrollableButton]", inputs: ["prev", "overflow"], outputs: ["onClick"] }, { kind: "component", type: WatermarkOverlayComponent, selector: "div[kendoWatermarkOverlay], kendo-watermark-overlay", inputs: ["licenseMessage"] }] });
2484
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: LocalizedToolbarMessagesDirective, selector: "[kendoToolbarLocalizedMessages]" }, { kind: "directive", type: ToolBarRendererComponent, selector: "[kendoToolbarRenderer]", inputs: ["tool", "location", "resizable"], outputs: ["rendererClick"] }, { kind: "component", type: ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { kind: "component", type: ToolbarScrollableButtonComponent, selector: "[kendoToolbarScrollableButton]", inputs: ["prev", "overflow"], outputs: ["onClick"] }, { kind: "component", type: WatermarkOverlayComponent, selector: "div[kendoWatermarkOverlay], kendo-watermark-overlay", inputs: ["licenseMessage"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2382
2485
  }
2383
2486
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: ToolBarComponent, decorators: [{
2384
2487
  type: Component,
@@ -2597,9 +2700,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImpo
2597
2700
  }
2598
2701
  `,
2599
2702
  standalone: true,
2703
+ changeDetection: ChangeDetectionStrategy.OnPush,
2600
2704
  imports: [NgTemplateOutlet, LocalizedToolbarMessagesDirective, ToolBarRendererComponent, ButtonComponent, NgClass, ResizeSensorComponent, ToolbarScrollableButtonComponent, WatermarkOverlayComponent]
2601
2705
  }]
2602
- }], ctorParameters: () => [{ type: i1.LocalizationService }, { type: i2.PopupService }, { type: RefreshService }, { type: NavigationService }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: ToolbarToolsService }, { type: ScrollService }], propDecorators: { overflow: [{
2706
+ }], ctorParameters: () => [{ type: i1.LocalizationService }, { type: i2.PopupService }, { type: RefreshService }, { type: NavigationService }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: ToolbarToolsService }, { type: ScrollService }, { type: i0.Injector }, { type: i0.NgZone }], propDecorators: { overflow: [{
2603
2707
  type: Input
2604
2708
  }], resizable: [{
2605
2709
  type: Input
@@ -2701,8 +2805,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImpo
2701
2805
  */
2702
2806
  class ToolBarButtonComponent extends ToolBarToolComponent {
2703
2807
  element;
2704
- zone;
2808
+ injector;
2705
2809
  host;
2810
+ cdr;
2706
2811
  // showText and showIcon showIcon should be declared first
2707
2812
  /**
2708
2813
  * Specifies the button text visibility.
@@ -2710,11 +2815,11 @@ class ToolBarButtonComponent extends ToolBarToolComponent {
2710
2815
  * @default 'always'
2711
2816
  */
2712
2817
  set showText(value) {
2713
- this._showText = value;
2818
+ this._showText.set(value);
2714
2819
  this.setTextDisplayMode();
2715
2820
  }
2716
2821
  get showText() {
2717
- return this._showText;
2822
+ return this._showText();
2718
2823
  }
2719
2824
  /**
2720
2825
  * Specifies the button icon visibility.
@@ -2722,22 +2827,22 @@ class ToolBarButtonComponent extends ToolBarToolComponent {
2722
2827
  * @default 'always'
2723
2828
  */
2724
2829
  set showIcon(value) {
2725
- this._showIcon = value;
2830
+ this._showIcon.set(value);
2726
2831
  this.setIconDisplayMode();
2727
2832
  }
2728
2833
  get showIcon() {
2729
- return this._showIcon;
2834
+ return this._showIcon();
2730
2835
  }
2731
2836
  /**
2732
2837
  * Specifies the text of the Button
2733
2838
  * ([see example](https://www.telerik.com/kendo-angular-ui/components/toolbar/control-types#buttons)).
2734
2839
  */
2735
2840
  set text(text) {
2736
- this._text = text;
2841
+ this._text.set(text);
2737
2842
  this.setTextDisplayMode();
2738
2843
  }
2739
2844
  get text() {
2740
- return this._text;
2845
+ return this._text();
2741
2846
  }
2742
2847
  /**
2743
2848
  * @hidden
@@ -2748,30 +2853,55 @@ class ToolBarButtonComponent extends ToolBarToolComponent {
2748
2853
  /**
2749
2854
  * Specifies custom inline CSS styles for the Button.
2750
2855
  */
2751
- style;
2856
+ set style(value) {
2857
+ this._style.set(value);
2858
+ }
2859
+ get style() {
2860
+ return this._style();
2861
+ }
2752
2862
  /**
2753
2863
  * Specifies custom CSS class names to be added to the Button.
2754
2864
  */
2755
- className;
2865
+ set className(value) {
2866
+ this._className.set(value);
2867
+ }
2868
+ get className() {
2869
+ return this._className();
2870
+ }
2756
2871
  /**
2757
2872
  * Specifies the `title` attribute of the Button.
2758
2873
  *
2759
2874
  * @remarks
2760
2875
  * This property is related to accessibility.
2761
2876
  */
2762
- title;
2877
+ set title(value) {
2878
+ this._title.set(value);
2879
+ }
2880
+ get title() {
2881
+ return this._title();
2882
+ }
2763
2883
  /**
2764
2884
  * Disables the Button when set to `true`
2765
2885
  * ([see example](https://www.telerik.com/kendo-angular-ui/components/toolbar/control-types#buttons)).
2766
2886
  */
2767
- disabled;
2887
+ set disabled(value) {
2888
+ this._disabled.set(value);
2889
+ }
2890
+ get disabled() {
2891
+ return this._disabled();
2892
+ }
2768
2893
  /**
2769
2894
  * Provides visual styling to indicate if the Button is active
2770
2895
  * ([see example](https://www.telerik.com/kendo-angular-ui/components/toolbar/control-types#toggle-buttons)).
2771
2896
  * For toggleable buttons, set this to `true`.
2772
2897
  * @default false
2773
2898
  */
2774
- toggleable = false;
2899
+ set toggleable(value) {
2900
+ this._toggleable.set(value);
2901
+ }
2902
+ get toggleable() {
2903
+ return this._toggleable();
2904
+ }
2775
2905
  /**
2776
2906
  * @hidden
2777
2907
  */
@@ -2794,26 +2924,46 @@ class ToolBarButtonComponent extends ToolBarToolComponent {
2794
2924
  * Use with the `toggleable` property.
2795
2925
  * @default false
2796
2926
  */
2797
- selected = false;
2927
+ set selected(value) {
2928
+ this._selected.set(value);
2929
+ }
2930
+ get selected() {
2931
+ return this._selected();
2932
+ }
2798
2933
  /**
2799
2934
  * Specifies the background and border styles of the Button. The default value is set by the Kendo theme.
2800
2935
  */
2801
- fillMode = undefined;
2936
+ set fillMode(value) {
2937
+ this._fillMode.set(value);
2938
+ }
2939
+ get fillMode() {
2940
+ return this._fillMode();
2941
+ }
2802
2942
  /**
2803
2943
  * Specifies the border radius of the Button. The default value is set by the Kendo theme.
2804
2944
  */
2805
- rounded = undefined;
2945
+ set rounded(value) {
2946
+ this._rounded.set(value);
2947
+ }
2948
+ get rounded() {
2949
+ return this._rounded();
2950
+ }
2806
2951
  /**
2807
2952
  * Specifies the predefined theme color of the Button. The default value is set by the Kendo theme.
2808
2953
  */
2809
- themeColor = undefined;
2954
+ set themeColor(value) {
2955
+ this._themeColor.set(value);
2956
+ }
2957
+ get themeColor() {
2958
+ return this._themeColor();
2959
+ }
2810
2960
  /**
2811
2961
  * Defines the name for an existing icon in a Kendo UI theme
2812
2962
  * ([see example](https://www.telerik.com/kendo-angular-ui/components/toolbar/control-types#buttons)).
2813
2963
  * The icon is rendered inside the Button by a `span.k-icon` element.
2814
2964
  */
2815
2965
  set icon(icon) {
2816
- this._icon = icon;
2966
+ this._icon.set(icon);
2817
2967
  this.setIconDisplayMode();
2818
2968
  }
2819
2969
  /**
@@ -2821,7 +2971,7 @@ class ToolBarButtonComponent extends ToolBarToolComponent {
2821
2971
  * Allows the usage of custom icons.
2822
2972
  */
2823
2973
  set iconClass(iconClass) {
2824
- this._iconClass = iconClass;
2974
+ this._iconClass.set(iconClass);
2825
2975
  this.setIconDisplayMode();
2826
2976
  }
2827
2977
  /**
@@ -2829,12 +2979,12 @@ class ToolBarButtonComponent extends ToolBarToolComponent {
2829
2979
  * Accepts either an [existing Kendo SVG icon](https://www.telerik.com/kendo-angular-ui/components/icons/svgicon/svgicon-list) or a custom one.
2830
2980
  */
2831
2981
  set svgIcon(icon) {
2832
- const isIconSet = this._icon;
2833
- const isIconClassSet = this._iconClass;
2982
+ const isIconSet = this._icon();
2983
+ const isIconClassSet = this._iconClass();
2834
2984
  if (isDevMode() && icon && isIconSet && isIconClassSet) {
2835
2985
  throw new Error('Setting both icon/svgIcon and iconClass options at the same time is not supported.');
2836
2986
  }
2837
- this._svgIcon = icon;
2987
+ this._svgIcon.set(icon);
2838
2988
  this.setIconDisplayMode();
2839
2989
  }
2840
2990
  /**
@@ -2842,7 +2992,7 @@ class ToolBarButtonComponent extends ToolBarToolComponent {
2842
2992
  * The URL can be relative or absolute.
2843
2993
  */
2844
2994
  set imageUrl(imageUrl) {
2845
- this._imageUrl = imageUrl;
2995
+ this._imageUrl.set(imageUrl);
2846
2996
  this.setIconDisplayMode();
2847
2997
  }
2848
2998
  /**
@@ -2858,20 +3008,18 @@ class ToolBarButtonComponent extends ToolBarToolComponent {
2858
3008
  * The event argument is the new selected state (Boolean).
2859
3009
  */
2860
3010
  selectedChange = new EventEmitter();
2861
- toolbarOptions = {
2862
- text: '',
2863
- icon: '',
2864
- iconClass: '',
2865
- svgIcon: null,
2866
- imageUrl: '',
2867
- };
2868
- overflowOptions = {
2869
- text: '',
2870
- icon: '',
2871
- iconClass: '',
2872
- svgIcon: null,
2873
- imageUrl: '',
2874
- };
3011
+ set toolbarOptions(value) {
3012
+ this._toolbarOptions.set(value);
3013
+ }
3014
+ get toolbarOptions() {
3015
+ return this._toolbarOptions();
3016
+ }
3017
+ set overflowOptions(value) {
3018
+ this._overflowOptions.set(value);
3019
+ }
3020
+ get overflowOptions() {
3021
+ return this._overflowOptions();
3022
+ }
2875
3023
  /**
2876
3024
  * @hidden
2877
3025
  */
@@ -2880,22 +3028,59 @@ class ToolBarButtonComponent extends ToolBarToolComponent {
2880
3028
  * @hidden
2881
3029
  */
2882
3030
  showBadge = false;
3031
+ /**
3032
+ * @hidden
3033
+ */
3034
+ set location(value) {
3035
+ super.location = value;
3036
+ this.cdr.markForCheck();
3037
+ }
3038
+ /**
3039
+ * @hidden
3040
+ */
3041
+ get location() {
3042
+ return super.location;
3043
+ }
2883
3044
  toolbarButtonElement;
2884
3045
  sectionButtonElement;
2885
3046
  overflowButtonElement;
2886
- _showText;
2887
- _showIcon;
2888
- _text;
2889
- _icon;
2890
- _iconClass;
2891
- _svgIcon;
2892
- _imageUrl;
3047
+ _icon = signal(null, ...(ngDevMode ? [{ debugName: "_icon" }] : /* istanbul ignore next */ []));
3048
+ _iconClass = signal(null, ...(ngDevMode ? [{ debugName: "_iconClass" }] : /* istanbul ignore next */ []));
3049
+ _svgIcon = signal(null, ...(ngDevMode ? [{ debugName: "_svgIcon" }] : /* istanbul ignore next */ []));
3050
+ _imageUrl = signal(null, ...(ngDevMode ? [{ debugName: "_imageUrl" }] : /* istanbul ignore next */ []));
3051
+ _showText = signal(null, ...(ngDevMode ? [{ debugName: "_showText" }] : /* istanbul ignore next */ []));
3052
+ _showIcon = signal(null, ...(ngDevMode ? [{ debugName: "_showIcon" }] : /* istanbul ignore next */ []));
3053
+ _text = signal(null, ...(ngDevMode ? [{ debugName: "_text" }] : /* istanbul ignore next */ []));
3054
+ _style = signal(null, ...(ngDevMode ? [{ debugName: "_style" }] : /* istanbul ignore next */ []));
3055
+ _className = signal(null, ...(ngDevMode ? [{ debugName: "_className" }] : /* istanbul ignore next */ []));
3056
+ _title = signal(null, ...(ngDevMode ? [{ debugName: "_title" }] : /* istanbul ignore next */ []));
3057
+ _disabled = signal(false, ...(ngDevMode ? [{ debugName: "_disabled" }] : /* istanbul ignore next */ []));
3058
+ _toggleable = signal(false, ...(ngDevMode ? [{ debugName: "_toggleable" }] : /* istanbul ignore next */ []));
3059
+ _selected = signal(false, ...(ngDevMode ? [{ debugName: "_selected" }] : /* istanbul ignore next */ []));
3060
+ _fillMode = signal(undefined, ...(ngDevMode ? [{ debugName: "_fillMode" }] : /* istanbul ignore next */ []));
3061
+ _rounded = signal(undefined, ...(ngDevMode ? [{ debugName: "_rounded" }] : /* istanbul ignore next */ []));
3062
+ _themeColor = signal(undefined, ...(ngDevMode ? [{ debugName: "_themeColor" }] : /* istanbul ignore next */ []));
2893
3063
  propertyChangeSub;
2894
- constructor(element, zone, host) {
3064
+ _overflowOptions = signal({
3065
+ text: '',
3066
+ icon: '',
3067
+ iconClass: '',
3068
+ svgIcon: null,
3069
+ imageUrl: ''
3070
+ }, ...(ngDevMode ? [{ debugName: "_overflowOptions" }] : /* istanbul ignore next */ []));
3071
+ _toolbarOptions = signal({
3072
+ text: '',
3073
+ icon: '',
3074
+ iconClass: '',
3075
+ svgIcon: null,
3076
+ imageUrl: ''
3077
+ }, ...(ngDevMode ? [{ debugName: "_toolbarOptions" }] : /* istanbul ignore next */ []));
3078
+ constructor(element, injector, host, cdr) {
2895
3079
  super();
2896
3080
  this.element = element;
2897
- this.zone = zone;
3081
+ this.injector = injector;
2898
3082
  this.host = host;
3083
+ this.cdr = cdr;
2899
3084
  this.isBuiltInTool = true;
2900
3085
  this.propertyChangeSub = this.host.propertyChange.subscribe(change => {
2901
3086
  if (change.property === 'showText' || change.property === 'showIcon') {
@@ -2910,17 +3095,6 @@ class ToolBarButtonComponent extends ToolBarToolComponent {
2910
3095
  this.propertyChangeSub.unsubscribe();
2911
3096
  this.propertyChangeSub = null;
2912
3097
  }
2913
- ngOnChanges(changes) {
2914
- if (changes['rounded']) {
2915
- this.rounded = changes['rounded'].currentValue;
2916
- }
2917
- if (changes['themeColor']) {
2918
- this.themeColor = changes['themeColor'].currentValue;
2919
- }
2920
- if (changes['showText']) {
2921
- this.showText = changes['showText'].currentValue;
2922
- }
2923
- }
2924
3098
  /**
2925
3099
  * @hidden
2926
3100
  */
@@ -2975,22 +3149,22 @@ class ToolBarButtonComponent extends ToolBarToolComponent {
2975
3149
  }
2976
3150
  setTextDisplayMode() {
2977
3151
  this.toolbarOptions.text = this.showText === 'menu' || this.showText === 'never' ? undefined : this.text;
2978
- this.zone.onStable.pipe(take(1)).subscribe(() => {
3152
+ afterNextRender(() => {
2979
3153
  this.overflowOptions.text = this.showText === 'toolbar' || this.showText === 'never' ? undefined : this.text;
2980
- });
3154
+ }, { injector: this.injector });
2981
3155
  }
2982
3156
  setIconDisplayMode() {
2983
- this.toolbarOptions.icon = getValueForLocation(this._icon, this.showIcon, false);
2984
- this.overflowOptions.icon = getValueForLocation(this._icon, this.showIcon, true);
2985
- this.toolbarOptions.iconClass = getValueForLocation(this._iconClass, this.showIcon, false);
2986
- this.overflowOptions.iconClass = getValueForLocation(this._iconClass, this.showIcon, true);
2987
- this.toolbarOptions.svgIcon = getValueForLocation(this._svgIcon, this.showIcon, false);
2988
- this.overflowOptions.svgIcon = getValueForLocation(this._svgIcon, this.showIcon, true);
2989
- this.toolbarOptions.imageUrl = getValueForLocation(this._imageUrl, this.showIcon, false);
2990
- this.overflowOptions.imageUrl = getValueForLocation(this._imageUrl, this.showIcon, true);
2991
- }
2992
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: ToolBarButtonComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: ToolBarComponent }], target: i0.ɵɵFactoryTarget.Component });
2993
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.23", type: ToolBarButtonComponent, isStandalone: true, selector: "kendo-toolbar-button", inputs: { showText: "showText", showIcon: "showIcon", text: "text", style: "style", className: "className", title: "title", disabled: "disabled", toggleable: "toggleable", look: "look", togglable: "togglable", selected: "selected", fillMode: "fillMode", rounded: "rounded", themeColor: "themeColor", icon: "icon", iconClass: "iconClass", svgIcon: "svgIcon", imageUrl: "imageUrl" }, outputs: { click: "click", pointerdown: "pointerdown", selectedChange: "selectedChange" }, providers: [{ provide: ToolBarToolComponent, useExisting: forwardRef(() => ToolBarButtonComponent) }], viewQueries: [{ propertyName: "toolbarButtonElement", first: true, predicate: ["toolbarButton"], descendants: true, read: ElementRef }, { propertyName: "sectionButtonElement", first: true, predicate: ["sectionButton"], descendants: true, read: ElementRef }, { propertyName: "overflowButtonElement", first: true, predicate: ["overflowButton"], descendants: true, read: ElementRef }], exportAs: ["kendoToolBarButton"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
3157
+ this.toolbarOptions.icon = getValueForLocation(this._icon(), this.showIcon, false);
3158
+ this.overflowOptions.icon = getValueForLocation(this._icon(), this.showIcon, true);
3159
+ this.toolbarOptions.iconClass = getValueForLocation(this._iconClass(), this.showIcon, false);
3160
+ this.overflowOptions.iconClass = getValueForLocation(this._iconClass(), this.showIcon, true);
3161
+ this.toolbarOptions.svgIcon = getValueForLocation(this._svgIcon(), this.showIcon, false);
3162
+ this.overflowOptions.svgIcon = getValueForLocation(this._svgIcon(), this.showIcon, true);
3163
+ this.toolbarOptions.imageUrl = getValueForLocation(this._imageUrl(), this.showIcon, false);
3164
+ this.overflowOptions.imageUrl = getValueForLocation(this._imageUrl(), this.showIcon, true);
3165
+ }
3166
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: ToolBarButtonComponent, deps: [{ token: i0.ElementRef }, { token: i0.Injector }, { token: ToolBarComponent }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
3167
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.23", type: ToolBarButtonComponent, isStandalone: true, selector: "kendo-toolbar-button", inputs: { showText: "showText", showIcon: "showIcon", text: "text", style: "style", className: "className", title: "title", disabled: "disabled", toggleable: "toggleable", look: "look", togglable: "togglable", selected: "selected", fillMode: "fillMode", rounded: "rounded", themeColor: "themeColor", icon: "icon", iconClass: "iconClass", svgIcon: "svgIcon", imageUrl: "imageUrl" }, outputs: { click: "click", pointerdown: "pointerdown", selectedChange: "selectedChange" }, providers: [{ provide: ToolBarToolComponent, useExisting: forwardRef(() => ToolBarButtonComponent) }], viewQueries: [{ propertyName: "toolbarButtonElement", first: true, predicate: ["toolbarButton"], descendants: true, read: ElementRef }, { propertyName: "sectionButtonElement", first: true, predicate: ["sectionButton"], descendants: true, read: ElementRef }, { propertyName: "overflowButtonElement", first: true, predicate: ["overflowButton"], descendants: true, read: ElementRef }], exportAs: ["kendoToolBarButton"], usesInheritance: true, ngImport: i0, template: `
2994
3168
  <ng-template #toolbarTemplate>
2995
3169
  @if (hasBadgeContainer) {
2996
3170
  <kendo-badge-container>
@@ -3162,7 +3336,7 @@ class ToolBarButtonComponent extends ToolBarToolComponent {
3162
3336
  </button>
3163
3337
  }
3164
3338
  </ng-template>
3165
- `, isInline: true, dependencies: [{ kind: "component", type: ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "component", type: BadgeComponent, selector: "kendo-badge", inputs: ["align", "size", "fill", "themeColor", "rounded", "position", "cutoutBorder"] }, { kind: "component", type: BadgeContainerComponent, selector: "kendo-badge-container" }] });
3339
+ `, isInline: true, dependencies: [{ kind: "component", type: ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "component", type: BadgeComponent, selector: "kendo-badge", inputs: ["align", "size", "fill", "themeColor", "rounded", "position", "cutoutBorder"] }, { kind: "component", type: BadgeContainerComponent, selector: "kendo-badge-container" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3166
3340
  }
3167
3341
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: ToolBarButtonComponent, decorators: [{
3168
3342
  type: Component,
@@ -3344,9 +3518,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImpo
3344
3518
  </ng-template>
3345
3519
  `,
3346
3520
  standalone: true,
3521
+ changeDetection: ChangeDetectionStrategy.OnPush,
3347
3522
  imports: [ButtonComponent, NgStyle, NgClass, IconWrapperComponent, BadgeComponent, BadgeContainerComponent],
3348
3523
  }]
3349
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: ToolBarComponent }], propDecorators: { showText: [{
3524
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Injector }, { type: ToolBarComponent }, { type: i0.ChangeDetectorRef }], propDecorators: { showText: [{
3350
3525
  type: Input
3351
3526
  }], showIcon: [{
3352
3527
  type: Input
@@ -3421,28 +3596,49 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImpo
3421
3596
  class ToolBarButtonGroupComponent extends ToolBarToolComponent {
3422
3597
  localization;
3423
3598
  host;
3599
+ cdr;
3424
3600
  /**
3425
3601
  * When `true`, disables the whole group of buttons.
3426
3602
  * If you set the `disabled` property of the group, it overrides the `disabled` property of individual buttons.
3427
3603
  */
3428
- disabled;
3604
+ set disabled(value) {
3605
+ this._disabled.set(value);
3606
+ }
3607
+ get disabled() {
3608
+ return this._disabled();
3609
+ }
3429
3610
  /**
3430
3611
  * @hidden
3431
3612
  *
3432
3613
  * Used to set different fillmode in Spreadsheet and Toolbar to comply with referent rendering.
3433
3614
  * @default undefined
3434
3615
  */
3435
- fillMode = undefined;
3616
+ set fillMode(value) {
3617
+ this._fillMode.set(value);
3618
+ }
3619
+ get fillMode() {
3620
+ return this._fillMode();
3621
+ }
3436
3622
  /**
3437
3623
  * Sets the selection mode of the ButtonGroup.
3438
3624
  * @default 'multiple'
3439
3625
  */
3440
- selection = 'multiple';
3626
+ set selection(value) {
3627
+ this._selection.set(value);
3628
+ }
3629
+ get selection() {
3630
+ return this._selection();
3631
+ }
3441
3632
  /**
3442
3633
  * Sets the width of the ButtonGroup.
3443
3634
  * When you set the width of the ButtonGroup, the buttons have the same width and resize to fill the group wrapper.
3444
3635
  */
3445
- width;
3636
+ set width(value) {
3637
+ this._width.set(value);
3638
+ }
3639
+ get width() {
3640
+ return this._width();
3641
+ }
3446
3642
  /**
3447
3643
  * @hidden
3448
3644
  */
@@ -3455,6 +3651,19 @@ class ToolBarButtonGroupComponent extends ToolBarToolComponent {
3455
3651
  sectionButtonGroup;
3456
3652
  overflowListItems;
3457
3653
  buttonComponents;
3654
+ /**
3655
+ * @hidden
3656
+ */
3657
+ set location(value) {
3658
+ super.location = value;
3659
+ this.cdr.markForCheck();
3660
+ }
3661
+ /**
3662
+ * @hidden
3663
+ */
3664
+ get location() {
3665
+ return super.location;
3666
+ }
3458
3667
  get buttonElements() {
3459
3668
  if (this.overflows && this.location === 'overflow') {
3460
3669
  return [...this.overflowListItems.toArray().filter(el => !el.nativeElement.classList.contains('k-disabled'))].map(el => el.nativeElement);
@@ -3470,13 +3679,18 @@ class ToolBarButtonGroupComponent extends ToolBarToolComponent {
3470
3679
  .map(b => b.element);
3471
3680
  }
3472
3681
  }
3473
- focusedIndex = -1;
3682
+ _disabled = signal(undefined, ...(ngDevMode ? [{ debugName: "_disabled" }] : /* istanbul ignore next */ []));
3683
+ _fillMode = signal(undefined, ...(ngDevMode ? [{ debugName: "_fillMode" }] : /* istanbul ignore next */ []));
3684
+ _selection = signal('multiple', ...(ngDevMode ? [{ debugName: "_selection" }] : /* istanbul ignore next */ []));
3685
+ _width = signal(undefined, ...(ngDevMode ? [{ debugName: "_width" }] : /* istanbul ignore next */ []));
3686
+ focusedIndex = signal(-1, ...(ngDevMode ? [{ debugName: "focusedIndex" }] : /* istanbul ignore next */ []));
3474
3687
  getNextKey;
3475
3688
  getPrevKey;
3476
- constructor(localization, host) {
3689
+ constructor(localization, host, cdr) {
3477
3690
  super();
3478
3691
  this.localization = localization;
3479
3692
  this.host = host;
3693
+ this.cdr = cdr;
3480
3694
  this.getNextKey = getNextKey(this.localization.rtl);
3481
3695
  this.getPrevKey = getPrevKey(this.localization.rtl);
3482
3696
  this.isBuiltInTool = true;
@@ -3486,7 +3700,7 @@ class ToolBarButtonGroupComponent extends ToolBarToolComponent {
3486
3700
  */
3487
3701
  onFocus() {
3488
3702
  // triggered on tabin
3489
- this.focusedIndex = 0;
3703
+ this.focusedIndex.set(0);
3490
3704
  }
3491
3705
  /**
3492
3706
  * @hidden
@@ -3522,8 +3736,8 @@ class ToolBarButtonGroupComponent extends ToolBarToolComponent {
3522
3736
  * @hidden
3523
3737
  */
3524
3738
  onButtonClick(ev) {
3525
- this.focusedIndex = this.buttonElements.findIndex(be => be === ev.target || be.contains(ev.target));
3526
- this.focusButton(this.focusedIndex, ev);
3739
+ this.focusedIndex.set(this.buttonElements.findIndex(be => be === ev.target || be.contains(ev.target)));
3740
+ this.focusButton(this.focusedIndex(), ev);
3527
3741
  }
3528
3742
  /**
3529
3743
  * @hidden
@@ -3537,8 +3751,8 @@ class ToolBarButtonGroupComponent extends ToolBarToolComponent {
3537
3751
  focus(ev = {}) {
3538
3752
  const nextKey = this.getNextKey((this.overflows && this.location === 'overflow'));
3539
3753
  const prevKey = this.getPrevKey((this.overflows && this.location === 'overflow'));
3540
- this.focusedIndex = getIndexOfFocused(prevKey, nextKey, this.buttonElements)(ev);
3541
- this.focusButton(this.focusedIndex, ev);
3754
+ this.focusedIndex.set(getIndexOfFocused(prevKey, nextKey, this.buttonElements)(ev));
3755
+ this.focusButton(this.focusedIndex(), ev);
3542
3756
  }
3543
3757
  /**
3544
3758
  * @hidden
@@ -3547,10 +3761,10 @@ class ToolBarButtonGroupComponent extends ToolBarToolComponent {
3547
3761
  const nextKey = this.getNextKey((this.overflows && this.location === 'overflow'));
3548
3762
  const prevKey = this.getPrevKey((this.overflows && this.location === 'overflow'));
3549
3763
  const peekAtIndex = makePeeker(this.buttonElements);
3550
- const isUnmodified = areEqual(this.focusedIndex);
3551
- this.focusedIndex = seekFocusedIndex(prevKey, nextKey, peekAtIndex)(this.focusedIndex, ev);
3552
- this.focusButton(this.focusedIndex, ev);
3553
- return !isUnmodified(this.focusedIndex);
3764
+ const isUnmodified = areEqual(this.focusedIndex());
3765
+ this.focusedIndex.set(seekFocusedIndex(prevKey, nextKey, peekAtIndex)(this.focusedIndex(), ev));
3766
+ this.focusButton(this.focusedIndex(), ev);
3767
+ return !isUnmodified(this.focusedIndex());
3554
3768
  }
3555
3769
  /**
3556
3770
  * @hidden
@@ -3586,7 +3800,7 @@ class ToolBarButtonGroupComponent extends ToolBarToolComponent {
3586
3800
  this.buttonElements[index]?.focus();
3587
3801
  }
3588
3802
  }
3589
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: ToolBarButtonGroupComponent, deps: [{ token: i1.LocalizationService }, { token: ToolBarComponent }], target: i0.ɵɵFactoryTarget.Component });
3803
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: ToolBarButtonGroupComponent, deps: [{ token: i1.LocalizationService }, { token: ToolBarComponent }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
3590
3804
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.23", type: ToolBarButtonGroupComponent, isStandalone: true, selector: "kendo-toolbar-buttongroup", inputs: { disabled: "disabled", fillMode: "fillMode", selection: "selection", width: "width", look: "look" }, providers: [LocalizationService, { provide: ToolBarToolComponent, useExisting: forwardRef(() => ToolBarButtonGroupComponent) }], queries: [{ propertyName: "buttonComponents", predicate: i0.forwardRef(() => ToolBarButtonComponent) }], viewQueries: [{ propertyName: "toolbarButtonGroup", first: true, predicate: ["toolbarButtonGroup"], descendants: true }, { propertyName: "sectionButtonGroup", first: true, predicate: ["sectionButtonGroup"], descendants: true }, { propertyName: "overflowListItems", predicate: ["listItem"], descendants: true }], exportAs: ["kendoToolBarButtonGroup"], usesInheritance: true, ngImport: i0, template: `
3591
3805
  <ng-template #toolbarTemplate>
3592
3806
  <kendo-buttongroup
@@ -3697,7 +3911,7 @@ class ToolBarButtonGroupComponent extends ToolBarToolComponent {
3697
3911
  }
3698
3912
  </kendo-buttongroup>
3699
3913
  </ng-template>
3700
- `, isInline: true, dependencies: [{ kind: "component", type: ButtonGroupComponent, selector: "kendo-buttongroup", inputs: ["disabled", "selection", "width", "tabIndex", "navigable"], outputs: ["navigate"], exportAs: ["kendoButtonGroup"] }, { kind: "component", type: ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }] });
3914
+ `, isInline: true, dependencies: [{ kind: "component", type: ButtonGroupComponent, selector: "kendo-buttongroup", inputs: ["disabled", "selection", "width", "tabIndex", "navigable"], outputs: ["navigate"], exportAs: ["kendoButtonGroup"] }, { kind: "component", type: ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3701
3915
  }
3702
3916
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: ToolBarButtonGroupComponent, decorators: [{
3703
3917
  type: Component,
@@ -3817,9 +4031,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImpo
3817
4031
  </ng-template>
3818
4032
  `,
3819
4033
  standalone: true,
4034
+ changeDetection: ChangeDetectionStrategy.OnPush,
3820
4035
  imports: [ButtonGroupComponent, ButtonComponent, NgStyle, NgClass, IconWrapperComponent]
3821
4036
  }]
3822
- }], ctorParameters: () => [{ type: i1.LocalizationService }, { type: ToolBarComponent }], propDecorators: { disabled: [{
4037
+ }], ctorParameters: () => [{ type: i1.LocalizationService }, { type: ToolBarComponent }, { type: i0.ChangeDetectorRef }], propDecorators: { disabled: [{
3823
4038
  type: Input
3824
4039
  }], fillMode: [{
3825
4040
  type: Input
@@ -3858,14 +4073,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImpo
3858
4073
  *
3859
4074
  */
3860
4075
  class ToolBarDropDownButtonComponent extends ToolBarToolComponent {
3861
- zone;
3862
- renderer;
3863
4076
  host;
4077
+ cdr;
3864
4078
  /**
3865
4079
  * Shows the default arrow icon or lets you provide a custom one.
3866
4080
  * @default false
3867
4081
  */
3868
- arrowIcon = false;
4082
+ set arrowIcon(value) {
4083
+ this._arrowIcon.set(value);
4084
+ }
4085
+ get arrowIcon() {
4086
+ return this._arrowIcon();
4087
+ }
3869
4088
  /**
3870
4089
  * Sets the `title` attribute of the underlying button element.
3871
4090
  * @default ''
@@ -3873,46 +4092,51 @@ class ToolBarDropDownButtonComponent extends ToolBarToolComponent {
3873
4092
  * @remarks
3874
4093
  * This property is related to accessibility.
3875
4094
  */
3876
- title = '';
4095
+ set title(value) {
4096
+ this._title.set(value);
4097
+ }
4098
+ get title() {
4099
+ return this._title();
4100
+ }
3877
4101
  // showText and showIcon showIcon should be declared first
3878
4102
  /**
3879
4103
  * Controls the button text visibility.
3880
4104
  * @default 'always'
3881
4105
  */
3882
4106
  set showText(value) {
3883
- this._showText = value;
4107
+ this._showText.set(value);
3884
4108
  this.setTextDisplayMode();
3885
4109
  }
3886
4110
  get showText() {
3887
- return this._showText;
4111
+ return this._showText();
3888
4112
  }
3889
4113
  /**
3890
4114
  * Controls the button icon visibility.
3891
4115
  * @default 'always'
3892
4116
  */
3893
4117
  set showIcon(value) {
3894
- this._showIcon = value;
4118
+ this._showIcon.set(value);
3895
4119
  this.setIconDisplayMode();
3896
4120
  }
3897
4121
  get showIcon() {
3898
- return this._showIcon;
4122
+ return this._showIcon();
3899
4123
  }
3900
4124
  /**
3901
4125
  * Sets the text of the DropDownButton
3902
4126
  * ([see example](https://www.telerik.com/kendo-angular-ui/components/toolbar/control-types#drop-down-buttons)).
3903
4127
  */
3904
4128
  set text(text) {
3905
- this._text = text;
4129
+ this._text.set(text);
3906
4130
  this.setTextDisplayMode();
3907
4131
  }
3908
4132
  get text() {
3909
- return this._text;
4133
+ return this._text();
3910
4134
  }
3911
4135
  /**
3912
4136
  * Sets the icon rendered next to the button text.
3913
4137
  */
3914
4138
  set icon(icon) {
3915
- this._icon = icon;
4139
+ this._icon.set(icon);
3916
4140
  this.setIconDisplayMode();
3917
4141
  }
3918
4142
  /**
@@ -3920,29 +4144,29 @@ class ToolBarDropDownButtonComponent extends ToolBarToolComponent {
3920
4144
  * Accepts an [existing Kendo SVG icon](https://www.telerik.com/kendo-angular-ui/components/icons/svgicon/svgicon-list) or a custom one.
3921
4145
  */
3922
4146
  set svgIcon(icon) {
3923
- const isIconSet = this._icon;
3924
- const isIconClassSet = this._iconClass;
4147
+ const isIconSet = this._icon();
4148
+ const isIconClassSet = this._iconClass();
3925
4149
  if (isDevMode() &&
3926
4150
  icon &&
3927
4151
  isIconSet &&
3928
4152
  isIconClassSet) {
3929
4153
  throw new Error('Setting both icon/svgIcon and iconClass options at the same time is not supported.');
3930
4154
  }
3931
- this._svgIcon = icon;
4155
+ this._svgIcon.set(icon);
3932
4156
  this.setIconDisplayMode();
3933
4157
  }
3934
4158
  /**
3935
4159
  * Sets a custom CSS class icon rendered next to the button text.
3936
4160
  */
3937
4161
  set iconClass(iconClass) {
3938
- this._iconClass = iconClass;
4162
+ this._iconClass.set(iconClass);
3939
4163
  this.setIconDisplayMode();
3940
4164
  }
3941
4165
  /**
3942
4166
  * Sets a URL for the image displayed next to the button text.
3943
4167
  */
3944
4168
  set imageUrl(imageUrl) {
3945
- this._imageUrl = imageUrl;
4169
+ this._imageUrl.set(imageUrl);
3946
4170
  this.setIconDisplayMode();
3947
4171
  }
3948
4172
  /**
@@ -3950,10 +4174,10 @@ class ToolBarDropDownButtonComponent extends ToolBarToolComponent {
3950
4174
  * Accepts a `PopupSettings` object that allows you to customize the popup behavior and appearance.
3951
4175
  */
3952
4176
  set popupSettings(settings) {
3953
- this._popupSettings = Object.assign({ animate: true, popupClass: '' }, settings);
4177
+ this._popupSettings.set(Object.assign({ animate: true, popupClass: '' }, settings));
3954
4178
  }
3955
4179
  get popupSettings() {
3956
- return this._popupSettings;
4180
+ return this._popupSettings();
3957
4181
  }
3958
4182
  /**
3959
4183
  * @hidden
@@ -3973,27 +4197,52 @@ class ToolBarDropDownButtonComponent extends ToolBarToolComponent {
3973
4197
  * Sets the fill mode for the button.
3974
4198
  * The fill mode represents the background and border styles. The default value is set by the Kendo theme.
3975
4199
  */
3976
- fillMode = undefined;
4200
+ set fillMode(value) {
4201
+ this._fillMode.set(value);
4202
+ }
4203
+ get fillMode() {
4204
+ return this._fillMode();
4205
+ }
3977
4206
  /**
3978
4207
  * Sets the predefined theme color for the button.
3979
4208
  * The theme color applies to the background, border, and text
3980
4209
  * ([see example](https://www.telerik.com/kendo-angular-ui/components/buttons/api/dropdownbuttoncomponent#themecolor)). The default value is set by the Kendo theme.
3981
4210
  */
3982
- themeColor = undefined;
4211
+ set themeColor(value) {
4212
+ this._themeColor.set(value);
4213
+ }
4214
+ get themeColor() {
4215
+ return this._themeColor();
4216
+ }
3983
4217
  /**
3984
4218
  * Sets the CSS classes for the main button.
3985
4219
  * Accepts values supported by [`ngClass`](link:site.data.urls.angular['ngclassapi']).
3986
4220
  */
3987
- buttonClass;
4221
+ set buttonClass(value) {
4222
+ this._buttonClass.set(value);
4223
+ }
4224
+ get buttonClass() {
4225
+ return this._buttonClass();
4226
+ }
3988
4227
  /**
3989
4228
  * Sets the data item field that repesents the item text.
3990
4229
  * If the data contains only primitive values, do not set this property.
3991
4230
  */
3992
- textField;
4231
+ set textField(value) {
4232
+ this._textField.set(value);
4233
+ }
4234
+ get textField() {
4235
+ return this._textField();
4236
+ }
3993
4237
  /**
3994
4238
  * When `true`, disables the DropDownButton.
3995
4239
  */
3996
- disabled;
4240
+ set disabled(value) {
4241
+ this._disabled.set(value);
4242
+ }
4243
+ get disabled() {
4244
+ return this._disabled();
4245
+ }
3997
4246
  /**
3998
4247
  * Sets the data of the DropDownButton
3999
4248
  * ([see example](https://www.telerik.com/kendo-angular-ui/components/toolbar/control-types#drop-down-buttons)).
@@ -4001,13 +4250,10 @@ class ToolBarDropDownButtonComponent extends ToolBarToolComponent {
4001
4250
  * > Provide the data as an array-like list.
4002
4251
  */
4003
4252
  set data(data) {
4004
- this._data = data || [];
4253
+ this._data.set(data || []);
4005
4254
  }
4006
4255
  get data() {
4007
- if (!this._data) {
4008
- this.data = [];
4009
- }
4010
- return this._data;
4256
+ return this._data();
4011
4257
  }
4012
4258
  /**
4013
4259
  * Fires each time the user clicks a DropDownButton item.
@@ -4045,24 +4291,43 @@ class ToolBarDropDownButtonComponent extends ToolBarToolComponent {
4045
4291
  get overflowButtons() {
4046
4292
  return [...this.overflowListItems.toArray().filter(el => !el.nativeElement.classList.contains('k-disabled'))];
4047
4293
  }
4048
- _data;
4049
- _popupSettings = { animate: true, popupClass: '' };
4050
- focusedIndex = -1;
4051
- _showText;
4052
- _showIcon;
4053
- _text;
4054
- _icon;
4055
- _iconClass;
4056
- _svgIcon;
4057
- _imageUrl;
4294
+ /**
4295
+ * @hidden
4296
+ */
4297
+ set location(value) {
4298
+ super.location = value;
4299
+ this.cdr.markForCheck();
4300
+ }
4301
+ /**
4302
+ * @hidden
4303
+ */
4304
+ get location() {
4305
+ return super.location;
4306
+ }
4307
+ _data = signal([], ...(ngDevMode ? [{ debugName: "_data" }] : /* istanbul ignore next */ []));
4308
+ _popupSettings = signal({ animate: true, popupClass: '' }, ...(ngDevMode ? [{ debugName: "_popupSettings" }] : /* istanbul ignore next */ []));
4309
+ focusedIndex = signal(-1, ...(ngDevMode ? [{ debugName: "focusedIndex" }] : /* istanbul ignore next */ []));
4310
+ _showText = signal(null, ...(ngDevMode ? [{ debugName: "_showText" }] : /* istanbul ignore next */ []));
4311
+ _showIcon = signal(null, ...(ngDevMode ? [{ debugName: "_showIcon" }] : /* istanbul ignore next */ []));
4312
+ _text = signal(null, ...(ngDevMode ? [{ debugName: "_text" }] : /* istanbul ignore next */ []));
4313
+ _arrowIcon = signal(false, ...(ngDevMode ? [{ debugName: "_arrowIcon" }] : /* istanbul ignore next */ []));
4314
+ _title = signal('', ...(ngDevMode ? [{ debugName: "_title" }] : /* istanbul ignore next */ []));
4315
+ _fillMode = signal(undefined, ...(ngDevMode ? [{ debugName: "_fillMode" }] : /* istanbul ignore next */ []));
4316
+ _themeColor = signal(undefined, ...(ngDevMode ? [{ debugName: "_themeColor" }] : /* istanbul ignore next */ []));
4317
+ _buttonClass = signal(undefined, ...(ngDevMode ? [{ debugName: "_buttonClass" }] : /* istanbul ignore next */ []));
4318
+ _textField = signal(undefined, ...(ngDevMode ? [{ debugName: "_textField" }] : /* istanbul ignore next */ []));
4319
+ _disabled = signal(undefined, ...(ngDevMode ? [{ debugName: "_disabled" }] : /* istanbul ignore next */ []));
4320
+ _icon = signal(null, ...(ngDevMode ? [{ debugName: "_icon" }] : /* istanbul ignore next */ []));
4321
+ _iconClass = signal(null, ...(ngDevMode ? [{ debugName: "_iconClass" }] : /* istanbul ignore next */ []));
4322
+ _svgIcon = signal(null, ...(ngDevMode ? [{ debugName: "_svgIcon" }] : /* istanbul ignore next */ []));
4323
+ _imageUrl = signal(null, ...(ngDevMode ? [{ debugName: "_imageUrl" }] : /* istanbul ignore next */ []));
4058
4324
  propertyChangeSub;
4059
4325
  getNextKey;
4060
4326
  getPrevKey;
4061
- constructor(zone, renderer, host) {
4327
+ constructor(host, cdr) {
4062
4328
  super();
4063
- this.zone = zone;
4064
- this.renderer = renderer;
4065
4329
  this.host = host;
4330
+ this.cdr = cdr;
4066
4331
  this.getNextKey = getNextKey();
4067
4332
  this.getPrevKey = getPrevKey();
4068
4333
  this.isBuiltInTool = true;
@@ -4081,21 +4346,16 @@ class ToolBarDropDownButtonComponent extends ToolBarToolComponent {
4081
4346
  this.propertyChangeSub = null;
4082
4347
  }
4083
4348
  }
4084
- ngAfterViewInit() {
4085
- this.zone.onStable.pipe(take(1)).subscribe(() => {
4086
- const dropdownButton = this[`${this.location}DropDownButton`];
4087
- if (dropdownButton?.button) {
4088
- this.renderer.addClass(dropdownButton.button.nativeElement, 'k-toolbar-menu-button');
4089
- }
4090
- });
4349
+ get toolbarMenuButtonClass() {
4350
+ return this.buttonClass ? `k-toolbar-menu-button ${this.buttonClass}` : 'k-toolbar-menu-button';
4091
4351
  }
4092
4352
  /**
4093
4353
  * @hidden
4094
4354
  */
4095
4355
  onButtonListClick(ev) {
4096
- this.focusedIndex = this.overflowListItems
4356
+ this.focusedIndex.set(this.overflowListItems
4097
4357
  .toArray()
4098
- .findIndex(b => b.nativeElement.contains(ev.target));
4358
+ .findIndex(b => b.nativeElement.contains(ev.target)));
4099
4359
  }
4100
4360
  /**
4101
4361
  * @hidden
@@ -4119,8 +4379,8 @@ class ToolBarDropDownButtonComponent extends ToolBarToolComponent {
4119
4379
  }
4120
4380
  }
4121
4381
  else if (this.overflowButtons.length > 0) {
4122
- this.focusedIndex = getIndexOfFocused(this.getPrevKey(), this.getNextKey(), this.overflowButtons.map(ob => ob.nativeElement))(ev);
4123
- this.focusButton(this.focusedIndex, ev);
4382
+ this.focusedIndex.set(getIndexOfFocused(this.getPrevKey(), this.getNextKey(), this.overflowButtons.map(ob => ob.nativeElement))(ev));
4383
+ this.focusButton(this.focusedIndex(), ev);
4124
4384
  }
4125
4385
  }
4126
4386
  /**
@@ -4133,10 +4393,10 @@ class ToolBarDropDownButtonComponent extends ToolBarToolComponent {
4133
4393
  }
4134
4394
  if (this.overflows && this.location !== 'section') {
4135
4395
  const peekAtIndex = makePeeker(this.overflowButtons);
4136
- const isUnmodified = areEqual(this.focusedIndex);
4137
- this.focusedIndex = seekFocusedIndex(this.getPrevKey(), this.getNextKey(), peekAtIndex)(this.focusedIndex, ev);
4138
- this.focusButton(this.focusedIndex, ev);
4139
- return !isUnmodified(this.focusedIndex);
4396
+ const isUnmodified = areEqual(this.focusedIndex());
4397
+ this.focusedIndex.set(seekFocusedIndex(this.getPrevKey(), this.getNextKey(), peekAtIndex)(this.focusedIndex(), ev));
4398
+ this.focusButton(this.focusedIndex(), ev);
4399
+ return !isUnmodified(this.focusedIndex());
4140
4400
  }
4141
4401
  }
4142
4402
  /**
@@ -4168,16 +4428,16 @@ class ToolBarDropDownButtonComponent extends ToolBarToolComponent {
4168
4428
  this.overflowOptions.text = this.showText === 'toolbar' || this.showText === 'never' ? undefined : this.text;
4169
4429
  }
4170
4430
  setIconDisplayMode() {
4171
- this.toolbarOptions.icon = getValueForLocation(this._icon, this.showIcon, false);
4172
- this.overflowOptions.icon = getValueForLocation(this._icon, this.showIcon, true);
4173
- this.toolbarOptions.iconClass = getValueForLocation(this._iconClass, this.showIcon, false);
4174
- this.overflowOptions.iconClass = getValueForLocation(this._iconClass, this.showIcon, true);
4175
- this.toolbarOptions.svgIcon = getValueForLocation(this._svgIcon, this.showIcon, false);
4176
- this.overflowOptions.svgIcon = getValueForLocation(this._svgIcon, this.showIcon, true);
4177
- this.toolbarOptions.imageUrl = getValueForLocation(this._imageUrl, this.showIcon, false);
4178
- this.overflowOptions.imageUrl = getValueForLocation(this._imageUrl, this.showIcon, true);
4179
- }
4180
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: ToolBarDropDownButtonComponent, deps: [{ token: i0.NgZone }, { token: i0.Renderer2 }, { token: ToolBarComponent }], target: i0.ɵɵFactoryTarget.Component });
4431
+ this.toolbarOptions.icon = getValueForLocation(this._icon(), this.showIcon, false);
4432
+ this.overflowOptions.icon = getValueForLocation(this._icon(), this.showIcon, true);
4433
+ this.toolbarOptions.iconClass = getValueForLocation(this._iconClass(), this.showIcon, false);
4434
+ this.overflowOptions.iconClass = getValueForLocation(this._iconClass(), this.showIcon, true);
4435
+ this.toolbarOptions.svgIcon = getValueForLocation(this._svgIcon(), this.showIcon, false);
4436
+ this.overflowOptions.svgIcon = getValueForLocation(this._svgIcon(), this.showIcon, true);
4437
+ this.toolbarOptions.imageUrl = getValueForLocation(this._imageUrl(), this.showIcon, false);
4438
+ this.overflowOptions.imageUrl = getValueForLocation(this._imageUrl(), this.showIcon, true);
4439
+ }
4440
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: ToolBarDropDownButtonComponent, deps: [{ token: ToolBarComponent }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
4181
4441
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.23", type: ToolBarDropDownButtonComponent, isStandalone: true, selector: "kendo-toolbar-dropdownbutton", inputs: { arrowIcon: "arrowIcon", title: "title", showText: "showText", showIcon: "showIcon", text: "text", icon: "icon", svgIcon: "svgIcon", iconClass: "iconClass", imageUrl: "imageUrl", popupSettings: "popupSettings", look: "look", primary: "primary", fillMode: "fillMode", themeColor: "themeColor", buttonClass: "buttonClass", textField: "textField", disabled: "disabled", data: "data" }, outputs: { itemClick: "itemClick", open: "open", close: "close" }, providers: [{ provide: ToolBarToolComponent, useExisting: forwardRef(() => ToolBarDropDownButtonComponent) }], viewQueries: [{ propertyName: "dropdownButton", first: true, predicate: ["dropdownButton"], descendants: true, read: ElementRef, static: true }, { propertyName: "toolbarDropDownButton", first: true, predicate: ["toolbarDropDownButton"], descendants: true }, { propertyName: "sectionDropDownButton", first: true, predicate: ["sectionDropDownButton"], descendants: true }, { propertyName: "overflowListItems", predicate: ["listItem"], descendants: true }], exportAs: ["kendoToolBarDropDownButton"], usesInheritance: true, ngImport: i0, template: `
4182
4442
  <ng-template #toolbarTemplate>
4183
4443
  <kendo-dropdownbutton #toolbarDropDownButton
@@ -4186,7 +4446,7 @@ class ToolBarDropDownButtonComponent extends ToolBarToolComponent {
4186
4446
  [svgIcon]="toolbarOptions.svgIcon"
4187
4447
  [imageUrl]="toolbarOptions.imageUrl"
4188
4448
  [arrowIcon]="arrowIcon"
4189
- [buttonClass]="buttonClass"
4449
+ [buttonClass]="toolbarMenuButtonClass"
4190
4450
  [disabled]="disabled"
4191
4451
  [size]="size"
4192
4452
  [tabIndex]="-1"
@@ -4258,7 +4518,7 @@ class ToolBarDropDownButtonComponent extends ToolBarToolComponent {
4258
4518
  [svgIcon]="toolbarOptions.svgIcon"
4259
4519
  [imageUrl]="toolbarOptions.imageUrl"
4260
4520
  [arrowIcon]="arrowIcon"
4261
- [buttonClass]="buttonClass"
4521
+ [buttonClass]="toolbarMenuButtonClass"
4262
4522
  [disabled]="disabled"
4263
4523
  [size]="size"
4264
4524
  [tabIndex]="-1"
@@ -4275,7 +4535,7 @@ class ToolBarDropDownButtonComponent extends ToolBarToolComponent {
4275
4535
  {{ toolbarOptions.text }}
4276
4536
  </kendo-dropdownbutton>
4277
4537
  </ng-template>
4278
- `, isInline: true, dependencies: [{ kind: "component", type: DropDownButtonComponent, selector: "kendo-dropdownbutton", inputs: ["arrowIcon", "icon", "svgIcon", "iconClass", "imageUrl", "textField", "data", "size", "rounded", "fillMode", "themeColor", "buttonAttributes"], outputs: ["itemClick", "focus", "blur"], exportAs: ["kendoDropDownButton"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }] });
4538
+ `, isInline: true, dependencies: [{ kind: "component", type: DropDownButtonComponent, selector: "kendo-dropdownbutton", inputs: ["arrowIcon", "icon", "svgIcon", "iconClass", "imageUrl", "textField", "data", "size", "rounded", "fillMode", "themeColor", "buttonAttributes"], outputs: ["itemClick", "focus", "blur"], exportAs: ["kendoDropDownButton"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4279
4539
  }
4280
4540
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: ToolBarDropDownButtonComponent, decorators: [{
4281
4541
  type: Component,
@@ -4291,7 +4551,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImpo
4291
4551
  [svgIcon]="toolbarOptions.svgIcon"
4292
4552
  [imageUrl]="toolbarOptions.imageUrl"
4293
4553
  [arrowIcon]="arrowIcon"
4294
- [buttonClass]="buttonClass"
4554
+ [buttonClass]="toolbarMenuButtonClass"
4295
4555
  [disabled]="disabled"
4296
4556
  [size]="size"
4297
4557
  [tabIndex]="-1"
@@ -4363,7 +4623,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImpo
4363
4623
  [svgIcon]="toolbarOptions.svgIcon"
4364
4624
  [imageUrl]="toolbarOptions.imageUrl"
4365
4625
  [arrowIcon]="arrowIcon"
4366
- [buttonClass]="buttonClass"
4626
+ [buttonClass]="toolbarMenuButtonClass"
4367
4627
  [disabled]="disabled"
4368
4628
  [size]="size"
4369
4629
  [tabIndex]="-1"
@@ -4382,9 +4642,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImpo
4382
4642
  </ng-template>
4383
4643
  `,
4384
4644
  standalone: true,
4645
+ changeDetection: ChangeDetectionStrategy.OnPush,
4385
4646
  imports: [DropDownButtonComponent, NgClass, IconWrapperComponent]
4386
4647
  }]
4387
- }], ctorParameters: () => [{ type: i0.NgZone }, { type: i0.Renderer2 }, { type: ToolBarComponent }], propDecorators: { arrowIcon: [{
4648
+ }], ctorParameters: () => [{ type: ToolBarComponent }, { type: i0.ChangeDetectorRef }], propDecorators: { arrowIcon: [{
4388
4649
  type: Input
4389
4650
  }], title: [{
4390
4651
  type: Input
@@ -4455,45 +4716,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImpo
4455
4716
  */
4456
4717
  class ToolBarSplitButtonComponent extends ToolBarToolComponent {
4457
4718
  host;
4719
+ cdr;
4458
4720
  // showText and showIcon showIcon should be declared first
4459
4721
  /**
4460
4722
  * Controls the button text visibility.
4461
4723
  * @default 'always'
4462
4724
  */
4463
4725
  set showText(value) {
4464
- this._showText = value;
4726
+ this._showText.set(value);
4465
4727
  this.setTextDisplayMode();
4466
4728
  }
4467
4729
  get showText() {
4468
- return this._showText;
4730
+ return this._showText();
4469
4731
  }
4470
4732
  /**
4471
4733
  * Controls the button icon visibility.
4472
4734
  * @default 'always'
4473
4735
  */
4474
4736
  set showIcon(value) {
4475
- this._showIcon = value;
4737
+ this._showIcon.set(value);
4476
4738
  this.setIconDisplayMode();
4477
4739
  }
4478
4740
  get showIcon() {
4479
- return this._showIcon;
4741
+ return this._showIcon();
4480
4742
  }
4481
4743
  /**
4482
4744
  * Sets the text of the SplitButton ([see example](https://www.telerik.com/kendo-angular-ui/components/toolbar/control-types#split-buttons)).
4483
4745
  */
4484
4746
  set text(text) {
4485
- this._text = text;
4747
+ this._text.set(text);
4486
4748
  this.setTextDisplayMode();
4487
4749
  }
4488
4750
  get text() {
4489
- return this._text;
4751
+ return this._text();
4490
4752
  }
4491
4753
  /**
4492
4754
  * Sets the icon rendered next to the button text
4493
4755
  * ([see example](https://www.telerik.com/kendo-angular-ui/components/toolbar/control-types#split-buttons)).
4494
4756
  */
4495
4757
  set icon(icon) {
4496
- this._icon = icon;
4758
+ this._icon.set(icon);
4497
4759
  this.setIconDisplayMode();
4498
4760
  }
4499
4761
  /**
@@ -4501,59 +4763,74 @@ class ToolBarSplitButtonComponent extends ToolBarToolComponent {
4501
4763
  * Accepts an [existing Kendo SVG icon](https://www.telerik.com/kendo-angular-ui/components/icons/svgicon/svgicon-list) or a custom one.
4502
4764
  */
4503
4765
  set svgIcon(icon) {
4504
- const isIconSet = this._icon;
4505
- const isIconClassSet = this._iconClass;
4766
+ const isIconSet = this._icon();
4767
+ const isIconClassSet = this._iconClass();
4506
4768
  if (isDevMode() &&
4507
4769
  icon &&
4508
4770
  isIconSet &&
4509
4771
  isIconClassSet) {
4510
4772
  throw new Error('Setting both icon/svgIcon and iconClass options at the same time is not supported.');
4511
4773
  }
4512
- this._svgIcon = icon;
4774
+ this._svgIcon.set(icon);
4513
4775
  this.setIconDisplayMode();
4514
4776
  }
4515
4777
  /**
4516
4778
  * Sets a custom CSS class icon rendered next to the button text.
4517
4779
  */
4518
4780
  set iconClass(iconClass) {
4519
- this._iconClass = iconClass;
4781
+ this._iconClass.set(iconClass);
4520
4782
  this.setIconDisplayMode();
4521
4783
  }
4522
4784
  /**
4523
4785
  * Sets a URL for the image displayed next to the button text.
4524
4786
  */
4525
4787
  set imageUrl(imageUrl) {
4526
- this._imageUrl = imageUrl;
4788
+ this._imageUrl.set(imageUrl);
4527
4789
  this.setIconDisplayMode();
4528
4790
  }
4529
4791
  /**
4530
4792
  * When `true`, disables a SplitButton item.
4531
4793
  */
4532
- disabled;
4794
+ set disabled(value) {
4795
+ this._disabled.set(value);
4796
+ }
4797
+ get disabled() {
4798
+ return this._disabled();
4799
+ }
4533
4800
  /**
4534
4801
  * Configures the popup of the SplitButton.
4535
4802
  * Accepts a `PopupSettings` object that allows you to customize the popup behavior and appearance.
4536
4803
 
4537
4804
  */
4538
4805
  set popupSettings(value) {
4539
- this._popupSettings = value;
4806
+ this._popupSettings.set(value);
4540
4807
  }
4541
4808
  get popupSettings() {
4542
- if (!this._popupSettings) {
4543
- this._popupSettings = { animate: true, popupClass: '' };
4809
+ if (!this._popupSettings()) {
4810
+ this._popupSettings.set({ animate: true, popupClass: '' });
4544
4811
  }
4545
- return this._popupSettings;
4812
+ return this._popupSettings();
4546
4813
  }
4547
4814
  /**
4548
4815
  * Sets the fill mode for the button.
4549
4816
  * The fill mode represents the background and border styles. The default value is set by the Kendo theme.
4550
4817
  */
4551
- fillMode = undefined;
4818
+ set fillMode(value) {
4819
+ this._fillMode.set(value);
4820
+ }
4821
+ get fillMode() {
4822
+ return this._fillMode();
4823
+ }
4552
4824
  /**
4553
4825
  * Sets the predefined theme color for the button.
4554
4826
  * The theme color applies to the background, border, and text. The default value is set by the Kendo theme.
4555
4827
  */
4556
- themeColor = undefined;
4828
+ set themeColor(value) {
4829
+ this._themeColor.set(value);
4830
+ }
4831
+ get themeColor() {
4832
+ return this._themeColor();
4833
+ }
4557
4834
  /**
4558
4835
  * @hidden
4559
4836
  */
@@ -4566,38 +4843,63 @@ class ToolBarSplitButtonComponent extends ToolBarToolComponent {
4566
4843
  * Sets the CSS classes for the main button.
4567
4844
  * Accepts values supported by [`ngClass`](link:site.data.urls.angular['ngclassapi']).
4568
4845
  */
4569
- buttonClass;
4846
+ set buttonClass(value) {
4847
+ this._buttonClass.set(value);
4848
+ }
4849
+ get buttonClass() {
4850
+ return this._buttonClass();
4851
+ }
4570
4852
  /**
4571
4853
  * Sets the CSS classes for the arrow button that opens the popup.
4572
4854
  * Accepts values supported by [`ngClass`](link:site.data.urls.angular['ngclassapi']).
4573
4855
  */
4574
- arrowButtonClass;
4856
+ set arrowButtonClass(value) {
4857
+ this._arrowButtonClass.set(value);
4858
+ }
4859
+ get arrowButtonClass() {
4860
+ return this._arrowButtonClass();
4861
+ }
4575
4862
  /**
4576
4863
  * Sets the name of the [font icon](https://www.telerik.com/kendo-angular-ui/components/styling/icons#icons-list) for the arrow button.
4577
4864
  */
4578
- arrowButtonIcon = 'chevron-down';
4865
+ set arrowButtonIcon(value) {
4866
+ this._arrowButtonIcon.set(value);
4867
+ }
4868
+ get arrowButtonIcon() {
4869
+ return this._arrowButtonIcon();
4870
+ }
4579
4871
  /**
4580
4872
  * Sets the [`SVGIcon`](https://www.telerik.com/kendo-angular-ui/components/icons/api/svgicon) for the arrow button.
4581
4873
  */
4582
- arrowButtonSvgIcon = chevronDownIcon;
4874
+ set arrowButtonSvgIcon(value) {
4875
+ this._arrowButtonSvgIcon.set(value);
4876
+ }
4877
+ get arrowButtonSvgIcon() {
4878
+ return this._arrowButtonSvgIcon();
4879
+ }
4583
4880
  /**
4584
4881
  * Sets the text field for the button-list popup.
4585
4882
  * @default 'text'
4586
4883
  */
4587
- textField = 'text';
4884
+ set textField(value) {
4885
+ this._textField.set(value);
4886
+ }
4887
+ get textField() {
4888
+ return this._textField();
4889
+ }
4588
4890
  /**
4589
4891
  * Sets the data of the SplitButton ([see example](https://www.telerik.com/kendo-angular-ui/components/toolbar/control-types#split-buttons)).
4590
4892
  *
4591
4893
  * > Provide the data as an array-like list.
4592
4894
  */
4593
4895
  set data(data) {
4594
- this._data = data || [];
4896
+ this._data.set(data || []);
4595
4897
  }
4596
4898
  get data() {
4597
- if (!this._data) {
4598
- this.data = [];
4899
+ if (!this._data()) {
4900
+ this._data.set([]);
4599
4901
  }
4600
- return this._data;
4902
+ return this._data();
4601
4903
  }
4602
4904
  /**
4603
4905
  * Fires when the user clicks the main button.
@@ -4644,16 +4946,24 @@ class ToolBarSplitButtonComponent extends ToolBarToolComponent {
4644
4946
  get overflowButtons() {
4645
4947
  return [this.overflowMainButton, ...this.overflowListItems.toArray().filter(el => !el.nativeElement.classList.contains('k-disabled'))];
4646
4948
  }
4647
- _data;
4648
- _popupSettings = { animate: true, popupClass: '' };
4649
- focusedIndex = -1;
4650
- _showText;
4651
- _showIcon;
4652
- _text;
4653
- _icon;
4654
- _iconClass;
4655
- _svgIcon;
4656
- _imageUrl;
4949
+ _icon = signal(null, ...(ngDevMode ? [{ debugName: "_icon" }] : /* istanbul ignore next */ []));
4950
+ _iconClass = signal(null, ...(ngDevMode ? [{ debugName: "_iconClass" }] : /* istanbul ignore next */ []));
4951
+ _svgIcon = signal(null, ...(ngDevMode ? [{ debugName: "_svgIcon" }] : /* istanbul ignore next */ []));
4952
+ _imageUrl = signal(null, ...(ngDevMode ? [{ debugName: "_imageUrl" }] : /* istanbul ignore next */ []));
4953
+ _data = signal([], ...(ngDevMode ? [{ debugName: "_data" }] : /* istanbul ignore next */ []));
4954
+ _popupSettings = signal({ animate: true, popupClass: '' }, ...(ngDevMode ? [{ debugName: "_popupSettings" }] : /* istanbul ignore next */ []));
4955
+ focusedIndex = signal(-1, ...(ngDevMode ? [{ debugName: "focusedIndex" }] : /* istanbul ignore next */ []));
4956
+ _showText = signal(null, ...(ngDevMode ? [{ debugName: "_showText" }] : /* istanbul ignore next */ []));
4957
+ _showIcon = signal(null, ...(ngDevMode ? [{ debugName: "_showIcon" }] : /* istanbul ignore next */ []));
4958
+ _text = signal(null, ...(ngDevMode ? [{ debugName: "_text" }] : /* istanbul ignore next */ []));
4959
+ _disabled = signal(undefined, ...(ngDevMode ? [{ debugName: "_disabled" }] : /* istanbul ignore next */ []));
4960
+ _fillMode = signal(undefined, ...(ngDevMode ? [{ debugName: "_fillMode" }] : /* istanbul ignore next */ []));
4961
+ _themeColor = signal(undefined, ...(ngDevMode ? [{ debugName: "_themeColor" }] : /* istanbul ignore next */ []));
4962
+ _buttonClass = signal(undefined, ...(ngDevMode ? [{ debugName: "_buttonClass" }] : /* istanbul ignore next */ []));
4963
+ _arrowButtonClass = signal(undefined, ...(ngDevMode ? [{ debugName: "_arrowButtonClass" }] : /* istanbul ignore next */ []));
4964
+ _arrowButtonIcon = signal('chevron-down', ...(ngDevMode ? [{ debugName: "_arrowButtonIcon" }] : /* istanbul ignore next */ []));
4965
+ _arrowButtonSvgIcon = signal(chevronDownIcon, ...(ngDevMode ? [{ debugName: "_arrowButtonSvgIcon" }] : /* istanbul ignore next */ []));
4966
+ _textField = signal('text', ...(ngDevMode ? [{ debugName: "_textField" }] : /* istanbul ignore next */ []));
4657
4967
  propertyChangeSub;
4658
4968
  getNextKey;
4659
4969
  getPrevKey;
@@ -4661,9 +4971,23 @@ class ToolBarSplitButtonComponent extends ToolBarToolComponent {
4661
4971
  sectionSplitButton;
4662
4972
  overflowMainButton;
4663
4973
  overflowListItems;
4664
- constructor(host) {
4974
+ /**
4975
+ * @hidden
4976
+ */
4977
+ set location(value) {
4978
+ super.location = value;
4979
+ this.cdr.markForCheck();
4980
+ }
4981
+ /**
4982
+ * @hidden
4983
+ */
4984
+ get location() {
4985
+ return super.location;
4986
+ }
4987
+ constructor(host, cdr) {
4665
4988
  super();
4666
4989
  this.host = host;
4990
+ this.cdr = cdr;
4667
4991
  this.getNextKey = getNextKey();
4668
4992
  this.getPrevKey = getPrevKey();
4669
4993
  this.isBuiltInTool = true;
@@ -4677,14 +5001,14 @@ class ToolBarSplitButtonComponent extends ToolBarToolComponent {
4677
5001
  * @hidden
4678
5002
  */
4679
5003
  onButtonListClick(ev) {
4680
- this.focusedIndex = this.overflowButtons.findIndex(b => b.nativeElement.contains(ev.target));
5004
+ this.focusedIndex.set(this.overflowButtons.findIndex(b => b.nativeElement.contains(ev.target)));
4681
5005
  }
4682
5006
  /**
4683
5007
  * @hidden
4684
5008
  */
4685
5009
  onMainButtonClick(ev) {
4686
5010
  this.buttonClick.emit(ev);
4687
- this.focusedIndex = 0;
5011
+ this.focusedIndex.set(0);
4688
5012
  }
4689
5013
  /**
4690
5014
  * @hidden
@@ -4704,12 +5028,12 @@ class ToolBarSplitButtonComponent extends ToolBarToolComponent {
4704
5028
  focus(ev = {}) {
4705
5029
  if (!this.overflows || this.location === 'section') {
4706
5030
  if (!ev.type || ev.type === 'focus' || ev.type === 'keydown') {
4707
- this[`${this.location}SplitButton`].focus();
5031
+ this[`${this.location}SplitButton`]?.focus();
4708
5032
  }
4709
5033
  }
4710
5034
  else if (this.overflowButtons.length > 0) {
4711
- this.focusedIndex = getIndexOfFocused(this.getPrevKey(), this.getNextKey(), this.overflowButtons.map(ob => ob.nativeElement))(ev);
4712
- this.focusButton(this.focusedIndex, ev);
5035
+ this.focusedIndex.set(getIndexOfFocused(this.getPrevKey(), this.getNextKey(), this.overflowButtons.map(ob => ob.nativeElement))(ev));
5036
+ this.focusButton(this.focusedIndex(), ev);
4713
5037
  }
4714
5038
  }
4715
5039
  /**
@@ -4722,10 +5046,10 @@ class ToolBarSplitButtonComponent extends ToolBarToolComponent {
4722
5046
  }
4723
5047
  if (this.overflows) {
4724
5048
  const peekAtIndex = makePeeker(this.overflowButtons);
4725
- const isUnmodified = areEqual(this.focusedIndex);
4726
- this.focusedIndex = seekFocusedIndex(this.getPrevKey(), this.getNextKey(), peekAtIndex)(this.focusedIndex, ev);
4727
- this.focusButton(this.focusedIndex, ev);
4728
- return !isUnmodified(this.focusedIndex);
5049
+ const isUnmodified = areEqual(this.focusedIndex());
5050
+ this.focusedIndex.set(seekFocusedIndex(this.getPrevKey(), this.getNextKey(), peekAtIndex)(this.focusedIndex(), ev));
5051
+ this.focusButton(this.focusedIndex(), ev);
5052
+ return !isUnmodified(this.focusedIndex());
4729
5053
  }
4730
5054
  }
4731
5055
  /**
@@ -4757,16 +5081,16 @@ class ToolBarSplitButtonComponent extends ToolBarToolComponent {
4757
5081
  this.overflowOptions.text = this.showText === 'toolbar' || this.showText === 'never' ? undefined : this.text;
4758
5082
  }
4759
5083
  setIconDisplayMode() {
4760
- this.toolbarOptions.icon = getValueForLocation(this._icon, this.showIcon, false);
4761
- this.overflowOptions.icon = getValueForLocation(this._icon, this.showIcon, true);
4762
- this.toolbarOptions.iconClass = getValueForLocation(this._iconClass, this.showIcon, false);
4763
- this.overflowOptions.iconClass = getValueForLocation(this._iconClass, this.showIcon, true);
4764
- this.toolbarOptions.svgIcon = getValueForLocation(this._svgIcon, this.showIcon, false);
4765
- this.overflowOptions.svgIcon = getValueForLocation(this._svgIcon, this.showIcon, true);
4766
- this.toolbarOptions.imageUrl = getValueForLocation(this._imageUrl, this.showIcon, false);
4767
- this.overflowOptions.imageUrl = getValueForLocation(this._imageUrl, this.showIcon, true);
4768
- }
4769
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: ToolBarSplitButtonComponent, deps: [{ token: ToolBarComponent }], target: i0.ɵɵFactoryTarget.Component });
5084
+ this.toolbarOptions.icon = getValueForLocation(this._icon(), this.showIcon, false);
5085
+ this.overflowOptions.icon = getValueForLocation(this._icon(), this.showIcon, true);
5086
+ this.toolbarOptions.iconClass = getValueForLocation(this._iconClass(), this.showIcon, false);
5087
+ this.overflowOptions.iconClass = getValueForLocation(this._iconClass(), this.showIcon, true);
5088
+ this.toolbarOptions.svgIcon = getValueForLocation(this._svgIcon(), this.showIcon, false);
5089
+ this.overflowOptions.svgIcon = getValueForLocation(this._svgIcon(), this.showIcon, true);
5090
+ this.toolbarOptions.imageUrl = getValueForLocation(this._imageUrl(), this.showIcon, false);
5091
+ this.overflowOptions.imageUrl = getValueForLocation(this._imageUrl(), this.showIcon, true);
5092
+ }
5093
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: ToolBarSplitButtonComponent, deps: [{ token: ToolBarComponent }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
4770
5094
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.23", type: ToolBarSplitButtonComponent, isStandalone: true, selector: "kendo-toolbar-splitbutton", inputs: { showText: "showText", showIcon: "showIcon", text: "text", icon: "icon", svgIcon: "svgIcon", iconClass: "iconClass", imageUrl: "imageUrl", disabled: "disabled", popupSettings: "popupSettings", fillMode: "fillMode", themeColor: "themeColor", look: "look", buttonClass: "buttonClass", arrowButtonClass: "arrowButtonClass", arrowButtonIcon: "arrowButtonIcon", arrowButtonSvgIcon: "arrowButtonSvgIcon", textField: "textField", data: "data" }, outputs: { buttonClick: "buttonClick", itemClick: "itemClick", open: "open", close: "close" }, providers: [{ provide: ToolBarToolComponent, useExisting: forwardRef(() => ToolBarSplitButtonComponent) }], viewQueries: [{ propertyName: "toolbarSplitButton", first: true, predicate: ["toolbarSplitButton"], descendants: true }, { propertyName: "sectionSplitButton", first: true, predicate: ["sectionSplitButton"], descendants: true }, { propertyName: "overflowMainButton", first: true, predicate: ["overflowMainButton"], descendants: true, read: ElementRef }, { propertyName: "overflowListItems", predicate: ["listItem"], descendants: true }], exportAs: ["kendoToolBarSplitButton"], usesInheritance: true, ngImport: i0, template: `
4771
5095
  <ng-template #toolbarTemplate>
4772
5096
  <kendo-splitbutton
@@ -4871,7 +5195,7 @@ class ToolBarSplitButtonComponent extends ToolBarToolComponent {
4871
5195
  (itemClick)="itemClick.emit($event)"
4872
5196
  ></kendo-splitbutton>
4873
5197
  </ng-template>
4874
- `, isInline: true, dependencies: [{ kind: "component", type: SplitButtonComponent, selector: "kendo-splitbutton", inputs: ["text", "icon", "svgIcon", "iconClass", "type", "imageUrl", "size", "rounded", "fillMode", "themeColor", "disabled", "popupSettings", "tabIndex", "textField", "data", "arrowButtonClass", "arrowButtonIcon", "arrowButtonSvgIcon", "buttonAttributes"], outputs: ["buttonClick", "itemClick", "focus", "blur", "open", "close"], exportAs: ["kendoSplitButton"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }] });
5198
+ `, isInline: true, dependencies: [{ kind: "component", type: SplitButtonComponent, selector: "kendo-splitbutton", inputs: ["text", "icon", "svgIcon", "iconClass", "type", "imageUrl", "size", "rounded", "fillMode", "themeColor", "disabled", "popupSettings", "tabIndex", "textField", "data", "arrowButtonClass", "arrowButtonIcon", "arrowButtonSvgIcon", "buttonAttributes"], outputs: ["buttonClick", "itemClick", "focus", "blur", "open", "close"], exportAs: ["kendoSplitButton"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4875
5199
  }
4876
5200
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: ToolBarSplitButtonComponent, decorators: [{
4877
5201
  type: Component,
@@ -4985,9 +5309,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImpo
4985
5309
  </ng-template>
4986
5310
  `,
4987
5311
  standalone: true,
5312
+ changeDetection: ChangeDetectionStrategy.OnPush,
4988
5313
  imports: [SplitButtonComponent, NgClass, IconWrapperComponent]
4989
5314
  }]
4990
- }], ctorParameters: () => [{ type: ToolBarComponent }], propDecorators: { showText: [{
5315
+ }], ctorParameters: () => [{ type: ToolBarComponent }, { type: i0.ChangeDetectorRef }], propDecorators: { showText: [{
4991
5316
  type: Input
4992
5317
  }], showIcon: [{
4993
5318
  type: Input
@@ -5105,7 +5430,7 @@ class ToolBarSeparatorComponent extends ToolBarToolComponent {
5105
5430
  <div class="k-separator k-separator-horizontal"></div>
5106
5431
  </div>
5107
5432
  </ng-template>
5108
- `, isInline: true });
5433
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
5109
5434
  }
5110
5435
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: ToolBarSeparatorComponent, decorators: [{
5111
5436
  type: Component,
@@ -5128,7 +5453,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImpo
5128
5453
  </div>
5129
5454
  </ng-template>
5130
5455
  `,
5131
- standalone: true
5456
+ standalone: true,
5457
+ changeDetection: ChangeDetectionStrategy.OnPush
5132
5458
  }]
5133
5459
  }], ctorParameters: () => [], propDecorators: { separator: [{
5134
5460
  type: ViewChild,
@@ -5188,7 +5514,7 @@ class ToolBarSpacerComponent extends ToolBarToolComponent {
5188
5514
  <ng-template #toolbarTemplate>
5189
5515
  <div class="k-spacer"></div>
5190
5516
  </ng-template>
5191
- `, isInline: true });
5517
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
5192
5518
  }
5193
5519
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImport: i0, type: ToolBarSpacerComponent, decorators: [{
5194
5520
  type: Component,
@@ -5201,7 +5527,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.23", ngImpo
5201
5527
  <div class="k-spacer"></div>
5202
5528
  </ng-template>
5203
5529
  `,
5204
- standalone: true
5530
+ standalone: true,
5531
+ changeDetection: ChangeDetectionStrategy.OnPush
5205
5532
  }]
5206
5533
  }], ctorParameters: () => [] });
5207
5534
 
@@ -5647,7 +5974,9 @@ class FloatingToolBarComponent {
5647
5974
  */
5648
5975
  propertyChange = new EventEmitter();
5649
5976
  dragHandleIcon = handleDragDotsIcon;
5650
- direction;
5977
+ get direction() {
5978
+ return this._direction();
5979
+ }
5651
5980
  moveMode = computed(() => this.keyboardMoveOrigin() !== null, ...(ngDevMode ? [{ debugName: "moveMode" }] : /* istanbul ignore next */ []));
5652
5981
  popupClass = computed(() => {
5653
5982
  const size = SIZES[this._size()];
@@ -5671,6 +6000,7 @@ class FloatingToolBarComponent {
5671
6000
  get dragHandleTitle() {
5672
6001
  return this.localization.get('dragHandleTitle');
5673
6002
  }
6003
+ _direction = signal('ltr', ...(ngDevMode ? [{ debugName: "_direction" }] : /* istanbul ignore next */ []));
5674
6004
  _anchor = signal(undefined, ...(ngDevMode ? [{ debugName: "_anchor" }] : /* istanbul ignore next */ []));
5675
6005
  _position = signal('top', ...(ngDevMode ? [{ debugName: "_position" }] : /* istanbul ignore next */ []));
5676
6006
  _containerAlign = signal({ horizontal: 'center', vertical: 'top' }, ...(ngDevMode ? [{ debugName: "_containerAlign" }] : /* istanbul ignore next */ []));
@@ -5698,14 +6028,14 @@ class FloatingToolBarComponent {
5698
6028
  this.localization = localization;
5699
6029
  this.changeDetectorRef = changeDetectorRef;
5700
6030
  validatePackage(packageMetadata);
5701
- this.direction = localization.rtl ? 'rtl' : 'ltr';
6031
+ this._direction.set(localization.rtl ? 'rtl' : 'ltr');
5702
6032
  if (isDocumentAvailable()) {
5703
6033
  this.focusReturnTarget = document.activeElement;
5704
6034
  }
5705
6035
  }
5706
6036
  ngOnInit() {
5707
6037
  this.subscriptions.add(this.localization.changes.subscribe(({ rtl }) => {
5708
- this.direction = rtl ? 'rtl' : 'ltr';
6038
+ this._direction.set(rtl ? 'rtl' : 'ltr');
5709
6039
  this.changeDetectorRef.markForCheck();
5710
6040
  }));
5711
6041
  }
@@ -5736,7 +6066,7 @@ class FloatingToolBarComponent {
5736
6066
  * Moves the focus into the FloatingToolBar at its current roving tabindex position.
5737
6067
  */
5738
6068
  focus() {
5739
- this.focusFirstTool();
6069
+ this.toolbarComponent?.element.nativeElement.focus();
5740
6070
  }
5741
6071
  /**
5742
6072
  * Sets the FloatingToolBar position using the provided `top` and `left` coordinates.