@progress/kendo-angular-toolbar 18.1.0-develop.29 → 18.1.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.
Files changed (36) hide show
  1. package/esm2022/localization/messages.mjs +2 -14
  2. package/esm2022/navigation.service.mjs +3 -5
  3. package/esm2022/package-metadata.mjs +2 -2
  4. package/esm2022/renderer.component.mjs +0 -8
  5. package/esm2022/toolbar.component.mjs +124 -716
  6. package/esm2022/tools/toolbar-button.component.mjs +2 -62
  7. package/esm2022/tools/toolbar-buttongroup.component.mjs +6 -87
  8. package/esm2022/tools/toolbar-dropdownbutton.component.mjs +11 -67
  9. package/esm2022/tools/toolbar-separator.component.mjs +0 -8
  10. package/esm2022/tools/toolbar-splitbutton.component.mjs +5 -61
  11. package/esm2022/tools/toolbar-tool.component.mjs +1 -9
  12. package/esm2022/tools/tools.service.mjs +0 -3
  13. package/esm2022/util.mjs +0 -17
  14. package/fesm2022/progress-kendo-angular-toolbar.mjs +155 -1300
  15. package/index.d.ts +0 -3
  16. package/localization/messages.d.ts +2 -10
  17. package/package.json +9 -9
  18. package/render-location.d.ts +1 -1
  19. package/toolbar.component.d.ts +6 -77
  20. package/tools/toolbar-button.component.d.ts +0 -1
  21. package/tools/toolbar-buttongroup.component.d.ts +0 -1
  22. package/tools/toolbar-dropdownbutton.component.d.ts +1 -2
  23. package/tools/toolbar-splitbutton.component.d.ts +0 -1
  24. package/tools/toolbar-tool.component.d.ts +0 -6
  25. package/tools/tools.service.d.ts +0 -1
  26. package/util.d.ts +0 -5
  27. package/common/overflow-mode.d.ts +0 -8
  28. package/common/overflow-settings.d.ts +0 -53
  29. package/common/scroll-buttons.d.ts +0 -12
  30. package/esm2022/common/overflow-mode.mjs +0 -5
  31. package/esm2022/common/overflow-settings.mjs +0 -5
  32. package/esm2022/common/scroll-buttons.mjs +0 -5
  33. package/esm2022/scroll.service.mjs +0 -102
  34. package/esm2022/scrollable-button.component.mjs +0 -162
  35. package/scroll.service.d.ts +0 -42
  36. package/scrollable-button.component.d.ts +0 -44
@@ -12,7 +12,7 @@ import { packageMetadata } from './package-metadata';
12
12
  import { RefreshService } from './refresh.service';
13
13
  import { NavigationService } from './navigation.service';
14
14
  import { ToolBarToolComponent } from './tools/toolbar-tool.component';
15
- import { innerWidth, closest, isPresent, getStylingClasses, SIZES, normalizeOverflowSettings } from './util';
15
+ import { innerWidth, closest, isPresent, getStylingClasses, SIZES } from './util';
16
16
  import { Keys } from '@progress/kendo-angular-common';
17
17
  import { PreventableEvent } from './common/preventable-event';
18
18
  import { ToolBarRendererComponent } from './renderer.component';
@@ -20,20 +20,17 @@ import { Subscription, fromEvent, Subject, merge } from 'rxjs';
20
20
  import { take, takeUntil } from 'rxjs/operators';
21
21
  import { filter } from 'rxjs/operators';
22
22
  import { isDocumentAvailable } from '@progress/kendo-angular-common';
23
- import { caretAltLeftIcon, caretAltRightIcon, moreHorizontalIcon, moreVerticalIcon } from '@progress/kendo-svg-icons';
24
- import { ButtonComponent, ButtonGroupComponent } from '@progress/kendo-angular-buttons';
23
+ import { moreVerticalIcon } from '@progress/kendo-svg-icons';
24
+ import { ButtonComponent } from '@progress/kendo-angular-buttons';
25
25
  import { NgFor, NgIf, NgClass, NgTemplateOutlet } from '@angular/common';
26
26
  import { LocalizedToolbarMessagesDirective } from './localization/localized-toolbar-messages.directive';
27
27
  import { ToolbarToolsService } from './tools/tools.service';
28
- import { ScrollService } from './scroll.service';
29
- import { ToolbarScrollableButtonComponent } from './scrollable-button.component';
30
28
  import * as i0 from "@angular/core";
31
29
  import * as i1 from "@progress/kendo-angular-l10n";
32
30
  import * as i2 from "@progress/kendo-angular-popup";
33
31
  import * as i3 from "./refresh.service";
34
32
  import * as i4 from "./navigation.service";
35
33
  import * as i5 from "./tools/tools.service";
36
- import * as i6 from "./scroll.service";
37
34
  const DEFAULT_SIZE = 'medium';
38
35
  const DEFAULT_FILL_MODE = 'solid';
39
36
  const immediateResizeThreshold = 300;
