@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,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: 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,154 @@ 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
+ if (isElement(this.internalComponentRef)) {
577
+ this.internalComponentRef.addEventListener('click', this.onClick);
578
+ }
579
+ this.rendererService.element = this.element;
546
580
  this.rendererService.renderer = this;
547
581
  this.refreshSubscription = this.refreshService.onRefresh.subscribe((tool) => {
548
582
  if (this.tool === tool) {
549
583
  this.refresh();
550
584
  }
551
585
  });
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
586
  if (this.resizable) {
564
587
  if (this.location === 'toolbar') {
565
588
  this.template = this.tool.toolbarTemplate;
566
- this.renderer.setStyle(this.element.nativeElement, 'visibility', 'hidden');
567
- this.renderer.setStyle(this.element.nativeElement, 'display', 'none');
589
+ if (isElement(this.internalComponentRef)) {
590
+ this.renderer.setStyle(this.internalComponentRef, 'visibility', 'hidden');
591
+ this.renderer.setStyle(this.internalComponentRef, 'display', 'none');
592
+ }
568
593
  }
569
594
  else {
570
595
  this.template = this.tool.popupTemplate;
571
- this.renderer.setStyle(this.element.nativeElement, 'display', 'none');
596
+ if (isElement(this.internalComponentRef)) {
597
+ this.renderer.setStyle(this.internalComponentRef, 'display', 'none');
598
+ }
572
599
  }
573
600
  }
574
601
  else {
575
602
  this.tool.overflows = false;
576
603
  this.template = this.tool.toolbarTemplate;
577
- this.renderer.setStyle(this.element.nativeElement, 'visibility', 'visible');
578
- this.renderer.setStyle(this.element.nativeElement, 'display', 'inline-block');
604
+ if (isElement(this.internalComponentRef)) {
605
+ this.renderer.setStyle(this.internalComponentRef, 'visibility', 'visible');
606
+ this.renderer.setStyle(this.internalComponentRef, 'display', 'inline-flex');
607
+ }
579
608
  }
580
609
  }
581
610
  ngOnDestroy() {
582
611
  this.refreshSubscription.unsubscribe();
612
+ if (isElement(this.internalComponentRef)) {
613
+ this.internalComponentRef.removeEventListener('click', this.onClick);
614
+ }
583
615
  }
584
616
  ngAfterViewInit() {
585
617
  if (this.resizable) {
586
618
  this.refresh();
587
619
  }
620
+ this.updateTools();
588
621
  }
589
622
  /**
590
623
  * @hidden
591
624
  */
592
625
  get width() {
626
+ if (!isElement(this.internalComponentRef)) {
627
+ return 0;
628
+ }
593
629
  if (this.isSpacer) {
594
630
  return MIN_SPACER_WIDTH;
595
631
  }
596
- return this.tool.overflows ? 0 : outerWidth(this.element.nativeElement);
632
+ return this.tool.overflows ? 0 : outerWidth(this.internalComponentRef);
597
633
  }
598
- /**
599
- * @hidden
600
- */
601
634
  isDisplayed() {
602
- return this.element.nativeElement.style.display !== 'none';
635
+ return this.internalComponentRef?.style?.display !== 'none';
603
636
  }
604
- /**
605
- * @hidden
606
- */
607
637
  refresh() {
608
638
  if (this.resizable) {
639
+ if (!isElement(this.internalComponentRef)) {
640
+ return;
641
+ }
609
642
  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);
643
+ this.renderer.setStyle(this.internalComponentRef, 'visibility', this.tool.visibility);
644
+ this.renderer.setStyle(this.internalComponentRef, 'display', this.tool.toolbarDisplay);
612
645
  }
613
646
  else {
614
- this.renderer.setStyle(this.element.nativeElement, 'display', this.tool.overflowDisplay);
647
+ this.renderer.setStyle(this.internalComponentRef, 'display', this.tool.overflowDisplay);
615
648
  }
649
+ this.updateTools();
616
650
  }
617
651
  }
618
- /**
619
- * @hidden
620
- */
621
652
  setAttribute(element, attr, value) {
622
653
  this.renderer.setAttribute(element, attr, value);
623
654
  }
