@progress/kendo-angular-toolbar 16.11.0-develop.1 → 16.11.0-develop.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,16 +3,16 @@
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, Component, Input, Output, HostBinding, HostListener, Directive, forwardRef, ElementRef, ViewContainerRef, ContentChildren, ViewChild, ViewChildren, isDevMode, NgModule } from '@angular/core';
6
+ import { EventEmitter, Injectable, inject, ElementRef, Directive, Input, Output, forwardRef, ViewContainerRef, Component, ContentChildren, ViewChild, HostBinding, HostListener, isDevMode, ViewChildren, NgModule } from '@angular/core';
7
7
  import { Keys, guid, isDocumentAvailable, ResizeSensorComponent, ResizeBatchService } from '@progress/kendo-angular-common';
8
8
  import * as i1 from '@progress/kendo-angular-l10n';
9
9
  import { ComponentMessages, LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';
10
10
  import { validatePackage } from '@progress/kendo-licensing';
11
11
  import { take, filter, takeUntil } from 'rxjs/operators';
12
- import { NgIf, NgTemplateOutlet, NgFor, NgClass, NgStyle } from '@angular/common';
13
12
  import { Subject, Subscription, merge, fromEvent } from 'rxjs';
14
13
  import { moreVerticalIcon, caretAltDownIcon } from '@progress/kendo-svg-icons';
15
14
  import { ButtonComponent, ButtonGroupComponent, DropDownButtonComponent, SplitButtonComponent } from '@progress/kendo-angular-buttons';
15
+ import { NgTemplateOutlet, NgFor, NgIf, NgClass, NgStyle } from '@angular/common';
16
16
  import * as i2 from '@progress/kendo-angular-popup';
17
17
  import { PopupService } from '@progress/kendo-angular-popup';
18
18
  import { IconWrapperComponent, IconsService } from '@progress/kendo-angular-icons';
@@ -24,8 +24,8 @@ const packageMetadata = {
24
24
  name: '@progress/kendo-angular-toolbar',
25
25
  productName: 'Kendo UI for Angular',
26
26
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
27
- publishDate: 1727353390,
28
- version: '16.11.0-develop.1',
27
+ publishDate: 1727948223,
28
+ version: '16.11.0-develop.10',
29
29
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
30
30
  };
31
31
 
@@ -252,6 +252,10 @@ const getStylingClasses = (componentType, stylingOption, previousValue, newValue
252
252
  break;
253
253
  }
254
254
  };
255
+ /**
256
+ * @hidden
257
+ */
258
+ const isElement = (element) => element instanceof Element || element instanceof Document;
255
259
 
256
260
  /**
257
261
  * @hidden
@@ -265,7 +269,7 @@ class NavigationService {
265
269
  this.isOverflowButtonFocused = false;
266
270
  }
267
271
  setRenderedTools(rts) {
268
- this.renderedTools = [...rts];
272
+ this.renderedTools = rts;
269
273
  }
270
274
  click({ context, event: ev }) {
271
275
  if (this.focused.renderedTool !== context && ev) {
@@ -278,7 +282,7 @@ class NavigationService {
278
282
  }
279
283
  moveFocusToPopup() {
280
284
  this.isPopupFocused = true;
281
- this.blurOverflowButton();
285
+ this.resetNavigation();
282
286
  this.focus();
283
287
  }
284
288
  focusNext(ev) {
@@ -355,7 +359,7 @@ class NavigationService {
355
359
  }
356
360
  }
357
361
  getFocusableTools() {
358
- return this.renderedTools.filter(rt => rt.tool.overflows === this.isPopupFocused && rt.tool.canFocus());
362
+ return this.renderedTools.filter(rt => (rt.tool.overflows === this.isPopupFocused) && rt.tool.canFocus());
359
363
  }
360
364
  focus(renderedTool, ev) {
361
365
  // running the code below in onStable fixes issue #2939
@@ -414,9 +418,10 @@ class ToolBarToolComponent {
414
418
  * @hidden
415
419
  */
416
420
  this.responsive = true;
421
+ this.element = inject(ElementRef);
417
422
  }
418
423
  get toolbarDisplay() {
419
- return this.overflows ? 'none' : 'inline-block';
424
+ return this.overflows ? 'none' : 'inline-flex';
420
425
  }
421
426
  get overflowDisplay() {
422
427
  return this.overflows ? 'block' : 'none';
@@ -448,17 +453,14 @@ class ToolBarToolComponent {
448
453
  return false;
449
454
  }
450
455
  }
451
- ToolBarToolComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolBarToolComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
452
- ToolBarToolComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ToolBarToolComponent, isStandalone: true, selector: "toolbar-tool", inputs: { responsive: "responsive" }, ngImport: i0, template: ``, isInline: true });
456
+ ToolBarToolComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolBarToolComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
457
+ ToolBarToolComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: ToolBarToolComponent, isStandalone: true, inputs: { responsive: "responsive" }, ngImport: i0 });
453
458
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolBarToolComponent, decorators: [{
454
- type: Component,
459
+ type: Directive,
455
460
  args: [{
456
- // eslint-disable-next-line @angular-eslint/component-selector
457
- selector: 'toolbar-tool',
458
- template: ``,
459
461
  standalone: true
460
462
  }]
461
- }], propDecorators: { responsive: [{
463
+ }], ctorParameters: function () { return []; }, propDecorators: { responsive: [{
462
464
  type: Input
463
465
  }] } });
