@progress/kendo-angular-layout 21.3.1-develop.1 → 21.4.0-develop.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/package-metadata.mjs +2 -2
- package/esm2022/panelbar/panelbar-item.component.mjs +23 -17
- package/esm2022/tabstrip/tabstrip.component.mjs +78 -74
- package/fesm2022/progress-kendo-angular-layout.mjs +103 -93
- package/package.json +9 -9
- package/panelbar/panelbar-item.component.d.ts +1 -1
- package/panelbar/panelbar.component.d.ts +2 -2
- package/panelbar/panelbar.service.d.ts +2 -2
- package/tabstrip/tabstrip.component.d.ts +4 -2
|
@@ -10,7 +10,7 @@ export const packageMetadata = {
|
|
|
10
10
|
productName: 'Kendo UI for Angular',
|
|
11
11
|
productCode: 'KENDOUIANGULAR',
|
|
12
12
|
productCodes: ['KENDOUIANGULAR'],
|
|
13
|
-
publishDate:
|
|
14
|
-
version: '21.
|
|
13
|
+
publishDate: 1765536305,
|
|
14
|
+
version: '21.4.0-develop.1',
|
|
15
15
|
licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'
|
|
16
16
|
};
|
|
@@ -378,13 +378,14 @@ export class PanelBarItemComponent {
|
|
|
378
378
|
</kendo-icon-wrapper>
|
|
379
379
|
}
|
|
380
380
|
</span>
|
|
381
|
-
@if (
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
381
|
+
@if ((!disabled && expanded) || keepContent !== false) {
|
|
382
|
+
@defer (when ((!disabled && expanded && keepContent !== true) || keepContent === true); prefetch on idle) {
|
|
383
|
+
<div
|
|
384
|
+
#contentWrapper
|
|
385
|
+
[@toggle]="state"
|
|
386
|
+
[attr.role]="'group'"
|
|
387
|
+
[attr.aria-hidden]="!disabled && !expanded"
|
|
388
|
+
>
|
|
388
389
|
@if (hasChildItems && !items?.length) {
|
|
389
390
|
<div
|
|
390
391
|
[style.overflow]="contentOverflow"
|
|
@@ -463,7 +464,9 @@ export class PanelBarItemComponent {
|
|
|
463
464
|
</div>
|
|
464
465
|
}
|
|
465
466
|
</div>
|
|
466
|
-
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
`, isInline: true, dependencies: [{ kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], animations: [
|
|
467
470
|
trigger('toggle', [
|
|
468
471
|
state('inactive', style({ display: 'none' })),
|
|
469
472
|
transition('* => active', [
|
|
@@ -475,7 +478,7 @@ export class PanelBarItemComponent {
|
|
|
475
478
|
animate(200, style({ height: 0, display: 'none' }))
|
|
476
479
|
])
|
|
477
480
|
])
|
|
478
|
-
] });
|
|
481
|
+
], deferBlockDependencies: [() => [PanelBarItemComponent, NgTemplateOutlet]] });
|
|
479
482
|
}
|
|
480
483
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PanelBarItemComponent, decorators: [{
|
|
481
484
|
type: Component,
|
|
@@ -549,13 +552,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
549
552
|
</kendo-icon-wrapper>
|
|
550
553
|
}
|
|
551
554
|
</span>
|
|
552
|
-
@if (
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
555
|
+
@if ((!disabled && expanded) || keepContent !== false) {
|
|
556
|
+
@defer (when ((!disabled && expanded && keepContent !== true) || keepContent === true); prefetch on idle) {
|
|
557
|
+
<div
|
|
558
|
+
#contentWrapper
|
|
559
|
+
[@toggle]="state"
|
|
560
|
+
[attr.role]="'group'"
|
|
561
|
+
[attr.aria-hidden]="!disabled && !expanded"
|
|
562
|
+
>
|
|
559
563
|
@if (hasChildItems && !items?.length) {
|
|
560
564
|
<div
|
|
561
565
|
[style.overflow]="contentOverflow"
|
|
@@ -634,7 +638,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
634
638
|
</div>
|
|
635
639
|
}
|
|
636
640
|
</div>
|
|
637
|
-
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
`,
|
|
638
644
|
standalone: true,
|
|
639
645
|
imports: [IconWrapperComponent, NgTemplateOutlet]
|
|
640
646
|
}]
|
|
@@ -84,7 +84,9 @@ export class TabStripComponent {
|
|
|
84
84
|
*/
|
|
85
85
|
tabPosition = 'top';
|
|
86
86
|
/**
|
|
87
|
-
* When set to `true`,
|
|
87
|
+
* When set to `true`, all tabs' content is eagerly rendered and kept in the DOM ([see example](slug:rendering_tabstrip)).
|
|
88
|
+
* When set to `false`, only the active tab's content is rendered. Inactive tabs' content is removed from the DOM.
|
|
89
|
+
* When set to `'loadOnDemand'`, the active tab's content is rendered initially. Inactive tabs' content is rendered only when the tab is activated for the first time and kept in the DOM afterwards.
|
|
88
90
|
*
|
|
89
91
|
* @default false
|
|
90
92
|
*/
|
|
@@ -518,10 +520,10 @@ export class TabStripComponent {
|
|
|
518
520
|
<ng-container kendoTabStripLocalizedMessages
|
|
519
521
|
i18n-closeTitle="kendo.tabstrip.closeTitle|The title for the **Close** button in the TabStrip tab."
|
|
520
522
|
closeTitle="Close"
|
|
521
|
-
|
|
523
|
+
|
|
522
524
|
i18n-previousTabButton="kendo.tabstrip.previousTabButton|The title for the **Previous Tab** button when the Tabstrip is scrollable."
|
|
523
525
|
previousTabButton="Previous Tab"
|
|
524
|
-
|
|
526
|
+
|
|
525
527
|
i18n-nextTabButton="kendo.tabstrip.nextTabButton|The title for the **Next Tab** button when the Tabstrip is scrollable."
|
|
526
528
|
nextTabButton="Next Tab"
|
|
527
529
|
>
|
|
@@ -532,7 +534,7 @@ export class TabStripComponent {
|
|
|
532
534
|
<ng-container *ngTemplateOutlet="content"></ng-container>
|
|
533
535
|
}
|
|
534
536
|
}
|
|
535
|
-
|
|
537
|
+
|
|
536
538
|
@if (tabsAtBottom) {
|
|
537
539
|
@if (showContentArea) {
|
|
538
540
|
<ng-container *ngTemplateOutlet="content"></ng-container>
|
|
@@ -591,23 +593,23 @@ export class TabStripComponent {
|
|
|
591
593
|
>
|
|
592
594
|
@for (tab of tabs; track tab; let i = $index) {
|
|
593
595
|
<li
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
596
|
+
#tabHeaderContainer
|
|
597
|
+
kendoTabStripTab
|
|
598
|
+
[class.k-first]="i === 0"
|
|
599
|
+
[class.k-last]="i === tabs.length - 1"
|
|
600
|
+
[ngClass]="tab.cssClass"
|
|
601
|
+
[ngStyle]="tab.cssStyle"
|
|
602
|
+
[tab]="tab"
|
|
603
|
+
[index]="i"
|
|
604
|
+
role="tab"
|
|
605
|
+
[tabStripClosable]="closable"
|
|
606
|
+
[tabStripCloseIcon]="closeIcon"
|
|
607
|
+
[customTabstripCloseIcon]="closeIconClass"
|
|
608
|
+
[closeSVGIcon]="closeSVGIcon"
|
|
609
|
+
(tabClose)="tabClose.emit($event)"
|
|
610
|
+
(click)="onTabClick($event, i)"
|
|
611
|
+
[id]="getTabId(i)"
|
|
612
|
+
[attr.aria-controls]="(showContentArea && tab.selected) ? getTabPanelId(i) : undefined"></li>
|
|
611
613
|
}
|
|
612
614
|
</ul>
|
|
613
615
|
@if (hasScrollButtons.visible && hasScrollButtons.position === 'end') {
|
|
@@ -649,23 +651,24 @@ export class TabStripComponent {
|
|
|
649
651
|
</div>
|
|
650
652
|
</ng-template>
|
|
651
653
|
<ng-template #content>
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
654
|
+
@for (tab of tabs; track tab; let i = $index) {
|
|
655
|
+
@if (tab.selected || keepTabContent !== false) {
|
|
656
|
+
@defer (when tab.selected || keepTabContent === true; prefetch on idle) {
|
|
657
|
+
<div
|
|
658
|
+
[@state]="tab.selected && animate ? 'active' : 'inactive'"
|
|
659
|
+
[ngClass]="!this.keepTabContent || tab.selected ? 'k-tabstrip-content k-active' : 'k-tabstrip-content'"
|
|
660
|
+
[tabIndex]="0"
|
|
661
|
+
role="tabpanel"
|
|
662
|
+
[id]="getTabPanelId(i)"
|
|
663
|
+
[attr.aria-hidden]="!tab.selected"
|
|
664
|
+
[attr.aria-labelledby]="getTabId(i)"
|
|
665
|
+
[attr.aria-disabled]="tab.disabled"
|
|
666
|
+
>
|
|
667
|
+
<ng-template [ngTemplateOutlet]="tab.tabContent?.templateRef"></ng-template>
|
|
668
|
+
</div>
|
|
669
|
+
}
|
|
670
|
+
}
|
|
667
671
|
}
|
|
668
|
-
}
|
|
669
672
|
</ng-template>
|
|
670
673
|
@if (isScrollable) {
|
|
671
674
|
<kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
|
|
@@ -681,7 +684,7 @@ export class TabStripComponent {
|
|
|
681
684
|
animate('400ms ease-in')
|
|
682
685
|
])
|
|
683
686
|
])
|
|
684
|
-
] });
|
|
687
|
+
], deferBlockDependencies: [() => [NgTemplateOutlet, NgClass]] });
|
|
685
688
|
}
|
|
686
689
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TabStripComponent, decorators: [{
|
|
687
690
|
type: Component,
|
|
@@ -710,10 +713,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
710
713
|
<ng-container kendoTabStripLocalizedMessages
|
|
711
714
|
i18n-closeTitle="kendo.tabstrip.closeTitle|The title for the **Close** button in the TabStrip tab."
|
|
712
715
|
closeTitle="Close"
|
|
713
|
-
|
|
716
|
+
|
|
714
717
|
i18n-previousTabButton="kendo.tabstrip.previousTabButton|The title for the **Previous Tab** button when the Tabstrip is scrollable."
|
|
715
718
|
previousTabButton="Previous Tab"
|
|
716
|
-
|
|
719
|
+
|
|
717
720
|
i18n-nextTabButton="kendo.tabstrip.nextTabButton|The title for the **Next Tab** button when the Tabstrip is scrollable."
|
|
718
721
|
nextTabButton="Next Tab"
|
|
719
722
|
>
|
|
@@ -724,7 +727,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
724
727
|
<ng-container *ngTemplateOutlet="content"></ng-container>
|
|
725
728
|
}
|
|
726
729
|
}
|
|
727
|
-
|
|
730
|
+
|
|
728
731
|
@if (tabsAtBottom) {
|
|
729
732
|
@if (showContentArea) {
|
|
730
733
|
<ng-container *ngTemplateOutlet="content"></ng-container>
|
|
@@ -783,23 +786,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
783
786
|
>
|
|
784
787
|
@for (tab of tabs; track tab; let i = $index) {
|
|
785
788
|
<li
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
789
|
+
#tabHeaderContainer
|
|
790
|
+
kendoTabStripTab
|
|
791
|
+
[class.k-first]="i === 0"
|
|
792
|
+
[class.k-last]="i === tabs.length - 1"
|
|
793
|
+
[ngClass]="tab.cssClass"
|
|
794
|
+
[ngStyle]="tab.cssStyle"
|
|
795
|
+
[tab]="tab"
|
|
796
|
+
[index]="i"
|
|
797
|
+
role="tab"
|
|
798
|
+
[tabStripClosable]="closable"
|
|
799
|
+
[tabStripCloseIcon]="closeIcon"
|
|
800
|
+
[customTabstripCloseIcon]="closeIconClass"
|
|
801
|
+
[closeSVGIcon]="closeSVGIcon"
|
|
802
|
+
(tabClose)="tabClose.emit($event)"
|
|
803
|
+
(click)="onTabClick($event, i)"
|
|
804
|
+
[id]="getTabId(i)"
|
|
805
|
+
[attr.aria-controls]="(showContentArea && tab.selected) ? getTabPanelId(i) : undefined"></li>
|
|
803
806
|
}
|
|
804
807
|
</ul>
|
|
805
808
|
@if (hasScrollButtons.visible && hasScrollButtons.position === 'end') {
|
|
@@ -841,23 +844,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
841
844
|
</div>
|
|
842
845
|
</ng-template>
|
|
843
846
|
<ng-template #content>
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
847
|
+
@for (tab of tabs; track tab; let i = $index) {
|
|
848
|
+
@if (tab.selected || keepTabContent !== false) {
|
|
849
|
+
@defer (when tab.selected || keepTabContent === true; prefetch on idle) {
|
|
850
|
+
<div
|
|
851
|
+
[@state]="tab.selected && animate ? 'active' : 'inactive'"
|
|
852
|
+
[ngClass]="!this.keepTabContent || tab.selected ? 'k-tabstrip-content k-active' : 'k-tabstrip-content'"
|
|
853
|
+
[tabIndex]="0"
|
|
854
|
+
role="tabpanel"
|
|
855
|
+
[id]="getTabPanelId(i)"
|
|
856
|
+
[attr.aria-hidden]="!tab.selected"
|
|
857
|
+
[attr.aria-labelledby]="getTabId(i)"
|
|
858
|
+
[attr.aria-disabled]="tab.disabled"
|
|
859
|
+
>
|
|
860
|
+
<ng-template [ngTemplateOutlet]="tab.tabContent?.templateRef"></ng-template>
|
|
861
|
+
</div>
|
|
862
|
+
}
|
|
863
|
+
}
|
|
859
864
|
}
|
|
860
|
-
}
|
|
861
865
|
</ng-template>
|
|
862
866
|
@if (isScrollable) {
|
|
863
867
|
<kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
|
|
@@ -29,8 +29,8 @@ const packageMetadata = {
|
|
|
29
29
|
productName: 'Kendo UI for Angular',
|
|
30
30
|
productCode: 'KENDOUIANGULAR',
|
|
31
31
|
productCodes: ['KENDOUIANGULAR'],
|
|
32
|
-
publishDate:
|
|
33
|
-
version: '21.
|
|
32
|
+
publishDate: 1765536305,
|
|
33
|
+
version: '21.4.0-develop.1',
|
|
34
34
|
licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'
|
|
35
35
|
};
|
|
36
36
|
|
|
@@ -662,13 +662,14 @@ class PanelBarItemComponent {
|
|
|
662
662
|
</kendo-icon-wrapper>
|
|
663
663
|
}
|
|
664
664
|
</span>
|
|
665
|
-
@if (
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
665
|
+
@if ((!disabled && expanded) || keepContent !== false) {
|
|
666
|
+
@defer (when ((!disabled && expanded && keepContent !== true) || keepContent === true); prefetch on idle) {
|
|
667
|
+
<div
|
|
668
|
+
#contentWrapper
|
|
669
|
+
[@toggle]="state"
|
|
670
|
+
[attr.role]="'group'"
|
|
671
|
+
[attr.aria-hidden]="!disabled && !expanded"
|
|
672
|
+
>
|
|
672
673
|
@if (hasChildItems && !items?.length) {
|
|
673
674
|
<div
|
|
674
675
|
[style.overflow]="contentOverflow"
|
|
@@ -747,7 +748,9 @@ class PanelBarItemComponent {
|
|
|
747
748
|
</div>
|
|
748
749
|
}
|
|
749
750
|
</div>
|
|
750
|
-
|
|
751
|
+
}
|
|
752
|
+
}
|
|
753
|
+
`, isInline: true, dependencies: [{ kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], animations: [
|
|
751
754
|
trigger('toggle', [
|
|
752
755
|
state('inactive', style({ display: 'none' })),
|
|
753
756
|
transition('* => active', [
|
|
@@ -759,7 +762,7 @@ class PanelBarItemComponent {
|
|
|
759
762
|
animate(200, style({ height: 0, display: 'none' }))
|
|
760
763
|
])
|
|
761
764
|
])
|
|
762
|
-
] });
|
|
765
|
+
], deferBlockDependencies: [() => [PanelBarItemComponent, NgTemplateOutlet]] });
|
|
763
766
|
}
|
|
764
767
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PanelBarItemComponent, decorators: [{
|
|
765
768
|
type: Component,
|
|
@@ -833,13 +836,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
833
836
|
</kendo-icon-wrapper>
|
|
834
837
|
}
|
|
835
838
|
</span>
|
|
836
|
-
@if (
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
839
|
+
@if ((!disabled && expanded) || keepContent !== false) {
|
|
840
|
+
@defer (when ((!disabled && expanded && keepContent !== true) || keepContent === true); prefetch on idle) {
|
|
841
|
+
<div
|
|
842
|
+
#contentWrapper
|
|
843
|
+
[@toggle]="state"
|
|
844
|
+
[attr.role]="'group'"
|
|
845
|
+
[attr.aria-hidden]="!disabled && !expanded"
|
|
846
|
+
>
|
|
843
847
|
@if (hasChildItems && !items?.length) {
|
|
844
848
|
<div
|
|
845
849
|
[style.overflow]="contentOverflow"
|
|
@@ -918,7 +922,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
918
922
|
</div>
|
|
919
923
|
}
|
|
920
924
|
</div>
|
|
921
|
-
|
|
925
|
+
}
|
|
926
|
+
}
|
|
927
|
+
`,
|
|
922
928
|
standalone: true,
|
|
923
929
|
imports: [IconWrapperComponent, NgTemplateOutlet]
|
|
924
930
|
}]
|
|
@@ -4139,7 +4145,9 @@ class TabStripComponent {
|
|
|
4139
4145
|
*/
|
|
4140
4146
|
tabPosition = 'top';
|
|
4141
4147
|
/**
|
|
4142
|
-
* When set to `true`,
|
|
4148
|
+
* When set to `true`, all tabs' content is eagerly rendered and kept in the DOM ([see example](slug:rendering_tabstrip)).
|
|
4149
|
+
* When set to `false`, only the active tab's content is rendered. Inactive tabs' content is removed from the DOM.
|
|
4150
|
+
* When set to `'loadOnDemand'`, the active tab's content is rendered initially. Inactive tabs' content is rendered only when the tab is activated for the first time and kept in the DOM afterwards.
|
|
4143
4151
|
*
|
|
4144
4152
|
* @default false
|
|
4145
4153
|
*/
|
|
@@ -4573,10 +4581,10 @@ class TabStripComponent {
|
|
|
4573
4581
|
<ng-container kendoTabStripLocalizedMessages
|
|
4574
4582
|
i18n-closeTitle="kendo.tabstrip.closeTitle|The title for the **Close** button in the TabStrip tab."
|
|
4575
4583
|
closeTitle="Close"
|
|
4576
|
-
|
|
4584
|
+
|
|
4577
4585
|
i18n-previousTabButton="kendo.tabstrip.previousTabButton|The title for the **Previous Tab** button when the Tabstrip is scrollable."
|
|
4578
4586
|
previousTabButton="Previous Tab"
|
|
4579
|
-
|
|
4587
|
+
|
|
4580
4588
|
i18n-nextTabButton="kendo.tabstrip.nextTabButton|The title for the **Next Tab** button when the Tabstrip is scrollable."
|
|
4581
4589
|
nextTabButton="Next Tab"
|
|
4582
4590
|
>
|
|
@@ -4587,7 +4595,7 @@ class TabStripComponent {
|
|
|
4587
4595
|
<ng-container *ngTemplateOutlet="content"></ng-container>
|
|
4588
4596
|
}
|
|
4589
4597
|
}
|
|
4590
|
-
|
|
4598
|
+
|
|
4591
4599
|
@if (tabsAtBottom) {
|
|
4592
4600
|
@if (showContentArea) {
|
|
4593
4601
|
<ng-container *ngTemplateOutlet="content"></ng-container>
|
|
@@ -4646,23 +4654,23 @@ class TabStripComponent {
|
|
|
4646
4654
|
>
|
|
4647
4655
|
@for (tab of tabs; track tab; let i = $index) {
|
|
4648
4656
|
<li
|
|
4649
|
-
|
|
4650
|
-
|
|
4651
|
-
|
|
4652
|
-
|
|
4653
|
-
|
|
4654
|
-
|
|
4655
|
-
|
|
4656
|
-
|
|
4657
|
-
|
|
4658
|
-
|
|
4659
|
-
|
|
4660
|
-
|
|
4661
|
-
|
|
4662
|
-
|
|
4663
|
-
|
|
4664
|
-
|
|
4665
|
-
|
|
4657
|
+
#tabHeaderContainer
|
|
4658
|
+
kendoTabStripTab
|
|
4659
|
+
[class.k-first]="i === 0"
|
|
4660
|
+
[class.k-last]="i === tabs.length - 1"
|
|
4661
|
+
[ngClass]="tab.cssClass"
|
|
4662
|
+
[ngStyle]="tab.cssStyle"
|
|
4663
|
+
[tab]="tab"
|
|
4664
|
+
[index]="i"
|
|
4665
|
+
role="tab"
|
|
4666
|
+
[tabStripClosable]="closable"
|
|
4667
|
+
[tabStripCloseIcon]="closeIcon"
|
|
4668
|
+
[customTabstripCloseIcon]="closeIconClass"
|
|
4669
|
+
[closeSVGIcon]="closeSVGIcon"
|
|
4670
|
+
(tabClose)="tabClose.emit($event)"
|
|
4671
|
+
(click)="onTabClick($event, i)"
|
|
4672
|
+
[id]="getTabId(i)"
|
|
4673
|
+
[attr.aria-controls]="(showContentArea && tab.selected) ? getTabPanelId(i) : undefined"></li>
|
|
4666
4674
|
}
|
|
4667
4675
|
</ul>
|
|
4668
4676
|
@if (hasScrollButtons.visible && hasScrollButtons.position === 'end') {
|
|
@@ -4704,23 +4712,24 @@ class TabStripComponent {
|
|
|
4704
4712
|
</div>
|
|
4705
4713
|
</ng-template>
|
|
4706
4714
|
<ng-template #content>
|
|
4707
|
-
|
|
4708
|
-
|
|
4709
|
-
|
|
4710
|
-
|
|
4711
|
-
|
|
4712
|
-
|
|
4713
|
-
|
|
4714
|
-
|
|
4715
|
-
|
|
4716
|
-
|
|
4717
|
-
|
|
4718
|
-
|
|
4719
|
-
|
|
4720
|
-
|
|
4721
|
-
|
|
4715
|
+
@for (tab of tabs; track tab; let i = $index) {
|
|
4716
|
+
@if (tab.selected || keepTabContent !== false) {
|
|
4717
|
+
@defer (when tab.selected || keepTabContent === true; prefetch on idle) {
|
|
4718
|
+
<div
|
|
4719
|
+
[@state]="tab.selected && animate ? 'active' : 'inactive'"
|
|
4720
|
+
[ngClass]="!this.keepTabContent || tab.selected ? 'k-tabstrip-content k-active' : 'k-tabstrip-content'"
|
|
4721
|
+
[tabIndex]="0"
|
|
4722
|
+
role="tabpanel"
|
|
4723
|
+
[id]="getTabPanelId(i)"
|
|
4724
|
+
[attr.aria-hidden]="!tab.selected"
|
|
4725
|
+
[attr.aria-labelledby]="getTabId(i)"
|
|
4726
|
+
[attr.aria-disabled]="tab.disabled"
|
|
4727
|
+
>
|
|
4728
|
+
<ng-template [ngTemplateOutlet]="tab.tabContent?.templateRef"></ng-template>
|
|
4729
|
+
</div>
|
|
4730
|
+
}
|
|
4731
|
+
}
|
|
4722
4732
|
}
|
|
4723
|
-
}
|
|
4724
4733
|
</ng-template>
|
|
4725
4734
|
@if (isScrollable) {
|
|
4726
4735
|
<kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
|
|
@@ -4736,7 +4745,7 @@ class TabStripComponent {
|
|
|
4736
4745
|
animate('400ms ease-in')
|
|
4737
4746
|
])
|
|
4738
4747
|
])
|
|
4739
|
-
] });
|
|
4748
|
+
], deferBlockDependencies: [() => [NgTemplateOutlet, NgClass]] });
|
|
4740
4749
|
}
|
|
4741
4750
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TabStripComponent, decorators: [{
|
|
4742
4751
|
type: Component,
|
|
@@ -4765,10 +4774,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
4765
4774
|
<ng-container kendoTabStripLocalizedMessages
|
|
4766
4775
|
i18n-closeTitle="kendo.tabstrip.closeTitle|The title for the **Close** button in the TabStrip tab."
|
|
4767
4776
|
closeTitle="Close"
|
|
4768
|
-
|
|
4777
|
+
|
|
4769
4778
|
i18n-previousTabButton="kendo.tabstrip.previousTabButton|The title for the **Previous Tab** button when the Tabstrip is scrollable."
|
|
4770
4779
|
previousTabButton="Previous Tab"
|
|
4771
|
-
|
|
4780
|
+
|
|
4772
4781
|
i18n-nextTabButton="kendo.tabstrip.nextTabButton|The title for the **Next Tab** button when the Tabstrip is scrollable."
|
|
4773
4782
|
nextTabButton="Next Tab"
|
|
4774
4783
|
>
|
|
@@ -4779,7 +4788,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
4779
4788
|
<ng-container *ngTemplateOutlet="content"></ng-container>
|
|
4780
4789
|
}
|
|
4781
4790
|
}
|
|
4782
|
-
|
|
4791
|
+
|
|
4783
4792
|
@if (tabsAtBottom) {
|
|
4784
4793
|
@if (showContentArea) {
|
|
4785
4794
|
<ng-container *ngTemplateOutlet="content"></ng-container>
|
|
@@ -4838,23 +4847,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
4838
4847
|
>
|
|
4839
4848
|
@for (tab of tabs; track tab; let i = $index) {
|
|
4840
4849
|
<li
|
|
4841
|
-
|
|
4842
|
-
|
|
4843
|
-
|
|
4844
|
-
|
|
4845
|
-
|
|
4846
|
-
|
|
4847
|
-
|
|
4848
|
-
|
|
4849
|
-
|
|
4850
|
-
|
|
4851
|
-
|
|
4852
|
-
|
|
4853
|
-
|
|
4854
|
-
|
|
4855
|
-
|
|
4856
|
-
|
|
4857
|
-
|
|
4850
|
+
#tabHeaderContainer
|
|
4851
|
+
kendoTabStripTab
|
|
4852
|
+
[class.k-first]="i === 0"
|
|
4853
|
+
[class.k-last]="i === tabs.length - 1"
|
|
4854
|
+
[ngClass]="tab.cssClass"
|
|
4855
|
+
[ngStyle]="tab.cssStyle"
|
|
4856
|
+
[tab]="tab"
|
|
4857
|
+
[index]="i"
|
|
4858
|
+
role="tab"
|
|
4859
|
+
[tabStripClosable]="closable"
|
|
4860
|
+
[tabStripCloseIcon]="closeIcon"
|
|
4861
|
+
[customTabstripCloseIcon]="closeIconClass"
|
|
4862
|
+
[closeSVGIcon]="closeSVGIcon"
|
|
4863
|
+
(tabClose)="tabClose.emit($event)"
|
|
4864
|
+
(click)="onTabClick($event, i)"
|
|
4865
|
+
[id]="getTabId(i)"
|
|
4866
|
+
[attr.aria-controls]="(showContentArea && tab.selected) ? getTabPanelId(i) : undefined"></li>
|
|
4858
4867
|
}
|
|
4859
4868
|
</ul>
|
|
4860
4869
|
@if (hasScrollButtons.visible && hasScrollButtons.position === 'end') {
|
|
@@ -4896,23 +4905,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
4896
4905
|
</div>
|
|
4897
4906
|
</ng-template>
|
|
4898
4907
|
<ng-template #content>
|
|
4899
|
-
|
|
4900
|
-
|
|
4901
|
-
|
|
4902
|
-
|
|
4903
|
-
|
|
4904
|
-
|
|
4905
|
-
|
|
4906
|
-
|
|
4907
|
-
|
|
4908
|
-
|
|
4909
|
-
|
|
4910
|
-
|
|
4911
|
-
|
|
4912
|
-
|
|
4913
|
-
|
|
4908
|
+
@for (tab of tabs; track tab; let i = $index) {
|
|
4909
|
+
@if (tab.selected || keepTabContent !== false) {
|
|
4910
|
+
@defer (when tab.selected || keepTabContent === true; prefetch on idle) {
|
|
4911
|
+
<div
|
|
4912
|
+
[@state]="tab.selected && animate ? 'active' : 'inactive'"
|
|
4913
|
+
[ngClass]="!this.keepTabContent || tab.selected ? 'k-tabstrip-content k-active' : 'k-tabstrip-content'"
|
|
4914
|
+
[tabIndex]="0"
|
|
4915
|
+
role="tabpanel"
|
|
4916
|
+
[id]="getTabPanelId(i)"
|
|
4917
|
+
[attr.aria-hidden]="!tab.selected"
|
|
4918
|
+
[attr.aria-labelledby]="getTabId(i)"
|
|
4919
|
+
[attr.aria-disabled]="tab.disabled"
|
|
4920
|
+
>
|
|
4921
|
+
<ng-template [ngTemplateOutlet]="tab.tabContent?.templateRef"></ng-template>
|
|
4922
|
+
</div>
|
|
4923
|
+
}
|
|
4924
|
+
}
|
|
4914
4925
|
}
|
|
4915
|
-
}
|
|
4916
4926
|
</ng-template>
|
|
4917
4927
|
@if (isScrollable) {
|
|
4918
4928
|
<kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@progress/kendo-angular-layout",
|
|
3
|
-
"version": "21.
|
|
3
|
+
"version": "21.4.0-develop.1",
|
|
4
4
|
"description": "Kendo UI for Angular Layout Package - a collection of components to create professional application layoyts",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
6
6
|
"author": "Progress",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"package": {
|
|
51
51
|
"productName": "Kendo UI for Angular",
|
|
52
52
|
"productCode": "KENDOUIANGULAR",
|
|
53
|
-
"publishDate":
|
|
53
|
+
"publishDate": 1765536305,
|
|
54
54
|
"licensingDocsUrl": "https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning"
|
|
55
55
|
}
|
|
56
56
|
},
|
|
@@ -60,17 +60,17 @@
|
|
|
60
60
|
"@angular/core": "18 - 21",
|
|
61
61
|
"@angular/platform-browser": "18 - 21",
|
|
62
62
|
"@progress/kendo-licensing": "^1.7.0",
|
|
63
|
-
"@progress/kendo-angular-common": "21.
|
|
64
|
-
"@progress/kendo-angular-l10n": "21.
|
|
65
|
-
"@progress/kendo-angular-progressbar": "21.
|
|
66
|
-
"@progress/kendo-angular-icons": "21.
|
|
67
|
-
"@progress/kendo-angular-buttons": "21.
|
|
68
|
-
"@progress/kendo-angular-intl": "21.
|
|
63
|
+
"@progress/kendo-angular-common": "21.4.0-develop.1",
|
|
64
|
+
"@progress/kendo-angular-l10n": "21.4.0-develop.1",
|
|
65
|
+
"@progress/kendo-angular-progressbar": "21.4.0-develop.1",
|
|
66
|
+
"@progress/kendo-angular-icons": "21.4.0-develop.1",
|
|
67
|
+
"@progress/kendo-angular-buttons": "21.4.0-develop.1",
|
|
68
|
+
"@progress/kendo-angular-intl": "21.4.0-develop.1",
|
|
69
69
|
"rxjs": "^6.5.3 || ^7.0.0"
|
|
70
70
|
},
|
|
71
71
|
"dependencies": {
|
|
72
72
|
"tslib": "^2.3.1",
|
|
73
|
-
"@progress/kendo-angular-schematics": "21.
|
|
73
|
+
"@progress/kendo-angular-schematics": "21.4.0-develop.1",
|
|
74
74
|
"@progress/kendo-draggable": "^3.0.2"
|
|
75
75
|
},
|
|
76
76
|
"schematics": "./schematics/collection.json",
|
|
@@ -94,7 +94,7 @@ export declare class PanelBarItemComponent implements OnInit, AfterContentChecke
|
|
|
94
94
|
contentWrapper: ElementRef;
|
|
95
95
|
contentHeight: string;
|
|
96
96
|
contentOverflow: string;
|
|
97
|
-
keepContent: boolean;
|
|
97
|
+
keepContent: boolean | 'loadOnDemand';
|
|
98
98
|
childrenItems: Array<PanelBarItemComponent>;
|
|
99
99
|
hasChildItems: boolean;
|
|
100
100
|
hasItems: boolean;
|
|
@@ -67,8 +67,8 @@ export declare class PanelBarComponent implements AfterViewChecked, OnChanges, O
|
|
|
67
67
|
*
|
|
68
68
|
* @default false
|
|
69
69
|
*/
|
|
70
|
-
get keepItemContent(): boolean;
|
|
71
|
-
set keepItemContent(keepItemContent: boolean);
|
|
70
|
+
get keepItemContent(): boolean | 'loadOnDemand';
|
|
71
|
+
set keepItemContent(keepItemContent: boolean | 'loadOnDemand');
|
|
72
72
|
/**
|
|
73
73
|
* Sets the items of the PanelBar as an array of `PanelBarItemModel` instances
|
|
74
74
|
* ([see example]({% slug items_panelbar %})).
|
|
@@ -12,7 +12,7 @@ import * as i0 from "@angular/core";
|
|
|
12
12
|
*/
|
|
13
13
|
export declare class PanelBarService {
|
|
14
14
|
children$: Observable<PanelBarItemComponent>;
|
|
15
|
-
keepContent$: Observable<boolean>;
|
|
15
|
+
keepContent$: Observable<boolean | 'loadOnDemand'>;
|
|
16
16
|
parent$: Observable<boolean>;
|
|
17
17
|
pbId: number;
|
|
18
18
|
animate: boolean;
|
|
@@ -21,7 +21,7 @@ export declare class PanelBarService {
|
|
|
21
21
|
private childSource;
|
|
22
22
|
private keepContentSource;
|
|
23
23
|
private parentSource;
|
|
24
|
-
onKeepContent(keepContent: boolean): void;
|
|
24
|
+
onKeepContent(keepContent: boolean | 'loadOnDemand'): void;
|
|
25
25
|
onSelect(event: PanelBarItemComponent): void;
|
|
26
26
|
onFocus(): void;
|
|
27
27
|
onBlur(): void;
|
|
@@ -71,11 +71,13 @@ export declare class TabStripComponent implements AfterViewInit, OnDestroy {
|
|
|
71
71
|
*/
|
|
72
72
|
tabPosition: TabPosition;
|
|
73
73
|
/**
|
|
74
|
-
* When set to `true`,
|
|
74
|
+
* When set to `true`, all tabs' content is eagerly rendered and kept in the DOM ([see example](slug:rendering_tabstrip)).
|
|
75
|
+
* When set to `false`, only the active tab's content is rendered. Inactive tabs' content is removed from the DOM.
|
|
76
|
+
* When set to `'loadOnDemand'`, the active tab's content is rendered initially. Inactive tabs' content is rendered only when the tab is activated for the first time and kept in the DOM afterwards.
|
|
75
77
|
*
|
|
76
78
|
* @default false
|
|
77
79
|
*/
|
|
78
|
-
keepTabContent: boolean;
|
|
80
|
+
keepTabContent: boolean | 'loadOnDemand';
|
|
79
81
|
/**
|
|
80
82
|
* When set to `true`, renders a close button inside each tab.
|
|
81
83
|
*
|