655
+ updateTools() {
656
+ const isInToolbar = this.toolsService.renderedTools.some(t => t.tool === this.tool);
657
+ const isInPopup = this.toolsService.overflowTools.some(t => t.tool === this.tool);
658
+ if (this.location === 'toolbar') {
659
+ isInPopup && (this.toolsService.overflowTools = this.toolsService.overflowTools.filter(t => t.tool !== this.tool));
660
+ !isInToolbar && this.toolsService.renderedTools.push(this);
661
+ }
662
+ else {
663
+ if (!isInPopup) {
664
+ this.toolsService.overflowTools.push(this);
665
+ this.toolsService.overflowTools.sort((t1, t2) => {
666
+ // ensures correct navigation order in Popup
667
+ return this.toolsService.allTools.indexOf(t1.tool) - this.toolsService.allTools.indexOf(t2.tool);
668
+ });
669
+ }
670
+ }
671
+ }
624
672
  }
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"] }] });
673
+ 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 });
674
+ 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
675
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolBarRendererComponent, decorators: [{
635
- type: Component,
676
+ type: Directive,
636
677
  args: [{
637
- exportAs: 'kendoToolBarRenderer',
638
678
  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
679
  standalone: true,
649
- imports: [NgIf, NgTemplateOutlet]
680
+ selector: '[kendoToolbarRenderer]'
650
681
  }]
651
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: RendererService }, { type: RefreshService }]; }, propDecorators: { tool: [{
682
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: RendererService }, { type: RefreshService }, { type: ToolbarToolsService }, { type: i0.ViewContainerRef }, { type: NavigationService }]; }, propDecorators: { tool: [{
652
683
  type: Input
653
684
  }], location: [{
654
685
  type: Input
@@ -656,15 +687,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
656
687
  type: Input
657
688
  }], rendererClick: [{
658
689
  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
690
  }] } });
669
691
 
670
692
  /**
@@ -728,7 +750,7 @@ const getInitialPopupSettings = (isRtl) => ({
728
750
  class ToolBarComponent {
729
751
  constructor(localization, popupService, refreshService, navigationService,
730
752
  // Needs to be public as it is being accessed in the Editor component
731
- element, zone, renderer, _cdr) {
753
+ element, zone, renderer, _cdr, toolsService) {
732
754
  this.localization = localization;
733
755
  this.popupService = popupService;
734
756
  this.refreshService = refreshService;
@@ -737,6 +759,7 @@ class ToolBarComponent {
737
759
  this.zone = zone;
738
760
  this.renderer = renderer;
739
761
  this._cdr = _cdr;
762
+ this.toolsService = toolsService;
740
763
  /**
741
764
  * Hides the overflowing tools in a popup.
742
765
  */
@@ -875,7 +898,16 @@ class ToolBarComponent {
875
898
  get resizableClass() {
876
899
  return this.overflow;
877
900
  }
901
+ ngAfterContentInit() {
902
+ this.toolsService.allTools = this.allTools.toArray();
903
+ this.subscriptions.add(this.allTools.changes.subscribe(changes => {
904
+ this.toolsService.allTools = this.allTools.toArray();
905
+ this.zone.onStable.pipe(take(1)).subscribe(() => this.onResize());
906
+ }));
907
+ }
878
908
  ngAfterViewInit() {
909
+ this.toolsService.renderedToolsChange.next(this.toolsService.renderedTools);
910
+ this.toolsService.overflowToolsChange.next(this.toolsService.overflowTools);
879
911
  const element = this.element.nativeElement;
880
912
  if (!element.getAttribute('tabindex')) {
881
913
  this.element.nativeElement.setAttribute('tabindex', '0');
@@ -927,7 +959,7 @@ class ToolBarComponent {
927
959
  });
928
960
  });
929
961
  if (this.overflow) {
930
- this.subscriptions.add(merge(this.resizeSensor.resize, this.renderedTools.changes).subscribe(() => this.onResize()));
962
+ this.subscriptions.add(merge(this.resizeSensor.resize, this.toolsService.renderedToolsChange).subscribe(() => this.onResize()));
931
963
  this.navigationService.overflowButton = this.overflowButton;
932
964
  // because of https://github.com/telerik/kendo-angular-buttons/pull/276
933
965
  // button icons are not rendered until onResize() is called
@@ -939,8 +971,7 @@ class ToolBarComponent {
939
971
  });
940
972
  });
941
973
  }
942
- this.navigationService.setRenderedTools(this.renderedTools.toArray());
943
- this.subscriptions.add(this.renderedTools.changes.subscribe((rts) => this.navigationService.setRenderedTools(rts.toArray())));
974
+ this.navigationService.setRenderedTools(this.toolsService.renderedTools);
944
975
  this.handleClasses(this.size, 'size');