464
466
 
@@ -530,125 +532,156 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
530
532
  type: Injectable
531
533
  }] });
532
534
 
535
+ /**
536
+ * @hidden
537
+ */
538
+ class ToolbarToolsService {
539
+ constructor() {
540
+ this.renderedToolsChange = new Subject();
541
+ this.overflowToolsChange = new Subject();
542
+ this.renderedTools = [];
543
+ this.overflowTools = [];
544
+ this.allTools = [];
545
+ }
546
+ }
547
+ ToolbarToolsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolbarToolsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
548
+ ToolbarToolsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolbarToolsService });
549
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolbarToolsService, decorators: [{
550
+ type: Injectable
551
+ }] });
552
+
533
553
  const MIN_SPACER_WIDTH = 18;
534
554
  /**
535
555
  * @hidden
536
556
  */
537
557
  class ToolBarRendererComponent {
538
- constructor(element, renderer, rendererService, refreshService) {
539
- this.element = element;
558
+ constructor(renderer, rendererService, refreshService, toolsService, viewContainer, navigationService) {
540
559
  this.renderer = renderer;
541
560
  this.rendererService = rendererService;
542
561
  this.refreshService = refreshService;
562
+ this.toolsService = toolsService;
563
+ this.viewContainer = viewContainer;
564
+ this.navigationService = navigationService;
543
565
  this.rendererClick = new EventEmitter();
544
- this.hostClass = true;
545
- this.rendererService.element = element;
566
+ this.onClick = (ev) => {
567
+ this.rendererClick.emit({ context: this, event: ev });
568
+ };
569
+ }
570
+ get isSpacer() {
571
+ return this.tool && this.tool.__isSpacer;
572
+ }
573
+ ngOnInit() {
574
+ var _a;
575
+ this.internalComponentRef = (_a = this.viewContainer.get(0)) === null || _a === void 0 ? void 0 : _a.rootNodes[0];
576
+ this.element = this.tool.element;
577
+ if (isElement(this.internalComponentRef)) {
578
+ this.internalComponentRef.addEventListener('click', this.onClick);
579
+ }
580
+ this.rendererService.element = this.element;
546
581
  this.rendererService.renderer = this;
547
582
  this.refreshSubscription = this.refreshService.onRefresh.subscribe((tool) => {
548
583
  if (this.tool === tool) {
549
584
  this.refresh();
550
585
  }
551
586
  });
552
- }
553
- get spacerClass() {
554
- return this.location === 'toolbar' && this.isSpacer;
555
- }
556
- get isSpacer() {
557
- return this.tool && this.tool.__isSpacer;
558
- }
559
- onClick(ev) {
560
- this.rendererClick.emit({ context: this, event: ev });
561
- }
562
- ngOnInit() {
563
587
  if (this.resizable) {
564
588
  if (this.location === 'toolbar') {
565
589
  this.template = this.tool.toolbarTemplate;
566
- this.renderer.setStyle(this.element.nativeElement, 'visibility', 'hidden');
567
- this.renderer.setStyle(this.element.nativeElement, 'display', 'none');
590
+ if (isElement(this.internalComponentRef)) {
591
+ this.renderer.setStyle(this.internalComponentRef, 'visibility', 'hidden');
592
+ this.renderer.setStyle(this.internalComponentRef, 'display', 'none');
593
+ }
568
594
  }
569
595
  else {
570
596
  this.template = this.tool.popupTemplate;
571
- this.renderer.setStyle(this.element.nativeElement, 'display', 'none');
597
+ if (isElement(this.internalComponentRef)) {
598
+ this.renderer.setStyle(this.internalComponentRef, 'display', 'none');
599
+ }
572
600
  }
573
601
  }
574
602
  else {
575
603
  this.tool.overflows = false;
576
604
  this.template = this.tool.toolbarTemplate;
577
- this.renderer.setStyle(this.element.nativeElement, 'visibility', 'visible');
578
- this.renderer.setStyle(this.element.nativeElement, 'display', 'inline-block');
605
+ if (isElement(this.internalComponentRef)) {
606
+ this.renderer.setStyle(this.internalComponentRef, 'visibility', 'visible');
607
+ this.renderer.setStyle(this.internalComponentRef, 'display', 'inline-flex');
608
+ }
579
609
  }
580
610
  }
581
611
  ngOnDestroy() {
582
612
  this.refreshSubscription.unsubscribe();
613
+ if (isElement(this.internalComponentRef)) {
614
+ this.internalComponentRef.removeEventListener('click', this.onClick);
615
+ }
583
616
  }
584
617
  ngAfterViewInit() {
585
618
  if (this.resizable) {
586
619
  this.refresh();
587
620
  }
621
+ this.updateTools();
588
622
  }
589
623
  /**
590
624
  * @hidden
591
625
  */
592
626
  get width() {
627
+ if (!isElement(this.internalComponentRef)) {
628
+ return 0;
629
+ }
593
630
  if (this.isSpacer) {
594
631
  return MIN_SPACER_WIDTH;
595
632
  }
596
- return this.tool.overflows ? 0 : outerWidth(this.element.nativeElement);
633
+ return this.tool.overflows ? 0 : outerWidth(this.internalComponentRef);
597
634
  }
598
- /**
599
- * @hidden
600
- */
601
635
  isDisplayed() {
602
- return this.element.nativeElement.style.display !== 'none';
636
+ var _a, _b;
637
+ return ((_b = (_a = this.internalComponentRef) === null || _a === void 0 ? void 0 : _a.style) === null || _b === void 0 ? void 0 : _b.display) !== 'none';
603
638
  }
604
- /**
605
- * @hidden
606
- */
607
639
  refresh() {
608
640
  if (this.resizable) {
641
+ if (!isElement(this.internalComponentRef)) {
642
+ return;
643
+ }
609
644
  if (this.location === 'toolbar') {
610
- this.renderer.setStyle(this.element.nativeElement, 'visibility', this.tool.visibility);
611
- this.renderer.setStyle(this.element.nativeElement, 'display', this.tool.toolbarDisplay);
645
+ this.renderer.setStyle(this.internalComponentRef, 'visibility', this.tool.visibility);
646
+ this.renderer.setStyle(this.internalComponentRef, 'display', this.tool.toolbarDisplay);
612
647
  }
613
648
  else {
614
- this.renderer.setStyle(this.element.nativeElement, 'display', this.tool.overflowDisplay);
649
+ this.renderer.setStyle(this.internalComponentRef, 'display', this.tool.overflowDisplay);
615
650
  }
651
+ this.updateTools();
616
652
  }
617
653
  }
618
- /**
619
- * @hidden
620
- */
621
654
  setAttribute(element, attr, value) {
622
655
  this.renderer.setAttribute(element, attr, value);
623
656
  }
657
+ updateTools() {
658
+ const isInToolbar = this.toolsService.renderedTools.some(t => t.tool === this.tool);
659
+ const isInPopup = this.toolsService.overflowTools.some(t => t.tool === this.tool);
660
+ if (this.location === 'toolbar') {
661
+ isInPopup && (this.toolsService.overflowTools = this.toolsService.overflowTools.filter(t => t.tool !== this.tool));
662
+ !isInToolbar && this.toolsService.renderedTools.push(this);
663
+ }
664
+ else {
665
+ if (!isInPopup) {
666
+ this.toolsService.overflowTools.push(this);
667
+ this.toolsService.overflowTools.sort((t1, t2) => {
668
+ // ensures correct navigation order in Popup
669
+ return this.toolsService.allTools.indexOf(t1.tool) - this.toolsService.allTools.indexOf(t2.tool);
670
+ });
671
+ }
672
+ }
673
+ }
624
674
  }
625
- ToolBarRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolBarRendererComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: RendererService }, { token: RefreshService }], target: i0.ɵɵFactoryTarget.Component });
626
- ToolBarRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ToolBarRendererComponent, isStandalone: true, selector: "kendo-toolbar-renderer", inputs: { tool: "tool", location: "location", resizable: "resizable" }, outputs: { rendererClick: "rendererClick" }, host: { listeners: { "click": "onClick($event)" }, properties: { "class.k-spacer": "this.spacerClass", "class.k-toolbar-renderer": "this.hostClass" } }, providers: [RendererService], exportAs: ["kendoToolBarRenderer"], ngImport: i0, template: `
627
- <ng-container *ngIf="location === 'toolbar'">
628
- <ng-template [ngTemplateOutlet]="template"></ng-template>
629
- </ng-container>
630
- <ng-container *ngIf="location === 'overflow' && tool.responsive">
631
- <ng-template [ngTemplateOutlet]="template"></ng-template>
632
- </ng-container>
633
- `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
675
+ ToolBarRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolBarRendererComponent, deps: [{ token: i0.Renderer2 }, { token: RendererService }, { token: RefreshService }, { token: ToolbarToolsService }, { token: i0.ViewContainerRef }, { token: NavigationService }], target: i0.ɵɵFactoryTarget.Directive });
676
+ ToolBarRendererComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: ToolBarRendererComponent, isStandalone: true, selector: "[kendoToolbarRenderer]", inputs: { tool: "tool", location: "location", resizable: "resizable" }, outputs: { rendererClick: "rendererClick" }, providers: [RendererService], ngImport: i0 });
634
677
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolBarRendererComponent, decorators: [{
635
- type: Component,
678
+ type: Directive,
636
679
  args: [{
637
- exportAs: 'kendoToolBarRenderer',
638
680
  providers: [RendererService],
639
- selector: 'kendo-toolbar-renderer',
640
- template: `
641
- <ng-container *ngIf="location === 'toolbar'">
642
- <ng-template [ngTemplateOutlet]="template"></ng-template>
643
- </ng-container>
644
- <ng-container *ngIf="location === 'overflow' && tool.responsive">
645
- <ng-template [ngTemplateOutlet]="template"></ng-template>
646
- </ng-container>
647
- `,
648
681
  standalone: true,
649
- imports: [NgIf, NgTemplateOutlet]
682
+ selector: '[kendoToolbarRenderer]'
650
683
  }]
651
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: RendererService }, { type: RefreshService }]; }, propDecorators: { tool: [{
684
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: RendererService }, { type: RefreshService }, { type: ToolbarToolsService }, { type: i0.ViewContainerRef }, { type: NavigationService }]; }, propDecorators: { tool: [{
652
685
  type: Input
653
686
  }], location: [{
654
687
  type: Input
@@ -656,15 +689,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
656
689
  type: Input
657
690
  }], rendererClick: [{
658
691
  type: Output
659
- }], spacerClass: [{
660
- type: HostBinding,
661
- args: ['class.k-spacer']
662
- }], hostClass: [{
663
- type: HostBinding,
664
- args: ['class.k-toolbar-renderer']
665
- }], onClick: [{
666
- type: HostListener,
667
- args: ['click', ['$event']]
668
692
  }] } });
