@progress/kendo-angular-toolbar 16.11.0-develop.2 → 16.11.0-develop.3

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,7 +3,7 @@
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 * as i2 from '@progress/kendo-angular-popup';
8
8
  import { PopupService } from '@progress/kendo-angular-popup';
9
9
  import { Keys, guid, isDocumentAvailable, ResizeSensorComponent, ResizeBatchService } from '@progress/kendo-angular-common';
@@ -11,10 +11,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
13
  import { take, filter, takeUntil } from 'rxjs/operators';
14
- import { NgIf, NgTemplateOutlet, NgFor, NgClass, NgStyle } from '@angular/common';
15
14
  import { Subject, Subscription, merge, fromEvent } from 'rxjs';
16
15
  import { moreVerticalIcon, caretAltDownIcon } from '@progress/kendo-svg-icons';
17
16
  import { ButtonComponent, ButtonGroupComponent, DropDownButtonComponent, SplitButtonComponent } from '@progress/kendo-angular-buttons';
17
+ import { NgTemplateOutlet, NgFor, NgIf, NgClass, NgStyle } from '@angular/common';
18
18
  import { IconWrapperComponent, IconsService } from '@progress/kendo-angular-icons';
19
19
 
20
20
  /**
@@ -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: 1727422886,
28
- version: '16.11.0-develop.2',
27
+ publishDate: 1727428119,
28
+ version: '16.11.0-develop.3',
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,150 @@ 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
+ this.internalComponentRef = this.viewContainer.get(0).rootNodes[0];
575
+ this.element = this.tool.element;
576
+ this.internalComponentRef.addEventListener('click', this.onClick);
577
+ this.rendererService.element = this.element;
546
578
  this.rendererService.renderer = this;
547
579
  this.refreshSubscription = this.refreshService.onRefresh.subscribe((tool) => {
548
580
  if (this.tool === tool) {
549
581
  this.refresh();
550
582
  }
551
583
  });
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
584
  if (this.resizable) {
564
585
  if (this.location === 'toolbar') {
565
586
  this.template = this.tool.toolbarTemplate;
566
- this.renderer.setStyle(this.element.nativeElement, 'visibility', 'hidden');
567
- this.renderer.setStyle(this.element.nativeElement, 'display', 'none');
587
+ if (isElement(this.internalComponentRef)) {
588
+ this.renderer.setStyle(this.internalComponentRef, 'visibility', 'hidden');
589
+ this.renderer.setStyle(this.internalComponentRef, 'display', 'none');
590
+ }
568
591
  }
569
592
  else {
570
593
  this.template = this.tool.popupTemplate;
571
- this.renderer.setStyle(this.element.nativeElement, 'display', 'none');
594
+ if (isElement(this.internalComponentRef)) {
595
+ this.renderer.setStyle(this.internalComponentRef, 'display', 'none');
596
+ }
572
597
  }
573
598
  }
574
599
  else {
575
600
  this.tool.overflows = false;
576
601
  this.template = this.tool.toolbarTemplate;
577
- this.renderer.setStyle(this.element.nativeElement, 'visibility', 'visible');
578
- this.renderer.setStyle(this.element.nativeElement, 'display', 'inline-block');
602
+ if (isElement(this.internalComponentRef)) {
603
+ this.renderer.setStyle(this.internalComponentRef, 'visibility', 'visible');
604
+ this.renderer.setStyle(this.internalComponentRef, 'display', 'inline-flex');
605
+ }
579
606
  }
580
607
  }
581
608
  ngOnDestroy() {
582
609
  this.refreshSubscription.unsubscribe();
610
+ this.internalComponentRef.removeEventListener('click', this.onClick);
583
611
  }
584
612
  ngAfterViewInit() {
585
613
  if (this.resizable) {
586
614
  this.refresh();
587
615
  }
616
+ this.updateTools();
588
617
  }
589
618
  /**
590
619
  * @hidden
591
620
  */
592
621
  get width() {
622
+ if (!isElement(this.internalComponentRef)) {
623
+ return 0;
624
+ }
593
625
  if (this.isSpacer) {
594
626
  return MIN_SPACER_WIDTH;
595
627
  }
596
- return this.tool.overflows ? 0 : outerWidth(this.element.nativeElement);
628
+ return this.tool.overflows ? 0 : outerWidth(this.internalComponentRef);
597
629
  }