945
976
  }
946
977
  ngOnInit() {
@@ -1044,7 +1075,6 @@ class ToolBarComponent {
1044
1075
  onPopupOpen() {
1045
1076
  this.zone.runOutsideAngular(() => {
1046
1077
  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
1078
  switch (ev.keyCode) {
1049
1079
  case Keys.ArrowUp:
1050
1080
  this.zone.run(() => {
@@ -1072,7 +1102,7 @@ class ToolBarComponent {
1072
1102
  case Keys.Enter:
1073
1103
  case Keys.Space:
1074
1104
  this.zone.run(() => {
1075
- if (currentTool) {
1105
+ if (ev.target.closest('.k-menu-item')) {
1076
1106
  ev.preventDefault();
1077
1107
  ev.target.click();
1078
1108
  ev.target.focus();
@@ -1085,11 +1115,11 @@ class ToolBarComponent {
1085
1115
  });
1086
1116
  });
1087
1117
  this.cancelRenderedToolsSubscription$.next();
1118
+ this.navigationService.setRenderedTools(this.toolsService.overflowTools);
1088
1119
  this.navigationService.moveFocusToPopup();
1089
- this.navigationService.setRenderedTools(this.overflowRenderedTools.toArray());
1090
- this.overflowRenderedTools.changes
1120
+ this.toolsService.overflowToolsChange
1091
1121
  .pipe(takeUntil(this.cancelRenderedToolsSubscription$))
1092
- .subscribe((rts) => this.navigationService.setRenderedTools(rts.toArray()));
1122
+ .subscribe((rts) => this.navigationService.setRenderedTools(rts));
1093
1123
  this.renderer.setAttribute(this.overflowButton.nativeElement, 'aria-controls', this.popupId);
1094
1124
  }
1095
1125
  /**
@@ -1097,10 +1127,10 @@ class ToolBarComponent {
1097
1127
  */
1098
1128
  onPopupClose() {
1099
1129
  this.cancelRenderedToolsSubscription$.next();
1100
- this.navigationService.setRenderedTools(this.renderedTools.toArray());
1101
- this.renderedTools.changes
1130
+ this.navigationService.setRenderedTools(this.toolsService.renderedTools);
1131
+ this.toolsService.renderedToolsChange
1102
1132
  .pipe(takeUntil(this.cancelRenderedToolsSubscription$))
1103
- .subscribe((rts) => this.navigationService.setRenderedTools(rts.toArray()));
1133
+ .subscribe((rts) => this.navigationService.setRenderedTools(rts));
1104
1134
  this.navigationService.moveFocusToToolBar();
1105
1135
  if (this.overflowKeydownListener) {
1106
1136
  this.overflowKeydownListener();
@@ -1141,7 +1171,7 @@ class ToolBarComponent {
1141
1171
  return this.cachedGap;
1142
1172
  }
1143
1173
  get childrenWidth() {
1144
- const width = this.renderedTools.reduce((totalWidth, tool) => tool.width + totalWidth + (tool.isDisplayed() ? this.gap : 0), 0);
1174
+ const width = this.toolsService.renderedTools.reduce((totalWidth, tool) => tool.width + totalWidth + (tool.isDisplayed() ? this.gap : 0), 0);
1145
1175
  return Math.ceil(width);
1146
1176
  }
1147
1177
  get visibleTools() {
@@ -1184,7 +1214,10 @@ class ToolBarComponent {
1184
1214
  }
1185
1215
  hideLastVisibleTool() {
1186
1216
  const tool = this.visibleTools[this.visibleTools.length - 1];
1187
- const renderedElement = this.renderedTools.find((r) => {
1217
+ if (!tool) {
1218
+ return null;
1219
+ }
1220
+ const renderedElement = this.toolsService.renderedTools.find((r) => {
1188
1221
  return r.tool === tool;
1189
1222
  });
1190
1223
  const width = renderedElement.width;
@@ -1194,18 +1227,20 @@ class ToolBarComponent {
1194
1227
  }
1195
1228
  showFirstHiddenTool(containerWidth, childrenWidth) {
1196
1229
  const tool = this.overflowTools[0];
1197
- const renderedElement = this.renderedTools.find(r => r.tool === tool);
1230
+ if (!tool) {
1231
+ return null;
1232
+ }
1233
+ const renderedElement = this.toolsService.renderedTools.find((r) => r.tool === tool);
1198
1234
  tool.overflows = false;
1199
1235
  tool.visibility = 'hidden';
1200
1236
  this.refreshService.refresh(tool);
1201
1237
  if (containerWidth > childrenWidth + renderedElement.width) {
1202
1238
  tool.visibility = 'visible';
1203
- this.refreshService.refresh(tool);
1204
1239
  }
1205
1240
  else {
1206
1241
  tool.overflows = true;
1207
- this.refreshService.refresh(tool);
1208
1242
  }
1243
+ this.refreshService.refresh(tool);
1209
1244
  return renderedElement.width; // returns 0 if `overflows` is true
1210
1245
  }
1211
1246
  setPopupContentDimensions() {
@@ -1250,30 +1285,29 @@ class ToolBarComponent {
1250
1285
  return classes;
1251
1286
  }
1252
1287
  }
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 });
1288
+ 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
1289
  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
1290
  RefreshService,
1256
1291
  NavigationService,
1257
1292
  LocalizationService,
1293
+ ToolbarToolsService,
1258
1294
  {
1259
1295
  provide: L10N_PREFIX,
1260
1296
  useValue: 'kendo.toolbar'
1261
1297
  }
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: `
1298
+ ], 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
1299
  <ng-container kendoToolbarLocalizedMessages
1264
1300
  i18n-moreToolsTitle="kendo.toolbar.moreToolsTitle|The title of the **more tools** button in a responsive ToolBar"
1265
1301
  moreToolsTitle="More tools"
1266
1302
  >
1267
1303
  </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>
1304
+ <ng-container *ngFor="let tool of allTools; let index = index"
1305
+ kendoToolbarRenderer
1306
+ [tool]="tool"
1307
+ location="toolbar"
1308
+ [resizable]="overflow"
1309
+ (rendererClick)="onRendererClick($event)"
1310
+ [ngTemplateOutlet]="tool.toolbarTemplate"></ng-container>
1277
1311
  <button
1278
1312
  kendoButton
1279
1313
  fillMode="flat"
@@ -1302,20 +1336,19 @@ ToolBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", versi
1302
1336
  role="menu"
1303
1337
  [id]="popupId"
1304
1338
  [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>
1339
+ <ng-template
1340
+ *ngFor="let tool of overflowTools; let index = index"
1341
+ kendoToolbarRenderer
1342
+ [tool]="tool"
1343
+ location="overflow"
1344
+ [resizable]="overflow"
1345
+ (rendererClick)="onRendererClick($event)"
1346
+ [ngTemplateOutlet]="tool.popupTemplate"></ng-template>
1314
1347
  </div>
1315
1348
  </ng-template>
1316
1349
  <ng-container #container></ng-container>
1317
1350
  <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"] }] });
1351
+ `, 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
1352
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolBarComponent, decorators: [{
1320
1353
  type: Component,
1321
1354
  args: [{
@@ -1324,6 +1357,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
1324
1357
  RefreshService,
1325
1358
  NavigationService,
1326
1359
  LocalizationService,
1360
+ ToolbarToolsService,
1327
1361
  {
1328
1362
  provide: L10N_PREFIX,
1329
1363
  useValue: 'kendo.toolbar'
@@ -1336,15 +1370,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
1336
1370
  moreToolsTitle="More tools"
1337
1371
  >
1338
1372
  </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>
1373
+ <ng-container *ngFor="let tool of allTools; let index = index"
1374
+ kendoToolbarRenderer
1375
+ [tool]="tool"
1376
+ location="toolbar"
1377
+ [resizable]="overflow"
1378
+ (rendererClick)="onRendererClick($event)"
1379
+ [ngTemplateOutlet]="tool.toolbarTemplate"></ng-container>
1348
1380
  <button
1349
1381
  kendoButton
1350
1382
  fillMode="flat"
@@ -1373,24 +1405,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
1373
1405
  role="menu"
1374
1406
  [id]="popupId"
1375
1407
  [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>
1408
+ <ng-template
1409
+ *ngFor="let tool of overflowTools; let index = index"
1410
+ kendoToolbarRenderer
1411
+ [tool]="tool"
1412
+ location="overflow"
1413
+ [resizable]="overflow"
1414
+ (rendererClick)="onRendererClick($event)"
1415
+ [ngTemplateOutlet]="tool.popupTemplate"></ng-template>
1385
1416
  </div>
1386
1417
  </ng-template>
1387
1418
  <ng-container #container></ng-container>
1388
1419
  <kendo-resize-sensor *ngIf="overflow" #resizeSensor></kendo-resize-sensor>
1389
1420
  `,
1390
1421
  standalone: true,
1391
- imports: [LocalizedToolbarMessagesDirective, NgFor, ToolBarRendererComponent, NgIf, ButtonComponent, NgClass, ResizeSensorComponent]
1422
+ imports: [NgTemplateOutlet, LocalizedToolbarMessagesDirective, NgFor, ToolBarRendererComponent, NgIf, ButtonComponent, NgClass, ResizeSensorComponent]
1392
1423
  }]
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: [{
1424
+ }], 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
1425
  type: Input
1395
1426
  }], resizable: [{
1396
1427
  type: Input
@@ -1422,12 +1453,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
1422
1453
  }], container: [{
1423
1454
  type: ViewChild,
1424
1455
  args: ['container', { read: ViewContainerRef, static: true }]
1425
- }], renderedTools: [{
1426
- type: ViewChildren,
1427
- args: ['toolbarRenderer']
1428
- }], overflowRenderedTools: [{
1429
- type: ViewChildren,
1430
- args: ['overflowRenderer']
1431
1456
  }], hostClass: [{
1432
1457
  type: HostBinding,
1433
1458
  args: ['class.k-toolbar']
@@ -2013,8 +2038,9 @@ ToolBarButtonGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.
2013
2038
  </kendo-buttongroup>
2014
2039
  </ng-template>
2015
2040
  <ng-template #popupTemplate>
2016
- <ng-container *ngFor="let button of buttonComponents">
2017
- <div #listItem
2041
+ <div
2042
+ *ngFor="let button of buttonComponents"
2043
+ #listItem
2018
2044
  tabindex="-1"
2019
2045
  role="menuitem"
2020
2046
  class="k-item k-menu-item"
@@ -2035,7 +2061,6 @@ ToolBarButtonGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.
2035
2061
  <span *ngIf="button.overflowOptions.text" class="k-menu-link-text">{{button.overflowOptions.text}}</span>
2036
2062
  </span>
2037
2063
  </div>
2038
- </ng-container>
2039
2064
  </ng-template>
2040
2065
  `, 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
2066
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolBarButtonGroupComponent, decorators: [{
@@ -2082,8 +2107,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
2082
2107
  </kendo-buttongroup>
2083
2108
  </ng-template>
2084
2109
  <ng-template #popupTemplate>
2085
- <ng-container *ngFor="let button of buttonComponents">
2086
- <div #listItem
2110
+ <div
2111
+ *ngFor="let button of buttonComponents"
2112
+ #listItem
2087
2113
  tabindex="-1"
2088
2114
  role="menuitem"
2089
2115
  class="k-item k-menu-item"
@@ -2104,7 +2130,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
2104
2130
  <span *ngIf="button.overflowOptions.text" class="k-menu-link-text">{{button.overflowOptions.text}}</span>
2105
2131
  </span>
2106
2132
  </div>
2107
- </ng-container>
2108
2133
  </ng-template>
2109
2134
  `,
2110
2135
  standalone: true,
@@ -3207,14 +3232,22 @@ class ToolBarSpacerComponent extends ToolBarToolComponent {
3207
3232
  }
3208
3233
  }
3209
3234
  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 });
3235
+ 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: `
3236
+ <ng-template #toolbarTemplate>
3237
+ <div class="k-spacer"></div>
3238
+ </ng-template>
3239
+ `, isInline: true });
3211
3240
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolBarSpacerComponent, decorators: [{
3212
3241
  type: Component,
3213
3242
  args: [{
3214
3243
  exportAs: 'kendoToolBarSpacer',
3215
3244
  providers: [{ provide: ToolBarToolComponent, useExisting: forwardRef(() => ToolBarSpacerComponent) }],
3216
3245
  selector: 'kendo-toolbar-spacer',
3217
- template: ``,
3246
+ template: `
3247
+ <ng-template #toolbarTemplate>
3248
+ <div class="k-spacer"></div>
3249
+ </ng-template>
3250
+ `,
3218
3251
  standalone: true
3219
3252
  }]
3220
3253
  }], ctorParameters: function () { return []; }, propDecorators: { toolbarTemplate: [{
@@ -3291,7 +3324,7 @@ class ToolBarModule {
3291
3324
  }
3292
3325
  ToolBarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolBarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
3293
3326
  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] });
3327
+ 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
3328
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToolBarModule, decorators: [{
3296
3329
  type: NgModule,
3297
3330
  args: [{