669
693
 
670
694
  /**
@@ -728,7 +752,7 @@ const getInitialPopupSettings = (isRtl) => ({
728
752
  class ToolBarComponent {
729
753
  constructor(localization, popupService, refreshService, navigationService,
730
754
  // Needs to be public as it is being accessed in the Editor component
731
- element, zone, renderer, _cdr) {
755
+ element, zone, renderer, _cdr, toolsService) {
732
756
  this.localization = localization;
733
757
  this.popupService = popupService;
734
758
  this.refreshService = refreshService;
@@ -737,6 +761,7 @@ class ToolBarComponent {
737
761
  this.zone = zone;
738
762
  this.renderer = renderer;
739
763
  this._cdr = _cdr;
764
+ this.toolsService = toolsService;
740
765
  /**
741
766
  * Hides the overflowing tools in a popup.
742
767
  */
@@ -875,7 +900,16 @@ class ToolBarComponent {
875
900
  get resizableClass() {
876
901
  return this.overflow;
877
902
  }
903
+ ngAfterContentInit() {
904
+ this.toolsService.allTools = this.allTools.toArray();
905
+ this.subscriptions.add(this.allTools.changes.subscribe(changes => {
906
+ this.toolsService.allTools = this.allTools.toArray();
907
+ this.zone.onStable.pipe(take(1)).subscribe(() => this.onResize());
908
+ }));
909
+ }
878
910
  ngAfterViewInit() {
911
+ this.toolsService.renderedToolsChange.next(this.toolsService.renderedTools);
912
+ this.toolsService.overflowToolsChange.next(this.toolsService.overflowTools);
879
913
  const element = this.element.nativeElement;
880
914
  if (!element.getAttribute('tabindex')) {
881
915
  this.element.nativeElement.setAttribute('tabindex', '0');
@@ -927,7 +961,7 @@ class ToolBarComponent {
927
961
  });
928
962
  });