598
- /**
599
- * @hidden
600
- */
601
630
  isDisplayed() {
602
- return this.element.nativeElement.style.display !== 'none';
631
+ return this.internalComponentRef.style.display !== 'none';
603
632
  }
604
- /**
605
- * @hidden
606
- */
607
633
  refresh() {
608
634
  if (this.resizable) {
635
+ if (!isElement(this.internalComponentRef)) {
636
+ return;
637
+ }
609
638
  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);
639
+ this.renderer.setStyle(this.internalComponentRef, 'visibility', this.tool.visibility);
640
+ this.renderer.setStyle(this.internalComponentRef, 'display', this.tool.toolbarDisplay);
612
641
  }
613
642
  else {
614
- this.renderer.setStyle(this.element.nativeElement, 'display', this.tool.overflowDisplay);
643
+ this.renderer.setStyle(this.internalComponentRef, 'display', this.tool.overflowDisplay);
615
644
  }
645
+ this.updateTools();
616
646
  }
617
647
  }
618
- /**
619
- * @hidden
620
- */
621
648
  setAttribute(element, attr, value) {
622
649
  this.renderer.setAttribute(element, attr, value);
623
650
  }
651
+ updateTools() {
652
+ const isInToolbar = this.toolsService.renderedTools.some(t => t.tool === this.tool);
653
+ const isInPopup = this.toolsService.overflowTools.some(t => t.tool === this.tool);
654
+ if (this.location === 'toolbar') {
655
+ isInPopup && (this.toolsService.overflowTools = this.toolsService.overflowTools.filter(t => t.tool !== this.tool));
656
+ !isInToolbar && this.toolsService.renderedTools.push(this);
657
+ }
658
+ else {
659
+ if (!isInPopup) {
660
+ this.toolsService.overflowTools.push(this);
661
+ this.toolsService.overflowTools.sort((t1, t2) => {
662
+ // ensures correct navigation order in Popup
663
+ return this.toolsService.allTools.indexOf(t1.tool) - this.toolsService.allTools.indexOf(t2.tool);
664
+ });
665
+ }
666
+ }
667
+ }
624
668
  }
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"] }] });
669
+ 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 });
670
+ 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
671
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolBarRendererComponent, decorators: [{
635
- type: Component,
672
+ type: Directive,
636
673
  args: [{
637
- exportAs: 'kendoToolBarRenderer',
638
674
  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
675
  standalone: true,
649
- imports: [NgIf, NgTemplateOutlet]
676
+ selector: '[kendoToolbarRenderer]'
650
677
  }]
651
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: RendererService }, { type: RefreshService }]; }, propDecorators: { tool: [{
678
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: RendererService }, { type: RefreshService }, { type: ToolbarToolsService }, { type: i0.ViewContainerRef }, { type: NavigationService }]; }, propDecorators: { tool: [{
652
679
  type: Input
653
680
  }], location: [{
654
681
  type: Input
@@ -656,15 +683,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
656
683
  type: Input
657
684
  }], rendererClick: [{
658
685
  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
686
  }] } });
669
687
 
670
688
  /**
@@ -728,7 +746,7 @@ const getInitialPopupSettings = (isRtl) => ({
728
746
  class ToolBarComponent {
729
747
  constructor(localization, popupService, refreshService, navigationService,
730
748
  // Needs to be public as it is being accessed in the Editor component
731
- element, zone, renderer, _cdr) {
749
+ element, zone, renderer, _cdr, toolsService) {
732
750
  this.localization = localization;
733
751
  this.popupService = popupService;
734
752
  this.refreshService = refreshService;
@@ -737,6 +755,7 @@ class ToolBarComponent {
737
755
  this.zone = zone;
738
756
  this.renderer = renderer;
739
757
  this._cdr = _cdr;
758
+ this.toolsService = toolsService;
740
759
  /**
741
760
  * Hides the overflowing tools in a popup.
742
761
  */