@@ -55,27 +52,13 @@ export class ToolBarComponent {
55
52
  renderer;
56
53
  _cdr;
57
54
  toolsService;
58
- scrollService;
59
55
  get overflowClass() {
60
56
  return `k-button-${SIZES[this.size]}`;
61
57
  }
62
58
  /**
63
- * Configures the overflow mode. Used to specify how tools will be rendered when the total size of all tools is greater than the size of the Toolbar container.
64
- * @default false
59
+ * Hides the overflowing tools in a popup.
65
60
  */
66
- set overflow(overflow) {
67
- this._overflow = overflow;
68
- this.zone.onStable.pipe(take(1)).subscribe(() => this.onResize());
69
- }
70
- get overflow() {
71
- return this._overflow;
72
- }
73
- get show() {
74
- const buttonsVisibility = this.normalizedOverflow.scrollButtons;
75
- const showAuto = buttonsVisibility === 'auto' && this.showAutoButtons;
76
- const showAlways = buttonsVisibility === 'visible';
77
- return this.isScrollMode && (showAuto || showAlways);
78
- }
61
+ overflow = false;
79
62
  /**
80
63
  * @hidden
81
64
  */
@@ -83,39 +66,10 @@ export class ToolBarComponent {
83
66
  this.overflow = value;
84
67
  }
85
68
  get resizable() {
86
- return this.showMenu;
87
- }
88
- /**
89
- * @hidden
90
- */
91
- get hasScrollButtons() {
92
- const visible = this.normalizedOverflow.mode === 'scroll' && this.normalizedOverflow.scrollButtons !== 'hidden';
93
- const position = this.normalizedOverflow.scrollButtonsPosition;
94
- return {
95
- visible,
96
- position
97
- };
98
- }
99
- /**
100
- * @hidden
101
- */
102
- get isScrollMode() {
103
- return this.normalizedOverflow.mode === 'scroll';
104
- }
105
- /**
106
- * @hidden
107
- */
108
- get showMenu() {
109
- return this.normalizedOverflow.mode === 'menu' || this.normalizedOverflow.mode === 'section';
110
- }
111
- /**
112
- * @hidden
113
- */
114
- get overflowEnabled() {
115
- return this.normalizedOverflow.mode !== 'none';
69
+ return this.overflow;
116
70
  }
117
71
  /**
118
- * Configures the popup of the ToolBar overflow button ([see example](slug:responsive_toolbar#customizing-the-popup)).
72
+ * Configures the popup of the ToolBar overflow button ([see example]({% slug responsive_toolbar %}#toc-popup-customization)).
119
73
  *
120
74
  * The available options are:
121
75
  * - `animate: Boolean`—Controls the popup animation. By default, the open and close animations are enabled.
@@ -182,15 +136,8 @@ export class ToolBarComponent {
182
136
  allTools;
183
137
  overflowButton;
184
138
  popupTemplate;
185
- popupSectionTemplate;
186
- scrollContainer;
187
139
  resizeSensor;
188
140
  container;
189
- prevScrollButton;
190
- nextScrollButton;
191
- startButtonGroup;
192
- endButtonGroup;
193
- scrollSeparator;
194
141
  popupRef;
195
142
  direction;
196
143
  get appendTo() {
@@ -219,40 +166,17 @@ export class ToolBarComponent {
219
166
  get popupOpen() {
220
167
  return this._open;
221
168
  }
222
- /**
223
- * @hidden
224
- */
225
- prevButtonIcon = caretAltLeftIcon;
226
- /**
227
- * @hidden
228
- */
229
- nextButtonIcon = caretAltRightIcon;
230
169
  hostClass = true;
231
- get scrollableClass() {
232
- return this.isScrollMode;
233
- }
234
- get sectionClass() {
235
- return this.normalizedOverflow.mode === 'section';
236
- }
237
- _overflow = false;
238
170
  _popupSettings;
239
171
  cachedOverflowAnchorWidth;
240
172
  _open;
241
173
  toolbarKeydownListener;
242
174
  overflowKeydownListener;
243
- sectionKeydownListener;
244
175
  cancelRenderedToolsSubscription$ = new Subject();
245
176
  cachedGap;
246
177
  _size = DEFAULT_SIZE;
247
178
  _fillMode = DEFAULT_FILL_MODE;
248
179
  overflowButtonClickedTime = null;
249
- showAutoButtons = false;
250
- /**
251
- * @hidden
252
- */
253
- get normalizedOverflow() {
254
- return normalizeOverflowSettings(this.overflow);
255
- }
256
180
  subscriptions = new Subscription();
257
181
  popupSubs = new Subscription();
258
182
  /**
@@ -280,11 +204,12 @@ export class ToolBarComponent {
280
204
  return this.direction;
281
205
  }
282
206
  get resizableClass() {
283
- return this.resizable;
207
+ return this.overflow;
284
208
  }
209
+ moreVerticalIcon = moreVerticalIcon;
285
210
  constructor(localization, popupService, refreshService, navigationService,
286
211
  // Needs to be public as it is being accessed in the Editor component
287
- element, zone, renderer, _cdr, toolsService, scrollService) {
212
+ element, zone, renderer, _cdr, toolsService) {
288
213
  this.localization = localization;
289
214
  this.popupService = popupService;
290
215
  this.refreshService = refreshService;
@@ -294,19 +219,13 @@ export class ToolBarComponent {
294
219
  this.renderer = renderer;
295
220
  this._cdr = _cdr;
296
221
  this.toolsService = toolsService;
297
- this.scrollService = scrollService;
298
222
  validatePackage(packageMetadata);
299
223
  this.direction = localization.rtl ? 'rtl' : 'ltr';
300
- this.scrollService.owner = this;
301
224
  }
302
225
  ngAfterContentInit() {
303
226
  this.toolsService.allTools = this.allTools.toArray();
304
227
  this.subscriptions.add(this.allTools.changes.subscribe(() => {
305
- this.toolsService.reset();
306
228
  this.toolsService.allTools = this.allTools.toArray();
307
- this.allTools.forEach((tool) => {
308
- this.refreshService.refresh(tool);
309
- });
310
229
  this.zone.onStable.pipe(take(1)).subscribe(() => this.onResize());
311
230
  }));
312
231
  }
@@ -363,11 +282,9 @@ export class ToolBarComponent {
363
282
  }
364
283
  });
365
284
  });
366
- if (this.overflowEnabled) {
285
+ if (this.overflow) {
367
286
  this.subscriptions.add(merge(this.resizeSensor.resize, this.toolsService.renderedToolsChange).subscribe(() => this.onResize()));
368
- if (this.showMenu) {
369
- this.navigationService.overflowButton = this.overflowButton;
370
- }
287
+ this.navigationService.overflowButton = this.overflowButton;
371
288
  // because of https://github.com/telerik/kendo-angular-buttons/pull/276
372
289
  // button icons are not rendered until onResize() is called
373
290
  this.zone.runOutsideAngular(() => {
@@ -378,38 +295,6 @@ export class ToolBarComponent {
378
295
  });
379
296
  });
380
297
  }
381
- if (this.isScrollMode) {
382
- if (this.show) {
383
- if (this.normalizedOverflow.scrollButtons === 'visible' && !this.scrollService.toolsOverflow) {
384
- this.renderer.addClass(this.nextScrollButton.nativeElement, 'k-disabled');
385
- this.renderer.addClass(this.prevScrollButton.nativeElement, 'k-disabled');
386
- }
387
- else {
388
- const buttonToDisable = this.direction === 'rtl' ? this.nextScrollButton : this.prevScrollButton;
389
- this.renderer.addClass(buttonToDisable.nativeElement, 'k-disabled');
390
- }
391
- }
392
- if (this.hasScrollButtons.visible) {
393
- this.subscriptions.add(this.scrollService.scrollButtonActiveStateChange.subscribe((activeButtonSettings) => {
394
- if (this.show) {
395
- const action = activeButtonSettings.active ? 'remove' : 'add';
396
- const scrollButton = this[`${activeButtonSettings.buttonType}ScrollButton`].nativeElement;
397
- this.renderer[`${action}Class`](scrollButton, 'k-disabled');
398
- action === 'add' && this[`${activeButtonSettings.buttonType}ScrollButton`].nativeElement.blur();
399
- }
400
- }));
401
- }
402
- this.zone.runOutsideAngular(() => {
403
- this.subscriptions.add(this.renderer.listen(this.scrollContainer.nativeElement, 'scroll', (e) => {
404
- if (!this.hasScrollButtons.visible) {
405
- this.setScrollableOverlayClasses();
406
- }
407
- else {
408
- this.scrollService.onScroll(e);
409
- }
410
- }));
411
- });
412
- }
413
298
  this.navigationService.setRenderedTools(this.toolsService.renderedTools);
414
299
  const stylingOptions = ['size', 'fillMode'];
415
300
  stylingOptions.forEach(option => {
@@ -443,10 +328,6 @@ export class ToolBarComponent {
443
328
  this.cancelRenderedToolsSubscription$.next();
444
329
  this.subscriptions.unsubscribe();
445
330
  }
446
- /**
447
- * @hidden
448
- */
449
- showOverflowSeparator = false;
450
331
  /**
451
332
  * @hidden
452
333
  */
@@ -459,31 +340,6 @@ export class ToolBarComponent {
459
340
  get cdr() {
460
341
  return this._cdr;
461
342
  }
462
- /**
463
- * @hidden
464
- */
465
- get sectionSizeClass() {
466
- return this.size === 'none' ? '' : `k-toolbar-items-list-${SIZES[this.size]}`;
467
- }
468
- /**
469
- * @hidden
470
- */
471
- getScrollButtonTitle(buttonType) {
472
- let currentButton;
473
- if (this.localization.rtl) {
474
- currentButton = buttonType === 'prev' ? 'nextToolButton' : 'previousToolButton';
475
- }
476
- else {
477
- currentButton = buttonType === 'prev' ? 'previousToolButton' : 'nextToolButton';
478
- }
479
- return this.localization.get(currentButton);
480
- }
481
- /**
482
- * @hidden
483
- */
484
- scrollTools(dir) {
485
- this.scrollService.scrollTools(dir);
486
- }
487
343
  /**
488
344
  * @hidden
489
345
  */
@@ -491,17 +347,6 @@ export class ToolBarComponent {
491
347
  this.navigationService.click(data);
492
348
  this.element.nativeElement.setAttribute('tabindex', '-1');
493
349
  }
494
- /**
495
- * @hidden
496
- */
497
- overflowButtonIcon(iconType) {
498
- if (iconType === 'svg') {
499
- return this.normalizedOverflow.mode === 'section' ? moreHorizontalIcon : moreVerticalIcon;
500
- }
501
- else {
502
- return this.normalizedOverflow.mode === 'section' ? 'more-horizontal' : 'more-vertical';
503
- }
504
- }
505
350
  /**
506
351
  * @hidden
507
352
  */
@@ -520,30 +365,17 @@ export class ToolBarComponent {
520
365
  this.popupRef = null;
521
366
  }
522
367
  if (this.popupOpen) {
523
- let settings;
524
- const isSection = this.normalizedOverflow.mode === 'section';
525
- if (isSection) {
526
- settings = {
527
- anchor: this.element.nativeElement,
528
- content: this.popupSectionTemplate,
529
- popupClass: this.normalizePopupClasses(),
530
- positionMode: 'absolute'
531
- };
532
- }
533
- else {
534
- settings = {
535
- anchor: this.overflowButton,
536
- anchorAlign: this.popupSettings.anchorAlign,
537
- popupAlign: this.popupSettings.popupAlign,
538
- content: this.popupTemplate,
539
- appendTo: this.appendTo,
540
- animate: this.popupSettings.animate,
541
- popupClass: this.normalizePopupClasses(this.popupSettings.popupClass),
542
- positionMode: 'absolute'
543
- };
544
- }
545
- this.popupRef = this.popupService.open(settings);
546
- this.setPopupContentDimensions(isSection);
368
+ this.popupRef = this.popupService.open({
369
+ anchor: this.overflowButton,
370
+ anchorAlign: this.popupSettings.anchorAlign,
371
+ popupAlign: this.popupSettings.popupAlign,
372
+ content: this.popupTemplate,
373
+ appendTo: this.appendTo,
374
+ animate: this.popupSettings.animate,
375
+ popupClass: this.normalizePopupClasses(this.popupSettings.popupClass),
376
+ positionMode: 'absolute'
377
+ });
378
+ this.setPopupContentDimensions();
547
379
  this.popupSubs.add(this.popupRef.popupOpen.subscribe(this.onPopupOpen.bind(this)));
548
380
  this.popupSubs.add(this.popupRef.popupClose.subscribe(this.onPopupClose.bind(this)));
549
381
  }
@@ -553,51 +385,15 @@ export class ToolBarComponent {
553
385
  */
554
386
  onResize() {
555
387
  if (isDocumentAvailable()) {
556
- if (this.showMenu) {
557
- const containerWidth = innerWidth(this.element.nativeElement) - this.overflowAnchorWidth;
558
- this.shrink(containerWidth, this.childrenWidth);
559
- this.stretch(containerWidth, this.childrenWidth);
560
- this.displayAnchor();
561
- const isImmediateResize = (Date.now() - this.overflowButtonClickedTime) < immediateResizeThreshold;
562
- if (this.popupOpen && !isImmediateResize) {
563
- this.toggle();
564
- }
565
- }
566
- else if (this.isScrollMode) {
567
- if (this.normalizedOverflow.scrollButtons === 'auto') {
568
- const containerWidth = innerWidth(this.element.nativeElement);
569
- let scrollButtonsWidth = 0;
570
- if (this.showAutoButtons) {
571
- const separatorWidth = this.scrollSeparator.nativeElement.getBoundingClientRect().width + 2 * this.gap;
572
- if (this.hasScrollButtons.position === 'split') {
573
- scrollButtonsWidth = innerWidth(this.prevScrollButton.nativeElement) + innerWidth(this.nextScrollButton.nativeElement) + 2 * separatorWidth;
574
- }
575
- else if (this.hasScrollButtons.position === 'end') {
576
- scrollButtonsWidth = innerWidth(this.endButtonGroup.nativeElement) + separatorWidth;
577
- }
578
- else {
579
- scrollButtonsWidth = innerWidth(this.startButtonGroup.nativeElement) + separatorWidth;
580
- }
581
- }
582
- const shouldShowButtons = (this.childrenWidth + scrollButtonsWidth) > containerWidth;
583
- if (shouldShowButtons !== this.showAutoButtons) {
584
- this.showAutoButtons = shouldShowButtons;
585
- this.cdr.detectChanges();
586
- }
587
- this.scrollService.toggleScrollButtonsState();
588
- }
589
- else if (!this.hasScrollButtons.visible) {
590
- this.setScrollableOverlayClasses();
591
- }
592
- else if (!this.scrollService.toolsOverflow) {
593
- this.renderer.addClass(this.nextScrollButton.nativeElement, 'k-disabled');
594
- this.renderer.addClass(this.prevScrollButton.nativeElement, 'k-disabled');
595
- }
596
- else {
597
- this.scrollService.toggleScrollButtonsState();
598
- }
599
- }
388
+ const containerWidth = innerWidth(this.element.nativeElement) - this.overflowAnchorWidth;
389
+ this.shrink(containerWidth, this.childrenWidth);
390
+ this.stretch(containerWidth, this.childrenWidth);
391
+ this.displayAnchor();
600
392
  this.resizeSensor?.acceptSize();
393
+ const isImmediateResize = (Date.now() - this.overflowButtonClickedTime) < immediateResizeThreshold;
394
+ if (this.popupOpen && !isImmediateResize) {
395
+ this.toggle();
396
+ }
601
397
  }
602
398
  }
603
399
  /**
@@ -605,94 +401,45 @@ export class ToolBarComponent {
605
401
  */
606
402
  onPopupOpen() {
607
403
  this.zone.runOutsideAngular(() => {
608
- if (this.normalizedOverflow.mode === 'section') {
609
- this.sectionKeydownListener = this.renderer.listen(this.popupRef.popupElement, 'keydown', (ev) => {
610
- switch (ev.keyCode) {
611
- case Keys.ArrowLeft:
612
- this.zone.run(() => {
613
- ev.preventDefault();
614
- if (this.direction === 'ltr') {
615
- this.navigationService.focusPrev(ev);
616
- }
617
- else {
618
- this.navigationService.focusNext(ev);
619
- }
620
- // prevents ExpressionChangedAfterItHasBeenCheckedError when tools with popup are opened/closed asynchronously
621
- this.element.nativeElement.setAttribute('tabindex', '-1');
622
- });
623
- break;
624
- case Keys.ArrowRight:
625
- this.zone.run(() => {
626
- ev.preventDefault();
627
- if (this.direction === 'ltr') {
628
- this.navigationService.focusNext(ev);
629
- }
630
- else {
631
- this.navigationService.focusPrev(ev);
632
- }
633
- // prevents ExpressionChangedAfterItHasBeenCheckedError when tools with popup are opened/closed asynchronously
634
- this.element.nativeElement.setAttribute('tabindex', '-1');
635
- });
636
- break;
637
- case Keys.Escape: {
638
- this.zone.run(() => this.toggle(false));
639
- const eventArgs = new PreventableEvent();
640
- this.close.emit(eventArgs);
641
- break;
642
- }
643
- case Keys.Tab:
644
- this.zone.run(() => {
645
- this.toggle(false);
646
- this.navigationService.resetNavigation();
647
- });
648
- break;
649
- default:
650
- break;
651
- }
652
- });
653
- }
654
- else {
655
- this.overflowKeydownListener = this.renderer.listen(this.popupRef.popupElement, 'keydown', (ev) => {
656
- switch (ev.keyCode) {
657
- case Keys.ArrowUp:
658
- this.zone.run(() => {
659
- ev.preventDefault();
660
- this.navigationService.focusPrev(ev);
661
- });
662
- break;
663
- case Keys.ArrowDown:
664
- this.zone.run(() => {
404
+ this.overflowKeydownListener = this.renderer.listen(this.popupRef.popupElement, 'keydown', (ev) => {
405
+ switch (ev.keyCode) {
406
+ case Keys.ArrowUp:
407
+ this.zone.run(() => {
408
+ ev.preventDefault();
409
+ this.navigationService.focusPrev(ev);
410
+ });
411
+ break;
412
+ case Keys.ArrowDown:
413
+ this.zone.run(() => {
414
+ ev.preventDefault();
415
+ this.navigationService.focusNext(ev);
416
+ });
417
+ break;
418
+ case Keys.Escape:
419
+ this.zone.run(() => this.toggle(false));
420
+ const eventArgs = new PreventableEvent();
421
+ this.close.emit(eventArgs);
422
+ break;
423
+ case Keys.Tab:
424
+ this.zone.run(() => {
425
+ this.toggle(false);
426
+ this.navigationService.resetNavigation();
427
+ });
428
+ break;
429
+ case Keys.Enter:
430
+ case Keys.Space:
431
+ this.zone.run(() => {
432
+ if (ev.target.closest('.k-menu-item')) {
665
433
  ev.preventDefault();
666
- this.navigationService.focusNext(ev);
667
- });
668
- break;
669
- case Keys.Escape: {
670
- this.zone.run(() => this.toggle(false));
671
- const eventArgs = new PreventableEvent();
672
- this.close.emit(eventArgs);
673
- break;
674
- }
675
- case Keys.Tab:
676
- this.zone.run(() => {
677
- this.toggle(false);
678
- this.navigationService.resetNavigation();
679
- });
680
- break;
681
- case Keys.Enter:
682
- case Keys.Space:
683
- this.zone.run(() => {
684
- if (ev.target.closest('.k-menu-item')) {
685
- ev.preventDefault();
686
- ev.target.click();
687
- ev.target.focus();
688
- }
689
- });
690
- break;
691
- default:
692
- break;
693
- }
694
- });
695
- }
434
+ ev.target.click();
435
+ ev.target.focus();
436
+ }
437
+ });
438
+ break;
439
+ default:
440
+ break;
441
+ }
442
+ });
696
443
  });
697
444
  this.cancelRenderedToolsSubscription$.next();
698
445
  this.navigationService.setRenderedTools(this.toolsService.overflowTools);
@@ -715,9 +462,6 @@ export class ToolBarComponent {
715
462
  if (this.overflowKeydownListener) {
716
463
  this.overflowKeydownListener();
717
464
  }
718
- if (this.sectionKeydownListener) {
719
- this.sectionKeydownListener();
720
- }
721
465
  this.renderer.removeAttribute(this.overflowButton.nativeElement, 'aria-controls');
722
466
  }
723
467
  /**
@@ -731,11 +475,6 @@ export class ToolBarComponent {
731
475
  displayAnchor() {
732
476
  const visibility = this.allTools.filter(t => t.overflows && t.responsive).length > 0 ? 'visible' : 'hidden';
733
477
  this.overflowButton && this.renderer.setStyle(this.overflowButton.nativeElement, 'visibility', visibility);
734
- const isVisible = visibility === 'visible';
735
- if (isVisible !== this.showOverflowSeparator) {
736
- this.showOverflowSeparator = isVisible;
737
- this.cdr.detectChanges();
738
- }
739
478
  }
740
479
  get popupWidth() {
741
480
  if (!this.popupSettings || !this.popupSettings.width) {
@@ -750,7 +489,7 @@ export class ToolBarComponent {
750
489
  return isNaN(this.popupSettings.height) ? this.popupSettings.height : `${this.popupSettings.height}px`;
751
490
  }
752
491
  get overflowAnchorWidth() {
753
- if (!this.showMenu) {
492
+ if (!this.overflow) {
754
493
  return 0;
755
494
  }
756
495
  if (!this.cachedOverflowAnchorWidth) {
@@ -817,7 +556,7 @@ export class ToolBarComponent {
817
556
  return r.tool === tool;
818
557
  });
819
558
  const width = renderedElement.width;
820
- tool.overflows = this.showMenu;
559
+ tool.overflows = this.overflow;
821
560
  this.refreshService.refresh(tool);
822
561
  return width;
823
562
  }
@@ -839,17 +578,11 @@ export class ToolBarComponent {
839
578
  this.refreshService.refresh(tool);
840
579
  return renderedElement.width; // returns 0 if `overflows` is true
841
580
  }
842
- setPopupContentDimensions(isSection) {
581
+ setPopupContentDimensions() {
843
582
  const popupContentContainer = this.popupRef.popup.instance.contentContainer.nativeElement;
844
- if (isSection) {
845
- const toolbarWidth = this.element.nativeElement.getBoundingClientRect().width;
846
- popupContentContainer.style.width = `${toolbarWidth}px`;
847
- }
848
- else {
849
- popupContentContainer.style.width = this.popupWidth;
850
- popupContentContainer.style.height = this.popupHeight;
851
- popupContentContainer.style.overflow = 'auto';
852
- }
583
+ popupContentContainer.style.width = this.popupWidth;
584
+ popupContentContainer.style.height = this.popupHeight;
585
+ popupContentContainer.style.overflow = 'auto';
853
586
  }
854
587
  destroyPopup() {
855
588
  if (this.popupRef) {
@@ -869,10 +602,7 @@ export class ToolBarComponent {
869
602
  }
870
603
  }
871
604
  normalizePopupClasses(classList) {
872
- let classes = ['k-toolbar-popup'];
873
- if (this.normalizedOverflow.mode === 'menu') {
874
- classes.push('k-menu-popup');
875
- }
605
+ let classes = ['k-menu-popup', 'k-toolbar-popup'];
876
606
  if (!classList) {
877
607
  return classes;
878
608
  }
@@ -889,204 +619,62 @@ export class ToolBarComponent {
889
619
  }
890
620
  return classes;
891
621
  }
892
- setScrollableOverlayClasses() {
893
- const wrapper = this.element.nativeElement;
894
- const container = this.scrollContainer?.nativeElement;
895
- if (!container) {
896
- return;
897
- }
898
- const scrollOffset = container.scrollLeft;
899
- const defaultOffset = 1;
900
- if (this.scrollService.toolsOverflow) {
901
- this.renderer.addClass(wrapper, 'k-toolbar-scrollable-overlay');
902
- if (scrollOffset === 0) {
903
- this.renderer.removeClass(wrapper, 'k-toolbar-scrollable-end');
904
- this.renderer.addClass(wrapper, 'k-toolbar-scrollable-start');
905
- }
906
- else if ((scrollOffset > 0 && scrollOffset < this.scrollService.scrollContainerOverflowSize - defaultOffset) || (scrollOffset < 0 && Math.abs(scrollOffset) < this.scrollService.scrollContainerOverflowSize - defaultOffset)) {
907
- this.renderer.removeClass(wrapper, 'k-toolbar-scrollable-end');
908
- this.renderer.removeClass(wrapper, 'k-toolbar-scrollable-start');
909
- }
910
- else {
911
- this.renderer.removeClass(wrapper, 'k-toolbar-scrollable-start');
912
- this.renderer.addClass(wrapper, 'k-toolbar-scrollable-end');
913
- }
914
- }
915
- else {
916
- this.renderer.removeClass(wrapper, 'k-toolbar-scrollable-overlay');
917
- this.renderer.removeClass(wrapper, 'k-toolbar-scrollable-end');
918
- this.renderer.removeClass(wrapper, 'k-toolbar-scrollable-start');
919
- }
920
- }
921
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ToolBarComponent, deps: [{ token: i1.LocalizationService }, { token: i2.PopupService }, { token: i3.RefreshService }, { token: i4.NavigationService }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i5.ToolbarToolsService }, { token: i6.ScrollService }], target: i0.ɵɵFactoryTarget.Component });
922
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ToolBarComponent, isStandalone: true, selector: "kendo-toolbar", inputs: { overflow: "overflow", resizable: "resizable", popupSettings: "popupSettings", fillMode: "fillMode", 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", "class.k-toolbar-scrollable": "this.scrollableClass", "class.k-toolbar-section": "this.sectionClass", "attr.role": "this.role", "attr.dir": "this.getDir", "class.k-toolbar-resizable": "this.resizableClass" } }, providers: [
622
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ToolBarComponent, deps: [{ token: i1.LocalizationService }, { token: i2.PopupService }, { token: i3.RefreshService }, { token: i4.NavigationService }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i5.ToolbarToolsService }], target: i0.ɵɵFactoryTarget.Component });
623
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ToolBarComponent, isStandalone: true, selector: "kendo-toolbar", inputs: { overflow: "overflow", resizable: "resizable", popupSettings: "popupSettings", fillMode: "fillMode", 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: [
923
624
  RefreshService,
924
625
  NavigationService,
925
626
  LocalizationService,
926
627
  ToolbarToolsService,
927
- ScrollService,
928
628
  {
929
629
  provide: L10N_PREFIX,
930
630
  useValue: 'kendo.toolbar'
931
631
  }
932
- ], 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: "popupSectionTemplate", first: true, predicate: ["popupSectionTemplate"], descendants: true, static: true }, { propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true, read: ElementRef }, { propertyName: "resizeSensor", first: true, predicate: ["resizeSensor"], descendants: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "prevScrollButton", first: true, predicate: ["prevScrollButton"], descendants: true, read: ElementRef }, { propertyName: "nextScrollButton", first: true, predicate: ["nextScrollButton"], descendants: true, read: ElementRef }, { propertyName: "startButtonGroup", first: true, predicate: ["startButtonGroup"], descendants: true, read: ElementRef }, { propertyName: "endButtonGroup", first: true, predicate: ["endButtonGroup"], descendants: true, read: ElementRef }, { propertyName: "scrollSeparator", first: true, predicate: ["scrollSeparator"], descendants: true, read: ElementRef }], exportAs: ["kendoToolBar"], usesOnChanges: true, ngImport: i0, template: `
632
+ ], 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: `
933
633
  <ng-container kendoToolbarLocalizedMessages
934
- i18n-moreToolsTitle="kendo.toolbar.moreToolsTitle|The title of the **more tools** button in a responsive ToolBar"
935
- moreToolsTitle="More tools"
936
-
937
- i18n-previousToolButton="kendo.toolbar.previousToolButton|The title for the **Previous Tool** button when the Toolbar is scrollable."
938
- previousToolButton="Scroll left"
939
-
940
- i18n-nextToolButton="kendo.toolbar.nextToolButton|The title for the **Next Tool** button when the Toolbar is scrollable."
941
- nextToolButton="Scroll right"
634
+ i18n-moreToolsTitle="kendo.toolbar.moreToolsTitle|The title of the **more tools** button in a responsive ToolBar"
635
+ moreToolsTitle="More tools"
942
636
  >
943
637
  </ng-container>
944
- <ng-container *ngIf="show && (hasScrollButtons.position === 'split' || hasScrollButtons.position === 'start')">
945
- <span *ngIf="hasScrollButtons.position === 'split'" #prevScrollButton
946
- kendoToolbarScrollableButton
947
- [prev]="true"
948
- [overflow]="normalizedOverflow"
949
- [title]="getScrollButtonTitle('prev')"
950
- class="k-toolbar-prev k-icon-button k-button k-button-solid k-button-solid-base k-rounded-md"
951
- [ngClass]="{
952
- 'k-button-sm': size === 'small',
953
- 'k-button-md': size === 'medium' || !size,
954
- 'k-button-lg': size === 'large'
955
- }"
956
- (onClick)="scrollTools($event)">
957
- </span>
958
- <div class="k-button-group k-button-group-solid" *ngIf="hasScrollButtons.position === 'start'" #startButtonGroup>
959
- <span #prevScrollButton
960
- kendoToolbarScrollableButton
961
- [prev]="true"
962
- [overflow]="normalizedOverflow"
963
- [title]="getScrollButtonTitle('prev')"
964
- class="k-toolbar-prev k-icon-button k-button k-button-solid k-button-solid-base k-rounded-md"
965
- [ngClass]="{
966
- 'k-button-sm': size === 'small',
967
- 'k-button-md': size === 'medium' || !size,
968
- 'k-button-lg': size === 'large'
969
- }"
970
- (onClick)="scrollTools($event)">
971
- </span>
972
- <span #nextScrollButton
973
- kendoToolbarScrollableButton
974
- [prev]="false"
975
- [overflow]="normalizedOverflow"
976
- [title]="getScrollButtonTitle('next')"
977
- class="k-toolbar-next k-icon-button k-button k-button-solid k-button-solid-base k-rounded-md"
978
- [ngClass]="{
979
- 'k-button-sm': size === 'small',
980
- 'k-button-md': size === 'medium' || !size,
981
- 'k-button-lg': size === 'large'
982
- }"
983
- (onClick)="scrollTools($event)">
984
- </span>
985
- </div>
986
- <div class="k-toolbar-separator k-toolbar-button-separator k-separator" #scrollSeparator></div>
638
+ <ng-container *ngFor="let tool of allTools; let index = index"
639
+ kendoToolbarRenderer
640
+ [tool]="tool"
641
+ location="toolbar"
642
+ [resizable]="overflow"
643
+ (rendererClick)="onRendererClick($event)"
644
+ [ngTemplateOutlet]="tool.isBuiltInTool ? tool.toolbarTemplate : wrapper">
645
+ <ng-template #wrapper>
646
+ <div class="k-toolbar-item">
647
+ <ng-container [ngTemplateOutlet]="tool.toolbarTemplate"></ng-container>
648
+ </div>
649
+ </ng-template>
987
650
  </ng-container>
988
- <div class="k-toolbar-items k-toolbar-items-scroll" *ngIf="isScrollMode; else noScroll" #scrollContainer>
989
- <ng-container *ngFor="let tool of allTools; let index = index"
990
- kendoToolbarRenderer
991
- [tool]="tool"
992
- location="toolbar"
993
- [resizable]="resizable"
994
- (rendererClick)="onRendererClick($event)"
995
- [ngTemplateOutlet]="tool.isBuiltInTool ? tool.toolbarTemplate : wrapper">
996
- <ng-template #wrapper>
997
- <div class="k-toolbar-item">
998
- <ng-container [ngTemplateOutlet]="tool.toolbarTemplate"></ng-container>
999
- </div>
1000
- </ng-template>
1001
- </ng-container>
1002
- </div>
1003
- <ng-template #noScroll>
1004
- <ng-container *ngFor="let tool of allTools; let index = index"
1005
- kendoToolbarRenderer
1006
- [tool]="tool"
1007
- location="toolbar"
1008
- [resizable]="resizable"
1009
- (rendererClick)="onRendererClick($event)"
1010
- [ngTemplateOutlet]="tool.isBuiltInTool ? tool.toolbarTemplate : wrapper">
1011
- <ng-template #wrapper>
1012
- <div class="k-toolbar-item">
1013
- <ng-container [ngTemplateOutlet]="tool.toolbarTemplate"></ng-container>
1014
- </div>
1015
- </ng-template>
1016
- </ng-container>
1017
- </ng-template>
1018
- <div class="k-toolbar-separator k-toolbar-button-separator k-separator" *ngIf="showOverflowSeparator"></div>
1019
651
  <button
1020
652
  kendoButton
1021
653
  fillMode="flat"
1022
654
  #overflowButton
1023
655
  type="button"
1024
- [icon]="overflowButtonIcon('font')"
1025
- [svgIcon]="overflowButtonIcon('svg')"
656
+ icon="more-vertical"
657
+ [svgIcon]="moreVerticalIcon"
1026
658
  tabindex="-1"
1027
659
  [title]="moreToolsTitle"
1028
660
  [attr.aria-label]="moreToolsTitle"
1029
661
  [attr.aria-expanded]="popupOpen"
1030
662
  [id]="overflowBtnId"
1031
- [attr.aria-haspopup]="normalizedOverflow.mode === 'section' ? null : 'menu'"
1032
- *ngIf="showMenu"
663
+ aria-haspopup="menu"
664
+ *ngIf="overflow"
1033
665
  [style.visibility]="'hidden'"
1034
666
  [style.position]="'relative'"
667
+ [style.margin-inline-start]="'auto'"
1035
668
  class="k-toolbar-overflow-button"
1036
669
  [ngClass]="overflowClass"
1037
670
  (click)="showPopup()"
1038
671
  >
1039
672
  </button>
1040
- <ng-container *ngIf="show && (hasScrollButtons.position === 'split' || hasScrollButtons.position === 'end')">
1041
- <div class="k-toolbar-separator k-toolbar-button-separator k-separator"></div>
1042
- <span *ngIf="hasScrollButtons.position === 'split'" #nextScrollButton
1043
- kendoToolbarScrollableButton
1044
- [prev]="false"
1045
- [overflow]="normalizedOverflow"
1046
- [title]="getScrollButtonTitle('next')"
1047
- class="k-toolbar-next k-icon-button k-button k-button-solid k-button-solid-base k-rounded-md"
1048
- [ngClass]="{
1049
- 'k-button-sm': size === 'small',
1050
- 'k-button-md': size === 'medium' || !size,
1051
- 'k-button-lg': size === 'large'
1052
- }"
1053
- (onClick)="scrollTools($event)">
1054
- </span>
1055
- <div class="k-button-group k-button-group-solid" *ngIf="hasScrollButtons.position === 'end'" #endButtonGroup>
1056
- <span #prevScrollButton
1057
- kendoToolbarScrollableButton
1058
- [prev]="true"
1059
- [overflow]="normalizedOverflow"
1060
- [title]="getScrollButtonTitle('prev')"
1061
- class="k-toolbar-prev k-icon-button k-button k-button-solid k-button-solid-base k-rounded-md"
1062
- [ngClass]="{
1063
- 'k-button-sm': size === 'small',
1064
- 'k-button-md': size === 'medium' || !size,
1065
- 'k-button-lg': size === 'large'
1066
- }"
1067
- (onClick)="scrollTools($event)">
1068
- </span>
1069
- <span #nextScrollButton
1070
- kendoToolbarScrollableButton
1071
- [prev]="false"
1072
- [overflow]="normalizedOverflow"
1073
- [title]="getScrollButtonTitle('next')"
1074
- class="k-toolbar-next k-icon-button k-button k-button-solid k-button-solid-base k-rounded-md"
1075
- [ngClass]="{
1076
- 'k-button-sm': size === 'small',
1077
- 'k-button-md': size === 'medium' || !size,
1078
- 'k-button-lg': size === 'large'
1079
- }"
1080
- (onClick)="scrollTools($event)">
1081
- </span>
1082
- </div>
1083
- </ng-container>
1084
673
  <ng-template #popupTemplate>
1085
674
  <div
1086
675
  class="k-menu-group k-menu-group-md"
1087
676
  role="menu"
1088
677
  [id]="popupId"
1089
- [attr.dir]="direction === 'rtl' ? 'rtl' : null"
1090
678
  [attr.aria-labelledby]="overflowBtnId">
1091
679
  <ng-container *ngFor="let tool of overflowTools; let index = index">
1092
680
  <ng-template
@@ -1094,7 +682,7 @@ export class ToolBarComponent {
1094
682
  kendoToolbarRenderer
1095
683
  [tool]="tool"
1096
684
  location="overflow"
1097
- [resizable]="resizable"
685
+ [resizable]="overflow"
1098
686
  (rendererClick)="onRendererClick($event)"
1099
687
  [ngTemplateOutlet]="tool.isBuiltInTool ? tool.popupTemplate : popupWrapper"></ng-template>
1100
688
  <ng-template #popupWrapper>
@@ -1105,29 +693,9 @@ export class ToolBarComponent {
1105
693
  </ng-container>
1106
694
  </div>
1107
695
  </ng-template>
1108
- <ng-template #popupSectionTemplate>
1109
- <span class="k-toolbar-items-list k-toolbar-items-list-solid"
1110
- [ngClass]="sectionSizeClass"
1111
- role="toolbar"
1112
- [id]="popupId"
1113
- [attr.dir]="direction === 'rtl' ? 'rtl' : null"
1114
- [attr.aria-labelledby]="overflowBtnId">
1115
- <ng-container *ngFor="let tool of overflowTools; let index = index"
1116
- kendoToolbarRenderer
1117
- [tool]="tool"
1118
- location="section"
1119
- [resizable]="resizable"
1120
- (rendererClick)="onRendererClick($event)"
1121
- [ngTemplateOutlet]="tool.isBuiltInTool ? tool.sectionTemplate : wrapper">
1122
- <ng-template #wrapper>
1123
- <ng-container [ngTemplateOutlet]="tool.sectionTemplate"></ng-container>
1124
- </ng-template>
1125
- </ng-container>
1126
- </span>
1127
- </ng-template>
1128
696
  <ng-container #container></ng-container>
1129
- <kendo-resize-sensor *ngIf="overflowEnabled" #resizeSensor></kendo-resize-sensor>
1130
- `, 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]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "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"] }, { kind: "component", type: ToolbarScrollableButtonComponent, selector: "[kendoToolbarScrollableButton]", inputs: ["prev", "overflow"], outputs: ["onClick"] }] });
697
+ <kendo-resize-sensor *ngIf="overflow" #resizeSensor></kendo-resize-sensor>
698
+ `, 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]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "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"] }] });
1131
699
  }
1132
700
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ToolBarComponent, decorators: [{
1133
701
  type: Component,
@@ -1138,7 +706,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1138
706
  NavigationService,
1139
707
  LocalizationService,
1140
708
  ToolbarToolsService,
1141
- ScrollService,
1142
709
  {
1143
710
  provide: L10N_PREFIX,
1144
711
  useValue: 'kendo.toolbar'
@@ -1147,162 +714,50 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1147
714
  selector: 'kendo-toolbar',
1148
715
  template: `
1149
716
  <ng-container kendoToolbarLocalizedMessages
1150
- i18n-moreToolsTitle="kendo.toolbar.moreToolsTitle|The title of the **more tools** button in a responsive ToolBar"
1151
- moreToolsTitle="More tools"
1152
-
1153
- i18n-previousToolButton="kendo.toolbar.previousToolButton|The title for the **Previous Tool** button when the Toolbar is scrollable."
1154
- previousToolButton="Scroll left"
1155
-
1156
- i18n-nextToolButton="kendo.toolbar.nextToolButton|The title for the **Next Tool** button when the Toolbar is scrollable."
1157
- nextToolButton="Scroll right"
717
+ i18n-moreToolsTitle="kendo.toolbar.moreToolsTitle|The title of the **more tools** button in a responsive ToolBar"
718
+ moreToolsTitle="More tools"
1158
719
  >
1159
720
  </ng-container>
1160
- <ng-container *ngIf="show && (hasScrollButtons.position === 'split' || hasScrollButtons.position === 'start')">
1161
- <span *ngIf="hasScrollButtons.position === 'split'" #prevScrollButton
1162
- kendoToolbarScrollableButton
1163
- [prev]="true"
1164
- [overflow]="normalizedOverflow"
1165
- [title]="getScrollButtonTitle('prev')"
1166
- class="k-toolbar-prev k-icon-button k-button k-button-solid k-button-solid-base k-rounded-md"
1167
- [ngClass]="{
1168
- 'k-button-sm': size === 'small',
1169
- 'k-button-md': size === 'medium' || !size,
1170
- 'k-button-lg': size === 'large'
1171
- }"
1172
- (onClick)="scrollTools($event)">
1173
- </span>
1174
- <div class="k-button-group k-button-group-solid" *ngIf="hasScrollButtons.position === 'start'" #startButtonGroup>
1175
- <span #prevScrollButton
1176
- kendoToolbarScrollableButton
1177
- [prev]="true"
1178
- [overflow]="normalizedOverflow"
1179
- [title]="getScrollButtonTitle('prev')"
1180
- class="k-toolbar-prev k-icon-button k-button k-button-solid k-button-solid-base k-rounded-md"
1181
- [ngClass]="{
1182
- 'k-button-sm': size === 'small',
1183
- 'k-button-md': size === 'medium' || !size,
1184
- 'k-button-lg': size === 'large'
1185
- }"
1186
- (onClick)="scrollTools($event)">
1187
- </span>
1188
- <span #nextScrollButton
1189
- kendoToolbarScrollableButton
1190
- [prev]="false"
1191
- [overflow]="normalizedOverflow"
1192
- [title]="getScrollButtonTitle('next')"
1193
- class="k-toolbar-next k-icon-button k-button k-button-solid k-button-solid-base k-rounded-md"
1194
- [ngClass]="{
1195
- 'k-button-sm': size === 'small',
1196
- 'k-button-md': size === 'medium' || !size,
1197
- 'k-button-lg': size === 'large'
1198
- }"
1199
- (onClick)="scrollTools($event)">
1200
- </span>
1201
- </div>
1202
- <div class="k-toolbar-separator k-toolbar-button-separator k-separator" #scrollSeparator></div>
721
+ <ng-container *ngFor="let tool of allTools; let index = index"
722
+ kendoToolbarRenderer
723
+ [tool]="tool"
724
+ location="toolbar"
725
+ [resizable]="overflow"
726
+ (rendererClick)="onRendererClick($event)"
727
+ [ngTemplateOutlet]="tool.isBuiltInTool ? tool.toolbarTemplate : wrapper">
728
+ <ng-template #wrapper>
729
+ <div class="k-toolbar-item">
730
+ <ng-container [ngTemplateOutlet]="tool.toolbarTemplate"></ng-container>
731
+ </div>
732
+ </ng-template>
1203
733
  </ng-container>
1204
- <div class="k-toolbar-items k-toolbar-items-scroll" *ngIf="isScrollMode; else noScroll" #scrollContainer>
1205
- <ng-container *ngFor="let tool of allTools; let index = index"
1206
- kendoToolbarRenderer
1207
- [tool]="tool"
1208
- location="toolbar"
1209
- [resizable]="resizable"
1210
- (rendererClick)="onRendererClick($event)"
1211
- [ngTemplateOutlet]="tool.isBuiltInTool ? tool.toolbarTemplate : wrapper">
1212
- <ng-template #wrapper>
1213
- <div class="k-toolbar-item">
1214
- <ng-container [ngTemplateOutlet]="tool.toolbarTemplate"></ng-container>
1215
- </div>
1216
- </ng-template>
1217
- </ng-container>
1218
- </div>
1219
- <ng-template #noScroll>
1220
- <ng-container *ngFor="let tool of allTools; let index = index"
1221
- kendoToolbarRenderer
1222
- [tool]="tool"
1223
- location="toolbar"
1224
- [resizable]="resizable"
1225
- (rendererClick)="onRendererClick($event)"
1226
- [ngTemplateOutlet]="tool.isBuiltInTool ? tool.toolbarTemplate : wrapper">
1227
- <ng-template #wrapper>
1228
- <div class="k-toolbar-item">
1229
- <ng-container [ngTemplateOutlet]="tool.toolbarTemplate"></ng-container>
1230
- </div>
1231
- </ng-template>
1232
- </ng-container>
1233
- </ng-template>
1234
- <div class="k-toolbar-separator k-toolbar-button-separator k-separator" *ngIf="showOverflowSeparator"></div>
1235
734
  <button
1236
735
  kendoButton
1237
736
  fillMode="flat"
1238
737
  #overflowButton
1239
738
  type="button"
1240
- [icon]="overflowButtonIcon('font')"
1241
- [svgIcon]="overflowButtonIcon('svg')"
739
+ icon="more-vertical"
740
+ [svgIcon]="moreVerticalIcon"
1242
741
  tabindex="-1"
1243
742
  [title]="moreToolsTitle"
1244
743
  [attr.aria-label]="moreToolsTitle"
1245
744
  [attr.aria-expanded]="popupOpen"
1246
745
  [id]="overflowBtnId"
1247
- [attr.aria-haspopup]="normalizedOverflow.mode === 'section' ? null : 'menu'"
1248
- *ngIf="showMenu"
746
+ aria-haspopup="menu"
747
+ *ngIf="overflow"
1249
748
  [style.visibility]="'hidden'"
1250
749
  [style.position]="'relative'"
750
+ [style.margin-inline-start]="'auto'"
1251
751
  class="k-toolbar-overflow-button"
1252
752
  [ngClass]="overflowClass"
1253
753
  (click)="showPopup()"
1254
754
  >
1255
755
  </button>
1256
- <ng-container *ngIf="show && (hasScrollButtons.position === 'split' || hasScrollButtons.position === 'end')">
1257
- <div class="k-toolbar-separator k-toolbar-button-separator k-separator"></div>
1258
- <span *ngIf="hasScrollButtons.position === 'split'" #nextScrollButton
1259
- kendoToolbarScrollableButton
1260
- [prev]="false"
1261
- [overflow]="normalizedOverflow"
1262
- [title]="getScrollButtonTitle('next')"
1263
- class="k-toolbar-next k-icon-button k-button k-button-solid k-button-solid-base k-rounded-md"
1264
- [ngClass]="{
1265
- 'k-button-sm': size === 'small',
1266
- 'k-button-md': size === 'medium' || !size,
1267
- 'k-button-lg': size === 'large'
1268
- }"
1269
- (onClick)="scrollTools($event)">
1270
- </span>
1271
- <div class="k-button-group k-button-group-solid" *ngIf="hasScrollButtons.position === 'end'" #endButtonGroup>
1272
- <span #prevScrollButton
1273
- kendoToolbarScrollableButton
1274
- [prev]="true"
1275
- [overflow]="normalizedOverflow"
1276
- [title]="getScrollButtonTitle('prev')"
1277
- class="k-toolbar-prev k-icon-button k-button k-button-solid k-button-solid-base k-rounded-md"
1278
- [ngClass]="{
1279
- 'k-button-sm': size === 'small',
1280
- 'k-button-md': size === 'medium' || !size,
1281
- 'k-button-lg': size === 'large'
1282
- }"
1283
- (onClick)="scrollTools($event)">
1284
- </span>
1285
- <span #nextScrollButton
1286
- kendoToolbarScrollableButton
1287
- [prev]="false"
1288
- [overflow]="normalizedOverflow"
1289
- [title]="getScrollButtonTitle('next')"
1290
- class="k-toolbar-next k-icon-button k-button k-button-solid k-button-solid-base k-rounded-md"
1291
- [ngClass]="{
1292
- 'k-button-sm': size === 'small',
1293
- 'k-button-md': size === 'medium' || !size,
1294
- 'k-button-lg': size === 'large'
1295
- }"
1296
- (onClick)="scrollTools($event)">
1297
- </span>
1298
- </div>
1299
- </ng-container>
1300
756
  <ng-template #popupTemplate>
1301
757
  <div
1302
758
  class="k-menu-group k-menu-group-md"
1303
759
  role="menu"
1304
760
  [id]="popupId"
1305
- [attr.dir]="direction === 'rtl' ? 'rtl' : null"
1306
761
  [attr.aria-labelledby]="overflowBtnId">
1307
762
  <ng-container *ngFor="let tool of overflowTools; let index = index">
1308
763
  <ng-template
@@ -1310,7 +765,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1310
765
  kendoToolbarRenderer
1311
766
  [tool]="tool"
1312
767
  location="overflow"
1313
- [resizable]="resizable"
768
+ [resizable]="overflow"
1314
769
  (rendererClick)="onRendererClick($event)"
1315
770
  [ngTemplateOutlet]="tool.isBuiltInTool ? tool.popupTemplate : popupWrapper"></ng-template>
1316
771
  <ng-template #popupWrapper>
@@ -1321,33 +776,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1321
776
  </ng-container>
1322
777
  </div>
1323
778
  </ng-template>
1324
- <ng-template #popupSectionTemplate>
1325
- <span class="k-toolbar-items-list k-toolbar-items-list-solid"
1326
- [ngClass]="sectionSizeClass"
1327
- role="toolbar"
1328
- [id]="popupId"
1329
- [attr.dir]="direction === 'rtl' ? 'rtl' : null"
1330
- [attr.aria-labelledby]="overflowBtnId">
1331
- <ng-container *ngFor="let tool of overflowTools; let index = index"
1332
- kendoToolbarRenderer
1333
- [tool]="tool"
1334
- location="section"
1335
- [resizable]="resizable"
1336
- (rendererClick)="onRendererClick($event)"
1337
- [ngTemplateOutlet]="tool.isBuiltInTool ? tool.sectionTemplate : wrapper">
1338
- <ng-template #wrapper>
1339
- <ng-container [ngTemplateOutlet]="tool.sectionTemplate"></ng-container>
1340
- </ng-template>
1341
- </ng-container>
1342
- </span>
1343
- </ng-template>
1344
779
  <ng-container #container></ng-container>
1345
- <kendo-resize-sensor *ngIf="overflowEnabled" #resizeSensor></kendo-resize-sensor>
780
+ <kendo-resize-sensor *ngIf="overflow" #resizeSensor></kendo-resize-sensor>
1346
781
  `,
1347
782
  standalone: true,
1348
- imports: [NgTemplateOutlet, LocalizedToolbarMessagesDirective, NgFor, ToolBarRendererComponent, NgIf, ButtonComponent, NgClass, ResizeSensorComponent, ButtonGroupComponent, ToolbarScrollableButtonComponent]
783
+ imports: [NgTemplateOutlet, LocalizedToolbarMessagesDirective, NgFor, ToolBarRendererComponent, NgIf, ButtonComponent, NgClass, ResizeSensorComponent]
1349
784
  }]
1350
- }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i2.PopupService }, { type: i3.RefreshService }, { type: i4.NavigationService }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i5.ToolbarToolsService }, { type: i6.ScrollService }]; }, propDecorators: { overflow: [{
785
+ }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i2.PopupService }, { type: i3.RefreshService }, { type: i4.NavigationService }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i5.ToolbarToolsService }]; }, propDecorators: { overflow: [{
1351
786
  type: Input
1352
787
  }], resizable: [{
1353
788
  type: Input
@@ -1375,42 +810,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1375
810
  }], popupTemplate: [{
1376
811
  type: ViewChild,
1377
812
  args: ['popupTemplate', { static: true }]
1378
- }], popupSectionTemplate: [{
1379
- type: ViewChild,
1380
- args: ['popupSectionTemplate', { static: true }]
1381
- }], scrollContainer: [{
1382
- type: ViewChild,
1383
- args: ['scrollContainer', { read: ElementRef, static: false }]
1384
813
  }], resizeSensor: [{
1385
814
  type: ViewChild,
1386
815
  args: ['resizeSensor', { static: false }]
1387
816
  }], container: [{
1388
817
  type: ViewChild,
1389
818
  args: ['container', { read: ViewContainerRef, static: true }]
1390
- }], prevScrollButton: [{
1391
- type: ViewChild,
1392
- args: ['prevScrollButton', { read: ElementRef }]
1393
- }], nextScrollButton: [{
1394
- type: ViewChild,
1395
- args: ['nextScrollButton', { read: ElementRef }]
1396
- }], startButtonGroup: [{
1397
- type: ViewChild,
1398
- args: ['startButtonGroup', { read: ElementRef }]
1399
- }], endButtonGroup: [{
1400
- type: ViewChild,
1401
- args: ['endButtonGroup', { read: ElementRef }]
1402
- }], scrollSeparator: [{
1403
- type: ViewChild,
1404
- args: ['scrollSeparator', { read: ElementRef }]
1405
819
  }], hostClass: [{
1406
820
  type: HostBinding,
1407
821
  args: ['class.k-toolbar']
1408
- }], scrollableClass: [{
1409
- type: HostBinding,
1410
- args: ['class.k-toolbar-scrollable']
1411
- }], sectionClass: [{
1412
- type: HostBinding,
1413
- args: ['class.k-toolbar-section']
1414
822
  }], onFocus: [{
1415
823
  type: HostListener,
1416
824
  args: ['focus', ['$event']]