929
963
  if (this.overflow) {
930
- this.subscriptions.add(merge(this.resizeSensor.resize, this.renderedTools.changes).subscribe(() => this.onResize()));
964
+ this.subscriptions.add(merge(this.resizeSensor.resize, this.toolsService.renderedToolsChange).subscribe(() => this.onResize()));
931
965
  this.navigationService.overflowButton = this.overflowButton;
932
966
  // because of https://github.com/telerik/kendo-angular-buttons/pull/276
933
967
  // button icons are not rendered until onResize() is called
@@ -939,8 +973,7 @@ class ToolBarComponent {
939
973
  });
940
974
  });
941
975
  }
942
- this.navigationService.setRenderedTools(this.renderedTools.toArray());
943
- this.subscriptions.add(this.renderedTools.changes.subscribe((rts) => this.navigationService.setRenderedTools(rts.toArray())));
976
+ this.navigationService.setRenderedTools(this.toolsService.renderedTools);
944
977
  this.handleClasses(this.size, 'size');
945
978
  }
946
979
  ngOnInit() {
@@ -1045,7 +1078,6 @@ class ToolBarComponent {
1045
1078
  onPopupOpen() {
1046
1079
  this.zone.runOutsideAngular(() => {
1047
1080
  this.overflowKeydownListener = this.renderer.listen(this.popupRef.popupElement, 'keydown', (ev) => {
1048
- const currentTool = this.overflowRenderedTools.toArray().find(tool => closest(ev.target, (el) => el === tool.element.nativeElement));
1049
1081
  switch (ev.keyCode) {
1050
1082
  case Keys.ArrowUp:
1051
1083
  this.zone.run(() => {
@@ -1073,7 +1105,7 @@ class ToolBarComponent {
1073
1105
  case Keys.Enter:
1074
1106
  case Keys.Space:
1075
1107
  this.zone.run(() => {
1076
- if (currentTool) {
1108
+ if (ev.target.closest('.k-menu-item')) {
1077
1109
  ev.preventDefault();
1078
1110
  ev.target.click();
1079
1111
  ev.target.focus();
@@ -1086,11 +1118,11 @@ class ToolBarComponent {
1086
1118
  });
1087
1119
  });
1088
1120
  this.cancelRenderedToolsSubscription$.next();
1121
+ this.navigationService.setRenderedTools(this.toolsService.overflowTools);
1089
1122
  this.navigationService.moveFocusToPopup();
1090
- this.navigationService.setRenderedTools(this.overflowRenderedTools.toArray());
1091
- this.overflowRenderedTools.changes
1123
+ this.toolsService.overflowToolsChange
1092
1124
  .pipe(takeUntil(this.cancelRenderedToolsSubscription$))
1093
- .subscribe((rts) => this.navigationService.setRenderedTools(rts.toArray()));
1125
+ .subscribe((rts) => this.navigationService.setRenderedTools(rts));
1094
1126
  this.renderer.setAttribute(this.overflowButton.nativeElement, 'aria-controls', this.popupId);
1095
1127
  }
1096
1128
  /**
@@ -1098,10 +1130,10 @@ class ToolBarComponent {
1098
1130
  */
1099
1131
  onPopupClose() {
1100
1132
  this.cancelRenderedToolsSubscription$.next();
1101
- this.navigationService.setRenderedTools(this.renderedTools.toArray());
1102
- this.renderedTools.changes
1133
+ this.navigationService.setRenderedTools(this.toolsService.renderedTools);
1134
+ this.toolsService.renderedToolsChange
1103
1135
  .pipe(takeUntil(this.cancelRenderedToolsSubscription$))
1104
- .subscribe((rts) => this.navigationService.setRenderedTools(rts.toArray()));
1136
+ .subscribe((rts) => this.navigationService.setRenderedTools(rts));
1105
1137
  this.navigationService.moveFocusToToolBar();
1106
1138
  if (this.overflowKeydownListener) {
1107
1139
  this.overflowKeydownListener();
@@ -1142,7 +1174,7 @@ class ToolBarComponent {
1142
1174
  return this.cachedGap;
1143
1175
  }
1144
1176
  get childrenWidth() {
1145
- const width = this.renderedTools.reduce((totalWidth, tool) => tool.width + totalWidth + (tool.isDisplayed() ? this.gap : 0), 0);
1177
+ const width = this.toolsService.renderedTools.reduce((totalWidth, tool) => tool.width + totalWidth + (tool.isDisplayed() ? this.gap : 0), 0);
1146
1178
  return Math.ceil(width);
1147
1179
  }
1148
1180
  get visibleTools() {
@@ -1185,7 +1217,10 @@ class ToolBarComponent {
1185
1217
  }
1186
1218
  hideLastVisibleTool() {
1187
1219
  const tool = this.visibleTools[this.visibleTools.length - 1];
1188
- const renderedElement = this.renderedTools.find((r) => {
1220
+ if (!tool) {
1221
+ return null;
1222
+ }
1223
+ const renderedElement = this.toolsService.renderedTools.find((r) => {
1189
1224
  return r.tool === tool;
1190
1225
  });
1191
1226
  const width = renderedElement.width;
@@ -1195,18 +1230,20 @@ class ToolBarComponent {
1195
1230
  }
1196
1231
  showFirstHiddenTool(containerWidth, childrenWidth) {
1197
1232
  const tool = this.overflowTools[0];
1198
- const renderedElement = this.renderedTools.find(r => r.tool === tool);
1233
+ if (!tool) {
1234
+ return null;
1235
+ }
1236
+ const renderedElement = this.toolsService.renderedTools.find((r) => r.tool === tool);
1199
1237
  tool.overflows = false;
1200
1238
  tool.visibility = 'hidden';
1201
1239
  this.refreshService.refresh(tool);
1202
1240
  if (containerWidth > childrenWidth + renderedElement.width) {
1203
1241
  tool.visibility = 'visible';
1204
- this.refreshService.refresh(tool);
1205
1242
  }
1206
1243
  else {
1207
1244
  tool.overflows = true;
1208
- this.refreshService.refresh(tool);
1209
1245
  }
1246
+ this.refreshService.refresh(tool);
1210
1247
  return renderedElement.width; // returns 0 if `overflows` is true
1211
1248
  }
1212
1249
  setPopupContentDimensions() {
@@ -1251,30 +1288,29 @@ class ToolBarComponent {
1251
1288
  return classes;
1252
1289
  }
1253
1290
  }
1254
- ToolBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", 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 }], target: i0.ɵɵFactoryTarget.Component });
1291
+ ToolBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", 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 }], target: i0.ɵɵFactoryTarget.Component });
1255
1292
  ToolBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ToolBarComponent, isStandalone: true, selector: "kendo-toolbar", inputs: { overflow: "overflow", resizable: "resizable", popupSettings: "popupSettings", tabindex: "tabindex", size: "size", tabIndex: "tabIndex" }, outputs: { open: "open", close: "close" }, host: { listeners: { "focus": "onFocus($event)", "focusout": "onFocusOut($event)" }, properties: { "class.k-toolbar": "this.hostClass", "attr.role": "this.role", "attr.dir": "this.getDir", "class.k-toolbar-resizable": "this.resizableClass" } }, providers: [
1256
1293
  RefreshService,
1257
1294
  NavigationService,
1258
1295
  LocalizationService,
1296
+ ToolbarToolsService,
1259
1297
  {
1260
1298
  provide: L10N_PREFIX,
1261
1299
  useValue: 'kendo.toolbar'
1262
1300
  }
1263
- ], queries: [{ propertyName: "allTools", predicate: ToolBarToolComponent }], viewQueries: [{ propertyName: "overflowButton", first: true, predicate: ["overflowButton"], descendants: true, read: ElementRef }, { propertyName: "popupTemplate", first: true, predicate: ["popupTemplate"], descendants: true, static: true }, { propertyName: "resizeSensor", first: true, predicate: ["resizeSensor"], descendants: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "renderedTools", predicate: ["toolbarRenderer"], descendants: true }, { propertyName: "overflowRenderedTools", predicate: ["overflowRenderer"], descendants: true }], exportAs: ["kendoToolBar"], usesOnChanges: true, ngImport: i0, template: `
1301
+ ], queries: [{ propertyName: "allTools", predicate: ToolBarToolComponent }], viewQueries: [{ propertyName: "overflowButton", first: true, predicate: ["overflowButton"], descendants: true, read: ElementRef }, { propertyName: "popupTemplate", first: true, predicate: ["popupTemplate"], descendants: true, static: true }, { propertyName: "resizeSensor", first: true, predicate: ["resizeSensor"], descendants: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, static: true }], exportAs: ["kendoToolBar"], usesOnChanges: true, ngImport: i0, template: `
1264
1302
  <ng-container kendoToolbarLocalizedMessages
1265
1303
  i18n-moreToolsTitle="kendo.toolbar.moreToolsTitle|The title of the **more tools** button in a responsive ToolBar"
1266
1304
  moreToolsTitle="More tools"
1267
1305
  >
1268
1306
  </ng-container>
1269
- <ng-container *ngFor="let tool of allTools; let index = index">
1270
- <kendo-toolbar-renderer
1271
- #toolbarRenderer
1272
- (rendererClick)="onRendererClick($event)"
1273
- [location]="'toolbar'"
1274
- [resizable]="overflow"
1275
- [tool]="tool"
1276
- ></kendo-toolbar-renderer>
1277
- </ng-container>
1307
+ <ng-container *ngFor="let tool of allTools; let index = index"
1308
+ kendoToolbarRenderer
1309
+ [tool]="tool"
1310
+ location="toolbar"
1311
+ [resizable]="overflow"
1312
+ (rendererClick)="onRendererClick($event)"
1313
+ [ngTemplateOutlet]="tool.toolbarTemplate"></ng-container>
1278
1314
  <button
1279
1315
  kendoButton
1280
1316
  fillMode="flat"
@@ -1303,20 +1339,19 @@ ToolBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", versi
1303
1339
  role="menu"
1304
1340
  [id]="popupId"
1305
1341
  [attr.aria-labelledby]="overflowBtnId">
1306
- <ng-container *ngFor="let tool of allTools; let index = index">
1307
- <kendo-toolbar-renderer
1308
- #overflowRenderer
1309
- (rendererClick)="onRendererClick($event)"
1310
- [location]="'overflow'"
1311
- [resizable]="overflow"
1312
- [tool]="tool"
1313
- ></kendo-toolbar-renderer>
1314
- </ng-container>
1342
+ <ng-template
1343
+ *ngFor="let tool of overflowTools; let index = index"
1344
+ kendoToolbarRenderer
1345
+ [tool]="tool"
1346
+ location="overflow"
1347
+ [resizable]="overflow"
1348
+ (rendererClick)="onRendererClick($event)"
1349
+ [ngTemplateOutlet]="tool.popupTemplate"></ng-template>
1315
1350
  </div>
1316
1351
  </ng-template>
1317
1352
  <ng-container #container></ng-container>
1318
1353
  <kendo-resize-sensor *ngIf="overflow" #resizeSensor></kendo-resize-sensor>
1319
- `, isInline: true, dependencies: [{ kind: "directive", type: LocalizedToolbarMessagesDirective, selector: "[kendoToolbarLocalizedMessages]" }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ToolBarRendererComponent, selector: "kendo-toolbar-renderer", inputs: ["tool", "location", "resizable"], outputs: ["rendererClick"], exportAs: ["kendoToolBarRenderer"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ButtonComponent, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], 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"] }] });
1354
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: LocalizedToolbarMessagesDirective, selector: "[kendoToolbarLocalizedMessages]" }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: ToolBarRendererComponent, selector: "[kendoToolbarRenderer]", inputs: ["tool", "location", "resizable"], outputs: ["rendererClick"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ButtonComponent, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], 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"] }] });
1320
1355
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolBarComponent, decorators: [{
1321
1356
  type: Component,
1322
1357
  args: [{
@@ -1325,6 +1360,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
1325
1360
  RefreshService,
1326
1361
  NavigationService,
1327
1362
  LocalizationService,
1363
+ ToolbarToolsService,
1328
1364
  {
1329
1365
  provide: L10N_PREFIX,
1330
1366
  useValue: 'kendo.toolbar'
@@ -1337,15 +1373,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
1337
1373
  moreToolsTitle="More tools"
1338
1374
  >
1339
1375
  </ng-container>
1340
- <ng-container *ngFor="let tool of allTools; let index = index">
1341
- <kendo-toolbar-renderer
1342
- #toolbarRenderer
1343
- (rendererClick)="onRendererClick($event)"
1344
- [location]="'toolbar'"
1345
- [resizable]="overflow"
1346
- [tool]="tool"
1347
- ></kendo-toolbar-renderer>
1348
- </ng-container>
1376
+ <ng-container *ngFor="let tool of allTools; let index = index"
1377
+ kendoToolbarRenderer
1378
+ [tool]="tool"
1379
+ location="toolbar"
1380
+ [resizable]="overflow"
1381
+ (rendererClick)="onRendererClick($event)"
1382
+ [ngTemplateOutlet]="tool.toolbarTemplate"></ng-container>
1349
1383
  <button
1350
1384
  kendoButton
1351
1385
  fillMode="flat"
@@ -1374,24 +1408,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
1374
1408
  role="menu"
1375
1409
  [id]="popupId"
1376
1410
  [attr.aria-labelledby]="overflowBtnId">
1377
- <ng-container *ngFor="let tool of allTools; let index = index">
1378
- <kendo-toolbar-renderer
1379
- #overflowRenderer
1380
- (rendererClick)="onRendererClick($event)"
1381
- [location]="'overflow'"
1382
- [resizable]="overflow"
1383
- [tool]="tool"
1384
- ></kendo-toolbar-renderer>
1385
- </ng-container>
1411
+ <ng-template
1412
+ *ngFor="let tool of overflowTools; let index = index"
1413
+ kendoToolbarRenderer
1414
+ [tool]="tool"
1415
+ location="overflow"
1416
+ [resizable]="overflow"
1417
+ (rendererClick)="onRendererClick($event)"
1418
+ [ngTemplateOutlet]="tool.popupTemplate"></ng-template>
1386
1419
  </div>
1387
1420
  </ng-template>
1388
1421
  <ng-container #container></ng-container>
1389
1422
  <kendo-resize-sensor *ngIf="overflow" #resizeSensor></kendo-resize-sensor>
1390
1423
  `,
1391
1424
  standalone: true,
1392
- imports: [LocalizedToolbarMessagesDirective, NgFor, ToolBarRendererComponent, NgIf, ButtonComponent, NgClass, ResizeSensorComponent]
1425
+ imports: [NgTemplateOutlet, LocalizedToolbarMessagesDirective, NgFor, ToolBarRendererComponent, NgIf, ButtonComponent, NgClass, ResizeSensorComponent]
1393
1426
  }]
1394
- }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i2.PopupService }, { type: RefreshService }, { type: NavigationService }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { overflow: [{
1427
+ }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i2.PopupService }, { type: RefreshService }, { type: NavigationService }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: ToolbarToolsService }]; }, propDecorators: { overflow: [{
1395
1428
  type: Input
1396
1429
  }], resizable: [{
1397
1430
  type: Input
@@ -1423,12 +1456,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
1423
1456
  }], container: [{
1424
1457
  type: ViewChild,
1425
1458
  args: ['container', { read: ViewContainerRef, static: true }]
1426
- }], renderedTools: [{
1427
- type: ViewChildren,
1428
- args: ['toolbarRenderer']
1429
- }], overflowRenderedTools: [{
1430
- type: ViewChildren,
1431
- args: ['overflowRenderer']
1432
1459
  }], hostClass: [{
1433
1460
  type: HostBinding,
1434
1461
  args: ['class.k-toolbar']
@@ -2015,8 +2042,9 @@ ToolBarButtonGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.
2015
2042
  </kendo-buttongroup>
2016
2043
  </ng-template>
2017
2044
  <ng-template #popupTemplate>
2018
- <ng-container *ngFor="let button of buttonComponents">
2019
- <div #listItem
2045
+ <div
2046
+ *ngFor="let button of buttonComponents"
2047
+ #listItem
2020
2048
  tabindex="-1"
2021
2049
  role="menuitem"
2022
2050
  class="k-item k-menu-item"
@@ -2037,7 +2065,6 @@ ToolBarButtonGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.
2037
2065
  <span *ngIf="button.overflowOptions.text" class="k-menu-link-text">{{button.overflowOptions.text}}</span>
2038
2066
  </span>
2039
2067
  </div>
2040
- </ng-container>
2041
2068
  </ng-template>
2042
2069
  `, isInline: true, dependencies: [{ kind: "component", type: ButtonGroupComponent, selector: "kendo-buttongroup", inputs: ["disabled", "selection", "width", "tabIndex", "navigable"], outputs: ["navigate"], exportAs: ["kendoButtonGroup"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ButtonComponent, selector: "button[kendoButton], span[kendoButton], kendo-button", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }] });
2043
2070
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolBarButtonGroupComponent, decorators: [{
@@ -2084,8 +2111,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
2084
2111
  </kendo-buttongroup>
2085
2112
  </ng-template>
2086
2113
  <ng-template #popupTemplate>
2087
- <ng-container *ngFor="let button of buttonComponents">
2088
- <div #listItem
2114
+ <div
2115
+ *ngFor="let button of buttonComponents"
2116
+ #listItem
2089
2117
  tabindex="-1"
2090
2118
  role="menuitem"
2091
2119
  class="k-item k-menu-item"
@@ -2106,7 +2134,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
2106
2134
  <span *ngIf="button.overflowOptions.text" class="k-menu-link-text">{{button.overflowOptions.text}}</span>
2107
2135
  </span>
2108
2136
  </div>
2109
- </ng-container>
2110
2137
  </ng-template>
2111
2138
  `,
2112
2139
  standalone: true,
@@ -3209,14 +3236,22 @@ class ToolBarSpacerComponent extends ToolBarToolComponent {
3209
3236
  }
3210
3237
  }
3211
3238
  ToolBarSpacerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolBarSpacerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3212
- ToolBarSpacerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ToolBarSpacerComponent, isStandalone: true, selector: "kendo-toolbar-spacer", providers: [{ provide: ToolBarToolComponent, useExisting: forwardRef(() => ToolBarSpacerComponent) }], viewQueries: [{ propertyName: "toolbarTemplate", first: true, predicate: ["toolbarTemplate"], descendants: true, static: true }, { propertyName: "popupTemplate", first: true, predicate: ["popupTemplate"], descendants: true, static: true }], exportAs: ["kendoToolBarSpacer"], usesInheritance: true, ngImport: i0, template: ``, isInline: true });
3239
+ ToolBarSpacerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ToolBarSpacerComponent, isStandalone: true, selector: "kendo-toolbar-spacer", providers: [{ provide: ToolBarToolComponent, useExisting: forwardRef(() => ToolBarSpacerComponent) }], viewQueries: [{ propertyName: "toolbarTemplate", first: true, predicate: ["toolbarTemplate"], descendants: true, static: true }, { propertyName: "popupTemplate", first: true, predicate: ["popupTemplate"], descendants: true, static: true }], exportAs: ["kendoToolBarSpacer"], usesInheritance: true, ngImport: i0, template: `
3240
+ <ng-template #toolbarTemplate>
3241
+ <div class="k-spacer"></div>
3242
+ </ng-template>
3243
+ `, isInline: true });
3213
3244
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolBarSpacerComponent, decorators: [{
3214
3245
  type: Component,
3215
3246
  args: [{
3216
3247
  exportAs: 'kendoToolBarSpacer',
3217
3248
  providers: [{ provide: ToolBarToolComponent, useExisting: forwardRef(() => ToolBarSpacerComponent) }],
3218
3249
  selector: 'kendo-toolbar-spacer',
3219
- template: ``,
3250
+ template: `
3251
+ <ng-template #toolbarTemplate>
3252
+ <div class="k-spacer"></div>
3253
+ </ng-template>
3254
+ `,
3220
3255
  standalone: true
3221
3256
  }]
3222
3257
  }], ctorParameters: function () { return []; }, propDecorators: { toolbarTemplate: [{
@@ -3293,7 +3328,7 @@ class ToolBarModule {
3293
3328
  }
3294
3329
  ToolBarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolBarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
3295
3330
  ToolBarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: ToolBarModule, imports: [ToolBarComponent, ToolbarCustomMessagesComponent, ToolBarButtonComponent, ToolBarButtonGroupComponent, ToolBarDropDownButtonComponent, ToolBarSeparatorComponent, ToolBarSpacerComponent, ToolBarSplitButtonComponent, ToolBarToolComponent], exports: [ToolBarComponent, ToolbarCustomMessagesComponent, ToolBarButtonComponent, ToolBarButtonGroupComponent, ToolBarDropDownButtonComponent, ToolBarSeparatorComponent, ToolBarSpacerComponent, ToolBarSplitButtonComponent, ToolBarToolComponent] });
3296
- ToolBarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolBarModule, providers: [IconsService, PopupService, ResizeBatchService], imports: [KENDO_TOOLBAR] });
3331
+ ToolBarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolBarModule, providers: [IconsService, PopupService, ResizeBatchService], imports: [ToolBarComponent, ToolbarCustomMessagesComponent, ToolBarButtonComponent, ToolBarButtonGroupComponent, ToolBarDropDownButtonComponent, ToolBarSeparatorComponent, ToolBarSpacerComponent, ToolBarSplitButtonComponent] });
3297
3332
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolBarModule, decorators: [{
3298
3333
  type: NgModule,
3299
3334
  args: [{