@@ -875,7 +894,16 @@ class ToolBarComponent {
875
894
  get resizableClass() {
876
895
  return this.overflow;
877
896
  }
897
+ ngAfterContentInit() {
898
+ this.toolsService.allTools = this.allTools.toArray();
899
+ this.subscriptions.add(this.allTools.changes.subscribe(changes => {
900
+ this.toolsService.allTools = this.allTools.toArray();
901
+ this.zone.onStable.pipe(take(1)).subscribe(() => this.onResize());
902
+ }));
903
+ }
878
904
  ngAfterViewInit() {
905
+ this.toolsService.renderedToolsChange.next(this.toolsService.renderedTools);
906
+ this.toolsService.overflowToolsChange.next(this.toolsService.overflowTools);
879
907
  const element = this.element.nativeElement;
880
908
  if (!element.getAttribute('tabindex')) {
881
909
  this.element.nativeElement.setAttribute('tabindex', '0');
@@ -927,7 +955,7 @@ class ToolBarComponent {
927
955
  });
928
956
  });
929
957
  if (this.overflow) {
930
- this.subscriptions.add(merge(this.resizeSensor.resize, this.renderedTools.changes).subscribe(() => this.onResize()));
958
+ this.subscriptions.add(merge(this.resizeSensor.resize, this.toolsService.renderedToolsChange).subscribe(() => this.onResize()));
931
959
  this.navigationService.overflowButton = this.overflowButton;
932
960
  // because of https://github.com/telerik/kendo-angular-buttons/pull/276
933
961
  // button icons are not rendered until onResize() is called
@@ -939,8 +967,7 @@ class ToolBarComponent {
939
967
  });
940
968
  });
941
969
  }
942
- this.navigationService.setRenderedTools(this.renderedTools.toArray());
943
- this.subscriptions.add(this.renderedTools.changes.subscribe((rts) => this.navigationService.setRenderedTools(rts.toArray())));
970
+ this.navigationService.setRenderedTools(this.toolsService.renderedTools);
944
971
  this.handleClasses(this.size, 'size');
945
972
  }
946
973
  ngOnInit() {
@@ -1044,7 +1071,6 @@ class ToolBarComponent {
1044
1071
  onPopupOpen() {
1045
1072
  this.zone.runOutsideAngular(() => {
1046
1073
  this.overflowKeydownListener = this.renderer.listen(this.popupRef.popupElement, 'keydown', (ev) => {
1047
- const currentTool = this.overflowRenderedTools.toArray().find(tool => closest(ev.target, (el) => el === tool.element.nativeElement));
1048
1074
  switch (ev.keyCode) {
1049
1075
  case Keys.ArrowUp:
1050
1076
  this.zone.run(() => {
@@ -1072,7 +1098,7 @@ class ToolBarComponent {
1072
1098
  case Keys.Enter:
1073
1099
  case Keys.Space:
1074
1100
  this.zone.run(() => {
1075
- if (currentTool) {
1101
+ if (ev.target.closest('.k-menu-item')) {
1076
1102
  ev.preventDefault();
1077
1103
  ev.target.click();
1078
1104
  ev.target.focus();
@@ -1085,11 +1111,11 @@ class ToolBarComponent {
1085
1111
  });
1086
1112
  });
1087
1113
  this.cancelRenderedToolsSubscription$.next();
1114
+ this.navigationService.setRenderedTools(this.toolsService.overflowTools);
1088
1115
  this.navigationService.moveFocusToPopup();
1089
- this.navigationService.setRenderedTools(this.overflowRenderedTools.toArray());
1090
- this.overflowRenderedTools.changes
1116
+ this.toolsService.overflowToolsChange
1091
1117
  .pipe(takeUntil(this.cancelRenderedToolsSubscription$))
1092
- .subscribe((rts) => this.navigationService.setRenderedTools(rts.toArray()));
1118
+ .subscribe((rts) => this.navigationService.setRenderedTools(rts));
1093
1119
  this.renderer.setAttribute(this.overflowButton.nativeElement, 'aria-controls', this.popupId);
1094
1120
  }
1095
1121
  /**
@@ -1097,10 +1123,10 @@ class ToolBarComponent {
1097
1123
  */
1098
1124
  onPopupClose() {
1099
1125
  this.cancelRenderedToolsSubscription$.next();
1100
- this.navigationService.setRenderedTools(this.renderedTools.toArray());
1101
- this.renderedTools.changes
1126
+ this.navigationService.setRenderedTools(this.toolsService.renderedTools);
1127
+ this.toolsService.renderedToolsChange
1102
1128
  .pipe(takeUntil(this.cancelRenderedToolsSubscription$))
1103
- .subscribe((rts) => this.navigationService.setRenderedTools(rts.toArray()));
1129
+ .subscribe((rts) => this.navigationService.setRenderedTools(rts));
1104
1130
  this.navigationService.moveFocusToToolBar();
1105
1131
  if (this.overflowKeydownListener) {
1106
1132
  this.overflowKeydownListener();
@@ -1141,7 +1167,7 @@ class ToolBarComponent {
1141
1167
  return this.cachedGap;
1142
1168
  }
1143
1169
  get childrenWidth() {
1144
- const width = this.renderedTools.reduce((totalWidth, tool) => tool.width + totalWidth + (tool.isDisplayed() ? this.gap : 0), 0);
1170
+ const width = this.toolsService.renderedTools.reduce((totalWidth, tool) => tool.width + totalWidth + (tool.isDisplayed() ? this.gap : 0), 0);
1145
1171
  return Math.ceil(width);
1146
1172
  }
1147
1173
  get visibleTools() {
@@ -1184,7 +1210,10 @@ class ToolBarComponent {
1184
1210
  }
1185
1211
  hideLastVisibleTool() {
1186
1212
  const tool = this.visibleTools[this.visibleTools.length - 1];
1187
- const renderedElement = this.renderedTools.find((r) => {
1213
+ if (!tool) {
1214
+ return null;
1215
+ }
1216
+ const renderedElement = this.toolsService.renderedTools.find((r) => {
1188
1217
  return r.tool === tool;
1189
1218
  });
1190
1219
  const width = renderedElement.width;
@@ -1194,18 +1223,20 @@ class ToolBarComponent {
1194
1223
  }
1195
1224
  showFirstHiddenTool(containerWidth, childrenWidth) {
1196
1225
  const tool = this.overflowTools[0];
1197
- const renderedElement = this.renderedTools.find(r => r.tool === tool);
1226
+ if (!tool) {
1227
+ return null;
1228
+ }
1229
+ const renderedElement = this.toolsService.renderedTools.find((r) => r.tool === tool);
1198
1230
  tool.overflows = false;
1199
1231
  tool.visibility = 'hidden';
1200
1232
  this.refreshService.refresh(tool);
1201
1233
  if (containerWidth > childrenWidth + renderedElement.width) {
1202
1234
  tool.visibility = 'visible';
1203
- this.refreshService.refresh(tool);
1204
1235
  }
1205
1236
  else {
1206
1237
  tool.overflows = true;
1207
- this.refreshService.refresh(tool);
1208
1238
  }
1239
+ this.refreshService.refresh(tool);
1209
1240
  return renderedElement.width; // returns 0 if `overflows` is true
1210
1241
  }
1211
1242
  setPopupContentDimensions() {
@@ -1250,30 +1281,29 @@ class ToolBarComponent {
1250
1281
  return classes;
1251
1282
  }
1252
1283
  }
1253
- 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 });
1284
+ 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 });
1254
1285
  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: [
1255
1286
  RefreshService,
1256
1287
  NavigationService,
1257
1288
  LocalizationService,
1289
+ ToolbarToolsService,
1258
1290
  {
1259
1291
  provide: L10N_PREFIX,
1260
1292
  useValue: 'kendo.toolbar'
1261
1293
  }
1262
- ], 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: `
1294
+ ], 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: `
1263
1295
  <ng-container kendoToolbarLocalizedMessages
1264
1296
  i18n-moreToolsTitle="kendo.toolbar.moreToolsTitle|The title of the **more tools** button in a responsive ToolBar"
1265
1297
  moreToolsTitle="More tools"
1266
1298
  >
1267
1299
  </ng-container>
1268
- <ng-container *ngFor="let tool of allTools; let index = index">
1269
- <kendo-toolbar-renderer
1270
- #toolbarRenderer
1271
- (rendererClick)="onRendererClick($event)"
1272
- [location]="'toolbar'"
1273
- [resizable]="overflow"
1274
- [tool]="tool"
1275
- ></kendo-toolbar-renderer>
1276
- </ng-container>
1300
+ <ng-container *ngFor="let tool of allTools; let index = index"
1301
+ kendoToolbarRenderer
1302
+ [tool]="tool"
1303
+ location="toolbar"
1304
+ [resizable]="overflow"
1305
+ (rendererClick)="onRendererClick($event)"
1306
+ [ngTemplateOutlet]="tool.toolbarTemplate"></ng-container>
1277
1307
  <button
1278
1308
  kendoButton
1279
1309
  fillMode="flat"
@@ -1302,20 +1332,19 @@ ToolBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", versi
1302
1332
  role="menu"
1303
1333
  [id]="popupId"
1304
1334
  [attr.aria-labelledby]="overflowBtnId">
1305
- <ng-container *ngFor="let tool of allTools; let index = index">
1306
- <kendo-toolbar-renderer
1307
- #overflowRenderer
1308
- (rendererClick)="onRendererClick($event)"
1309
- [location]="'overflow'"
1310
- [resizable]="overflow"
1311
- [tool]="tool"
1312
- ></kendo-toolbar-renderer>
1313
- </ng-container>
1335
+ <ng-template
1336
+ *ngFor="let tool of overflowTools; let index = index"
1337
+ kendoToolbarRenderer
1338
+ [tool]="tool"
1339
+ location="overflow"
1340
+ [resizable]="overflow"
1341
+ (rendererClick)="onRendererClick($event)"
1342
+ [ngTemplateOutlet]="tool.popupTemplate"></ng-template>
1314
1343
  </div>
1315
1344
  </ng-template>
1316
1345
  <ng-container #container></ng-container>
1317
1346
  <kendo-resize-sensor *ngIf="overflow" #resizeSensor></kendo-resize-sensor>
1318
- `, 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"] }] });
1347
+ `, 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"] }] });
1319
1348
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolBarComponent, decorators: [{
1320
1349
  type: Component,
1321
1350
  args: [{
@@ -1324,6 +1353,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
1324
1353
  RefreshService,
1325
1354
  NavigationService,
1326
1355
  LocalizationService,
1356
+ ToolbarToolsService,
1327
1357
  {
1328
1358
  provide: L10N_PREFIX,
1329
1359
  useValue: 'kendo.toolbar'
@@ -1336,15 +1366,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
1336
1366
  moreToolsTitle="More tools"
1337
1367
  >
1338
1368
  </ng-container>
1339
- <ng-container *ngFor="let tool of allTools; let index = index">
1340
- <kendo-toolbar-renderer
1341
- #toolbarRenderer
1342
- (rendererClick)="onRendererClick($event)"
1343
- [location]="'toolbar'"
1344
- [resizable]="overflow"
1345
- [tool]="tool"
1346
- ></kendo-toolbar-renderer>
1347
- </ng-container>
1369
+ <ng-container *ngFor="let tool of allTools; let index = index"
1370
+ kendoToolbarRenderer
1371
+ [tool]="tool"
1372
+ location="toolbar"
1373
+ [resizable]="overflow"
1374
+ (rendererClick)="onRendererClick($event)"
1375
+ [ngTemplateOutlet]="tool.toolbarTemplate"></ng-container>
1348
1376
  <button
1349
1377
  kendoButton
1350
1378
  fillMode="flat"
@@ -1373,24 +1401,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
1373
1401
  role="menu"
1374
1402
  [id]="popupId"
1375
1403
  [attr.aria-labelledby]="overflowBtnId">
1376
- <ng-container *ngFor="let tool of allTools; let index = index">
1377
- <kendo-toolbar-renderer
1378
- #overflowRenderer
1379
- (rendererClick)="onRendererClick($event)"
1380
- [location]="'overflow'"
1381
- [resizable]="overflow"
1382
- [tool]="tool"
1383
- ></kendo-toolbar-renderer>
1384
- </ng-container>
1404
+ <ng-template
1405
+ *ngFor="let tool of overflowTools; let index = index"
1406
+ kendoToolbarRenderer
1407
+ [tool]="tool"
1408
+ location="overflow"
1409
+ [resizable]="overflow"
1410
+ (rendererClick)="onRendererClick($event)"
1411
+ [ngTemplateOutlet]="tool.popupTemplate"></ng-template>
1385
1412
  </div>
1386
1413
  </ng-template>
1387
1414
  <ng-container #container></ng-container>
1388
1415
  <kendo-resize-sensor *ngIf="overflow" #resizeSensor></kendo-resize-sensor>
1389
1416
  `,
1390
1417
  standalone: true,
1391
- imports: [LocalizedToolbarMessagesDirective, NgFor, ToolBarRendererComponent, NgIf, ButtonComponent, NgClass, ResizeSensorComponent]
1418
+ imports: [NgTemplateOutlet, LocalizedToolbarMessagesDirective, NgFor, ToolBarRendererComponent, NgIf, ButtonComponent, NgClass, ResizeSensorComponent]
1392
1419
  }]
1393
- }], 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: [{
1420
+ }], 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: [{
1394
1421
  type: Input
1395
1422
  }], resizable: [{
1396
1423
  type: Input
@@ -1422,12 +1449,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
1422
1449
  }], container: [{
1423
1450
  type: ViewChild,
1424
1451
  args: ['container', { read: ViewContainerRef, static: true }]
1425
- }], renderedTools: [{
1426
- type: ViewChildren,
1427
- args: ['toolbarRenderer']
1428
- }], overflowRenderedTools: [{
1429
- type: ViewChildren,
1430
- args: ['overflowRenderer']
1431
1452
  }], hostClass: [{
1432
1453
  type: HostBinding,
1433
1454
  args: ['class.k-toolbar']
@@ -2013,8 +2034,9 @@ ToolBarButtonGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.
2013
2034
  </kendo-buttongroup>
2014
2035
  </ng-template>
2015
2036
  <ng-template #popupTemplate>
2016
- <ng-container *ngFor="let button of buttonComponents">
2017
- <div #listItem
2037
+ <div
2038
+ *ngFor="let button of buttonComponents"
2039
+ #listItem
2018
2040
  tabindex="-1"
2019
2041
  role="menuitem"
2020
2042
  class="k-item k-menu-item"
@@ -2035,7 +2057,6 @@ ToolBarButtonGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.
2035
2057
  <span *ngIf="button.overflowOptions.text" class="k-menu-link-text">{{button.overflowOptions.text}}</span>
2036
2058
  </span>
2037
2059
  </div>
2038
- </ng-container>
2039
2060
  </ng-template>
2040
2061
  `, 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"] }] });
2041
2062
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolBarButtonGroupComponent, decorators: [{
@@ -2082,8 +2103,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
2082
2103
  </kendo-buttongroup>
2083
2104
  </ng-template>
2084
2105
  <ng-template #popupTemplate>
2085
- <ng-container *ngFor="let button of buttonComponents">
2086
- <div #listItem
2106
+ <div
2107
+ *ngFor="let button of buttonComponents"
2108
+ #listItem
2087
2109
  tabindex="-1"
2088
2110
  role="menuitem"
2089
2111
  class="k-item k-menu-item"
@@ -2104,7 +2126,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
2104
2126
  <span *ngIf="button.overflowOptions.text" class="k-menu-link-text">{{button.overflowOptions.text}}</span>
2105
2127
  </span>
2106
2128
  </div>
2107
- </ng-container>
2108
2129
  </ng-template>
2109
2130
  `,
2110
2131
  standalone: true,
@@ -3207,14 +3228,22 @@ class ToolBarSpacerComponent extends ToolBarToolComponent {
3207
3228
  }
3208
3229
  }
3209
3230
  ToolBarSpacerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolBarSpacerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3210
- 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 });
3231
+ 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: `
3232
+ <ng-template #toolbarTemplate>
3233
+ <div class="k-spacer"></div>
3234
+ </ng-template>
3235
+ `, isInline: true });
3211
3236
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolBarSpacerComponent, decorators: [{
3212
3237
  type: Component,
3213
3238
  args: [{
3214
3239
  exportAs: 'kendoToolBarSpacer',
3215
3240
  providers: [{ provide: ToolBarToolComponent, useExisting: forwardRef(() => ToolBarSpacerComponent) }],
3216
3241
  selector: 'kendo-toolbar-spacer',
3217
- template: ``,
3242
+ template: `
3243
+ <ng-template #toolbarTemplate>
3244
+ <div class="k-spacer"></div>
3245
+ </ng-template>
3246
+ `,
3218
3247
  standalone: true
3219
3248
  }]
3220
3249
  }], ctorParameters: function () { return []; }, propDecorators: { toolbarTemplate: [{
@@ -3291,7 +3320,7 @@ class ToolBarModule {
3291
3320
  }
3292
3321
  ToolBarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolBarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
3293
3322
  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] });
3294
- ToolBarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolBarModule, providers: [IconsService, PopupService, ResizeBatchService], imports: [KENDO_TOOLBAR] });
3323
+ 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] });
3295
3324
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolBarModule, decorators: [{
3296
3325
  type: NgModule,
3297
3326
  args: [{