@progress/kendo-angular-layout 7.1.6 → 7.2.0-dev.202211241203

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 (88) hide show
  1. package/bundles/kendo-angular-layout.umd.js +1 -1
  2. package/common/util.d.ts +4 -0
  3. package/esm2015/avatar/avatar.component.js +3 -3
  4. package/esm2015/avatar.module.js +4 -4
  5. package/esm2015/card/card-actions.component.js +3 -3
  6. package/esm2015/card/card-body.component.js +3 -3
  7. package/esm2015/card/card-footer.component.js +3 -3
  8. package/esm2015/card/card-header.component.js +3 -3
  9. package/esm2015/card/card.component.js +3 -3
  10. package/esm2015/card/directives/card-media.directive.js +3 -3
  11. package/esm2015/card/directives/card-separator.directive.js +3 -3
  12. package/esm2015/card/directives/card-subtitle.directive.js +3 -3
  13. package/esm2015/card/directives/card-title.directive.js +3 -3
  14. package/esm2015/card.module.js +4 -4
  15. package/esm2015/common/util.js +16 -0
  16. package/esm2015/drawer/drawer-container.component.js +3 -3
  17. package/esm2015/drawer/drawer-content.component.js +3 -3
  18. package/esm2015/drawer/drawer.component.js +3 -3
  19. package/esm2015/drawer/drawer.service.js +3 -3
  20. package/esm2015/drawer/item.component.js +3 -3
  21. package/esm2015/drawer/list.component.js +3 -3
  22. package/esm2015/drawer/template-directives/drawer-template.directive.js +3 -3
  23. package/esm2015/drawer/template-directives/footer-template.directive.js +3 -3
  24. package/esm2015/drawer/template-directives/header-template.directive.js +3 -3
  25. package/esm2015/drawer/template-directives/item-template.directive.js +3 -3
  26. package/esm2015/drawer.module.js +4 -4
  27. package/esm2015/expansionpanel/expansionpanel-title.directive.js +3 -3
  28. package/esm2015/expansionpanel/expansionpanel.component.js +3 -3
  29. package/esm2015/expansionpanel.module.js +4 -4
  30. package/esm2015/gridlayout.module.js +4 -4
  31. package/esm2015/layout.module.js +4 -4
  32. package/esm2015/layouts/grid-layout.component.js +3 -3
  33. package/esm2015/layouts/gridlayout-item.component.js +3 -3
  34. package/esm2015/layouts/stack-layout.component.js +3 -3
  35. package/esm2015/package-metadata.js +1 -1
  36. package/esm2015/panelbar/panelbar-content.directive.js +3 -3
  37. package/esm2015/panelbar/panelbar-item-template.directive.js +3 -3
  38. package/esm2015/panelbar/panelbar-item-title.directive.js +3 -3
  39. package/esm2015/panelbar/panelbar-item.component.js +3 -3
  40. package/esm2015/panelbar/panelbar.component.js +3 -3
  41. package/esm2015/panelbar/panelbar.service.js +3 -3
  42. package/esm2015/panelbar.module.js +4 -4
  43. package/esm2015/splitter/splitter-bar.component.js +3 -3
  44. package/esm2015/splitter/splitter-pane.component.js +3 -3
  45. package/esm2015/splitter/splitter.component.js +3 -3
  46. package/esm2015/splitter/splitter.service.js +3 -3
  47. package/esm2015/splitter.module.js +4 -4
  48. package/esm2015/stacklayout.module.js +4 -4
  49. package/esm2015/stepper/list.component.js +3 -3
  50. package/esm2015/stepper/localization/custom-messages.component.js +3 -3
  51. package/esm2015/stepper/localization/localized-messages.directive.js +3 -3
  52. package/esm2015/stepper/localization/messages.js +3 -3
  53. package/esm2015/stepper/step.component.js +3 -3
  54. package/esm2015/stepper/stepper.component.js +3 -3
  55. package/esm2015/stepper/stepper.service.js +3 -3
  56. package/esm2015/stepper/template-directives/indicator-template.directive.js +3 -3
  57. package/esm2015/stepper/template-directives/label-template.directive.js +3 -3
  58. package/esm2015/stepper/template-directives/step-template.directive.js +3 -3
  59. package/esm2015/stepper.module.js +4 -4
  60. package/esm2015/tabstrip/directives/tab-content.directive.js +3 -3
  61. package/esm2015/tabstrip/directives/tab-title.directive.js +3 -3
  62. package/esm2015/tabstrip/localization/custom-messages.component.js +3 -3
  63. package/esm2015/tabstrip/localization/localized-messages.directive.js +3 -3
  64. package/esm2015/tabstrip/localization/messages.js +3 -3
  65. package/esm2015/tabstrip/models/tabstrip-tab.component.js +3 -3
  66. package/esm2015/tabstrip/rendering/tab.component.js +3 -3
  67. package/esm2015/tabstrip/scrollable-button.component.js +3 -3
  68. package/esm2015/tabstrip/tabstrip-scroll.service.js +3 -3
  69. package/esm2015/tabstrip/tabstrip.component.js +3 -3
  70. package/esm2015/tabstrip/tabstrip.service.js +3 -3
  71. package/esm2015/tabstrip.module.js +4 -4
  72. package/esm2015/tilelayout/dragging-service.js +3 -3
  73. package/esm2015/tilelayout/keyboard-navigation.service.js +148 -0
  74. package/esm2015/tilelayout/models/navigation.interface.js +5 -0
  75. package/esm2015/tilelayout/tilelayout-item-body.component.js +3 -3
  76. package/esm2015/tilelayout/tilelayout-item-header.component.js +3 -3
  77. package/esm2015/tilelayout/tilelayout-item.component.js +92 -14
  78. package/esm2015/tilelayout/tilelayout-resize-handle.directive.js +3 -3
  79. package/esm2015/tilelayout/tilelayout.component.js +31 -9
  80. package/esm2015/tilelayout/util.js +51 -1
  81. package/esm2015/tilelayout.module.js +4 -4
  82. package/fesm2015/kendo-angular-layout.js +548 -248
  83. package/package.json +1 -1
  84. package/tilelayout/keyboard-navigation.service.d.ts +34 -0
  85. package/tilelayout/models/navigation.interface.d.ts +17 -0
  86. package/tilelayout/tilelayout-item.component.d.ts +26 -3
  87. package/tilelayout/tilelayout.component.d.ts +13 -3
  88. package/tilelayout/util.d.ts +18 -0
@@ -19,14 +19,14 @@ export class TabStripCustomMessagesComponent extends TabStripMessages {
19
19
  return true;
20
20
  }
21
21
  }
22
- TabStripCustomMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TabStripCustomMessagesComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
23
- TabStripCustomMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: TabStripCustomMessagesComponent, selector: "kendo-tabstrip-messages", providers: [
22
+ TabStripCustomMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TabStripCustomMessagesComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
23
+ TabStripCustomMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: TabStripCustomMessagesComponent, selector: "kendo-tabstrip-messages", providers: [
24
24
  {
25
25
  provide: TabStripMessages,
26
26
  useExisting: forwardRef(() => TabStripCustomMessagesComponent)
27
27
  }
28
28
  ], usesInheritance: true, ngImport: i0, template: ``, isInline: true });
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TabStripCustomMessagesComponent, decorators: [{
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TabStripCustomMessagesComponent, decorators: [{
30
30
  type: Component,
31
31
  args: [{
32
32
  providers: [
@@ -15,14 +15,14 @@ export class LocalizedTabStripMessagesDirective extends TabStripMessages {
15
15
  this.service = service;
16
16
  }
17
17
  }
18
- LocalizedTabStripMessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: LocalizedTabStripMessagesDirective, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });
19
- LocalizedTabStripMessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: LocalizedTabStripMessagesDirective, selector: "[kendoTabStripLocalizedMessages]", providers: [
18
+ LocalizedTabStripMessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: LocalizedTabStripMessagesDirective, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });
19
+ LocalizedTabStripMessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.17", type: LocalizedTabStripMessagesDirective, selector: "[kendoTabStripLocalizedMessages]", providers: [
20
20
  {
21
21
  provide: TabStripMessages,
22
22
  useExisting: forwardRef(() => LocalizedTabStripMessagesDirective)
23
23
  }
24
24
  ], usesInheritance: true, ngImport: i0 });
25
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: LocalizedTabStripMessagesDirective, decorators: [{
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: LocalizedTabStripMessagesDirective, decorators: [{
26
26
  type: Directive,
27
27
  args: [{
28
28
  providers: [
@@ -10,9 +10,9 @@ import * as i0 from "@angular/core";
10
10
  */
11
11
  export class TabStripMessages extends ComponentMessages {
12
12
  }
13
- TabStripMessages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TabStripMessages, deps: null, target: i0.ɵɵFactoryTarget.Directive });
14
- TabStripMessages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: TabStripMessages, selector: "kendo-tabstrip-messages-base", inputs: { closeTitle: "closeTitle", previousTabButton: "previousTabButton", nextTabButton: "nextTabButton" }, usesInheritance: true, ngImport: i0 });
15
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TabStripMessages, decorators: [{
13
+ TabStripMessages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TabStripMessages, deps: null, target: i0.ɵɵFactoryTarget.Directive });
14
+ TabStripMessages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.17", type: TabStripMessages, selector: "kendo-tabstrip-messages-base", inputs: { closeTitle: "closeTitle", previousTabButton: "previousTabButton", nextTabButton: "nextTabButton" }, usesInheritance: true, ngImport: i0 });
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TabStripMessages, decorators: [{
16
16
  type: Directive,
17
17
  args: [{
18
18
  // eslint-disable-next-line @angular-eslint/directive-selector
@@ -33,9 +33,9 @@ export class TabStripTabComponent {
33
33
  return this._tabTitleDirective.first;
34
34
  }
35
35
  }
36
- TabStripTabComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TabStripTabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
37
- TabStripTabComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: TabStripTabComponent, selector: "kendo-tabstrip-tab", inputs: { title: "title", disabled: "disabled", cssClass: "cssClass", cssStyle: "cssStyle", selected: "selected", closable: "closable", closeIcon: "closeIcon" }, queries: [{ propertyName: "_tabContent", predicate: TabContentDirective }, { propertyName: "_tabTitleDirective", predicate: TabTitleDirective }], exportAs: ["kendoTabStripTab"], ngImport: i0, template: ``, isInline: true });
38
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TabStripTabComponent, decorators: [{
36
+ TabStripTabComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TabStripTabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
37
+ TabStripTabComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: TabStripTabComponent, selector: "kendo-tabstrip-tab", inputs: { title: "title", disabled: "disabled", cssClass: "cssClass", cssStyle: "cssStyle", selected: "selected", closable: "closable", closeIcon: "closeIcon" }, queries: [{ propertyName: "_tabContent", predicate: TabContentDirective }, { propertyName: "_tabTitleDirective", predicate: TabTitleDirective }], exportAs: ["kendoTabStripTab"], ngImport: i0, template: ``, isInline: true });
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TabStripTabComponent, decorators: [{
39
39
  type: Component,
40
40
  args: [{
41
41
  exportAs: 'kendoTabStripTab',
@@ -49,8 +49,8 @@ export class TabComponent {
49
49
  this.tabClose.emit(closeArgs);
50
50
  }
51
51
  }
52
- TabComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TabComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
53
- TabComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: TabComponent, selector: "[kendoTabStripTab]", inputs: { tab: "tab", index: "index", tabStripClosable: "tabStripClosable", tabStripCloseIcon: "tabStripCloseIcon" }, outputs: { tabClose: "tabClose" }, host: { properties: { "class.k-item": "this.hostClasses", "class.k-state-default": "this.hostClasses", "attr.aria-selected": "this.activeClass", "class.k-active": "this.activeClass", "attr.aria-disabled]": "this.disabledClass", "class.k-disabled": "this.disabledClass", "class.k-focus": "this.focusedClass", "attr.tabindex": "this.tabIndex" } }, ngImport: i0, template: `
52
+ TabComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TabComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
53
+ TabComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: TabComponent, selector: "[kendoTabStripTab]", inputs: { tab: "tab", index: "index", tabStripClosable: "tabStripClosable", tabStripCloseIcon: "tabStripCloseIcon" }, outputs: { tabClose: "tabClose" }, host: { properties: { "class.k-item": "this.hostClasses", "class.k-state-default": "this.hostClasses", "attr.aria-selected": "this.activeClass", "class.k-active": "this.activeClass", "attr.aria-disabled]": "this.disabledClass", "class.k-disabled": "this.disabledClass", "class.k-focus": "this.focusedClass", "attr.tabindex": "this.tabIndex" } }, ngImport: i0, template: `
54
54
  <span class="k-link" *ngIf="!tab.tabTitle">{{ tab.title }}</span>
55
55
  <span class="k-link" *ngIf="tab.tabTitle">
56
56
  <ng-template [ngTemplateOutlet]="tab.tabTitle?.templateRef">
@@ -65,7 +65,7 @@ TabComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
65
65
  <span [ngClass]="closeButtonClasses"></span>
66
66
  </span>
67
67
  `, isInline: true, directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
68
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TabComponent, decorators: [{
68
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TabComponent, decorators: [{
69
69
  type: Component,
70
70
  args: [{
71
71
  // eslint-disable-next-line @angular-eslint/component-selector
@@ -73,11 +73,11 @@ export class TabStripScrollableButtonComponent {
73
73
  return scrollEvent;
74
74
  }
75
75
  }
76
- TabStripScrollableButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TabStripScrollableButtonComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
77
- TabStripScrollableButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: TabStripScrollableButtonComponent, selector: "[kendoTabStripScrollableButton]", inputs: { prev: "prev", tabPosition: "tabPosition", scrollable: "scrollable" }, outputs: { tabScroll: "tabScroll", onClick: "onClick" }, host: { properties: { "class.k-button": "this.btnClasses", "class.k-button-md": "this.btnClasses", "class.k-icon-button": "this.btnClasses", "class.k-rounded-md": "this.btnClasses", "class.k-button-flat": "this.btnClasses", "class.k-button-flat-base": "this.btnClasses", "class.k-tabstrip-prev": "this.prevClass", "class.k-tabstrip-next": "this.nextClass" } }, ngImport: i0, template: `
76
+ TabStripScrollableButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TabStripScrollableButtonComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
77
+ TabStripScrollableButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: TabStripScrollableButtonComponent, selector: "[kendoTabStripScrollableButton]", inputs: { prev: "prev", tabPosition: "tabPosition", scrollable: "scrollable" }, outputs: { tabScroll: "tabScroll", onClick: "onClick" }, host: { properties: { "class.k-button": "this.btnClasses", "class.k-button-md": "this.btnClasses", "class.k-icon-button": "this.btnClasses", "class.k-rounded-md": "this.btnClasses", "class.k-button-flat": "this.btnClasses", "class.k-button-flat-base": "this.btnClasses", "class.k-tabstrip-prev": "this.prevClass", "class.k-tabstrip-next": "this.nextClass" } }, ngImport: i0, template: `
78
78
  <span class="k-icon k-button-icon" [ngClass]="iconClass"></span>
79
79
  `, isInline: true, directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
80
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TabStripScrollableButtonComponent, decorators: [{
80
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TabStripScrollableButtonComponent, decorators: [{
81
81
  type: Component,
82
82
  args: [{
83
83
  template: `
@@ -172,8 +172,8 @@ export class ScrollService {
172
172
  this.scrollButtonActiveStateChange.next({ buttonType, active });
173
173
  }
174
174
  }
175
- ScrollService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ScrollService, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
176
- ScrollService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ScrollService });
177
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ScrollService, decorators: [{
175
+ ScrollService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ScrollService, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
176
+ ScrollService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ScrollService });
177
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ScrollService, decorators: [{
178
178
  type: Injectable
179
179
  }], ctorParameters: function () { return [{ type: i0.NgZone }]; } });
@@ -350,8 +350,8 @@ export class TabStripComponent {
350
350
  });
351
351
  }
352
352
  }
353
- TabStripComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TabStripComponent, deps: [{ token: i1.LocalizationService }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i2.TabStripService }, { token: i3.ScrollService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
354
- TabStripComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: TabStripComponent, selector: "kendo-tabstrip", inputs: { height: "height", animate: "animate", tabAlignment: "tabAlignment", tabPosition: "tabPosition", keepTabContent: "keepTabContent", closable: "closable", scrollable: "scrollable", closeIcon: "closeIcon" }, outputs: { tabSelect: "tabSelect", tabClose: "tabClose", tabScroll: "tabScroll" }, host: { properties: { "class.k-tabstrip": "this.hostClass", "class.k-tabstrip-top": "this.tabsAtTop", "class.k-tabstrip-right": "this.tabsAtRight", "class.k-tabstrip-bottom": "this.tabsAtBottom", "class.k-tabstrip-left": "this.tabsAtLeft", "attr.dir": "this.dir", "class.k-tabstrip-scrollable": "this.tabStripScrollable" } }, providers: [
353
+ TabStripComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TabStripComponent, deps: [{ token: i1.LocalizationService }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i2.TabStripService }, { token: i3.ScrollService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
354
+ TabStripComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: TabStripComponent, selector: "kendo-tabstrip", inputs: { height: "height", animate: "animate", tabAlignment: "tabAlignment", tabPosition: "tabPosition", keepTabContent: "keepTabContent", closable: "closable", scrollable: "scrollable", closeIcon: "closeIcon" }, outputs: { tabSelect: "tabSelect", tabClose: "tabClose", tabScroll: "tabScroll" }, host: { properties: { "class.k-tabstrip": "this.hostClass", "class.k-tabstrip-top": "this.tabsAtTop", "class.k-tabstrip-right": "this.tabsAtRight", "class.k-tabstrip-bottom": "this.tabsAtBottom", "class.k-tabstrip-left": "this.tabsAtLeft", "attr.dir": "this.dir", "class.k-tabstrip-scrollable": "this.tabStripScrollable" } }, providers: [
355
355
  TabStripService,
356
356
  ScrollService,
357
357
  LocalizationService,
@@ -464,7 +464,7 @@ TabStripComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
464
464
  ])
465
465
  ])
466
466
  ] });
467
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TabStripComponent, decorators: [{
467
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TabStripComponent, decorators: [{
468
468
  type: Component,
469
469
  args: [{
470
470
  animations: [
@@ -143,8 +143,8 @@ export class TabStripService {
143
143
  return selectedIndex + 1;
144
144
  }
145
145
  }
146
- TabStripService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TabStripService, deps: [{ token: i1.LocalizationService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
147
- TabStripService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TabStripService });
148
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TabStripService, decorators: [{
146
+ TabStripService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TabStripService, deps: [{ token: i1.LocalizationService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
147
+ TabStripService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TabStripService });
148
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TabStripService, decorators: [{
149
149
  type: Injectable
150
150
  }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i0.NgZone }]; } });
@@ -39,8 +39,8 @@ const declarations = [
39
39
  */
40
40
  export class TabStripModule {
41
41
  }
42
- TabStripModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TabStripModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
43
- TabStripModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TabStripModule, declarations: [TabStripComponent,
42
+ TabStripModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TabStripModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
43
+ TabStripModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TabStripModule, declarations: [TabStripComponent,
44
44
  TabStripTabComponent,
45
45
  TabContentDirective,
46
46
  TabTitleDirective,
@@ -53,8 +53,8 @@ TabStripModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version:
53
53
  TabComponent,
54
54
  TabStripCustomMessagesComponent,
55
55
  LocalizedTabStripMessagesDirective] });
56
- TabStripModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TabStripModule, imports: [[CommonModule, ResizeSensorModule]] });
57
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TabStripModule, decorators: [{
56
+ TabStripModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TabStripModule, imports: [[CommonModule, ResizeSensorModule]] });
57
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TabStripModule, decorators: [{
58
58
  type: NgModule,
59
59
  args: [{
60
60
  declarations: [declarations],
@@ -391,8 +391,8 @@ export class TileLayoutDraggingService {
391
391
  return hintHeight;
392
392
  }
393
393
  }
394
- TileLayoutDraggingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TileLayoutDraggingService, deps: [{ token: i0.NgZone }, { token: i0.Renderer2 }, { token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Injectable });
395
- TileLayoutDraggingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TileLayoutDraggingService });
396
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TileLayoutDraggingService, decorators: [{
394
+ TileLayoutDraggingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TileLayoutDraggingService, deps: [{ token: i0.NgZone }, { token: i0.Renderer2 }, { token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Injectable });
395
+ TileLayoutDraggingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TileLayoutDraggingService });
396
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TileLayoutDraggingService, decorators: [{
397
397
  type: Injectable
398
398
  }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.Renderer2 }, { type: i1.LocalizationService }]; } });
@@ -0,0 +1,148 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2021 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ /* eslint-disable no-unused-expressions */
6
+ import { Injectable } from '@angular/core';
7
+ import { Keys } from '@progress/kendo-angular-common';
8
+ import { BehaviorSubject } from 'rxjs';
9
+ import { focusableSelector } from '../common/util';
10
+ import { getCurrentCol, shouldReorder, shouldResize } from './util';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@progress/kendo-angular-l10n";
13
+ /**
14
+ * @hidden
15
+ */
16
+ export class TileLayoutKeyboardNavigationService {
17
+ constructor(zone, renderer, localization) {
18
+ this.zone = zone;
19
+ this.renderer = renderer;
20
+ this.localization = localization;
21
+ this.navigable = new BehaviorSubject(false);
22
+ this.localizationSubscription = this.localization.changes.subscribe(({ rtl }) => this.rtl = rtl);
23
+ }
24
+ ngOnDestroy() {
25
+ this.localizationSubscription.unsubscribe();
26
+ }
27
+ onKeyDown(event, elem, focusableItems, settings) {
28
+ const keyCode = event.keyCode;
29
+ const isTileFocused = document.activeElement === elem;
30
+ const focusedTile = settings.items.find(item => item.elem.nativeElement === elem);
31
+ const col = getCurrentCol(focusedTile, settings, this.rtl);
32
+ if (keyCode === Keys.Enter && isTileFocused && focusableItems.length > 0) {
33
+ this.changeTabIndex('0', elem, focusableItems);
34
+ focusableItems[0].focus();
35
+ }
36
+ else if (keyCode === Keys.Escape) {
37
+ this.changeTabIndex('-1', elem, focusableItems);
38
+ elem.focus();
39
+ }
40
+ else if ((event.ctrlKey || event.metaKey) && isTileFocused && focusedTile.isResizable) {
41
+ event.preventDefault();
42
+ this.zone.run(() => {
43
+ this.resizeItem(keyCode, focusedTile, settings, col);
44
+ });
45
+ }
46
+ else if (event.shiftKey && isTileFocused && focusedTile.isReorderable) {
47
+ this.zone.run(() => {
48
+ this.reorderItem(keyCode, focusedTile, settings, col);
49
+ });
50
+ }
51
+ else if (keyCode === Keys.Tab && !isTileFocused) {
52
+ this.keepFocusWithinComponent(event, elem);
53
+ }
54
+ }
55
+ onFocusOut(event, elem, focusableItems) {
56
+ var _a;
57
+ const isTargetFocusable = focusableItems.includes(event.target);
58
+ const isRelatedTargetFocusable = focusableItems.includes(event.relatedTarget);
59
+ if (isTargetFocusable && !isRelatedTargetFocusable) {
60
+ this.changeTabIndex('-1', elem, focusableItems);
61
+ (_a = event.relatedTarget) === null || _a === void 0 ? void 0 : _a.focus();
62
+ }
63
+ }
64
+ onClick(event, elem, focusableItems) {
65
+ const isTargetFocusable = focusableItems.includes(event.target);
66
+ if (isTargetFocusable) {
67
+ this.changeTabIndex('0', elem, focusableItems);
68
+ event.target.focus();
69
+ }
70
+ }
71
+ changeTabIndex(tabIndex, elem, focusableItems) {
72
+ this.renderer.setAttribute(elem, 'tabindex', tabIndex === '0' ? '-1' : '0');
73
+ focusableItems.forEach((focusItem) => {
74
+ this.renderer.setAttribute(focusItem, 'tabindex', tabIndex);
75
+ });
76
+ }
77
+ getAllFocusableChildren(parent) {
78
+ return Array.from(parent.querySelectorAll(focusableSelector)).filter((element) => element.offsetParent !== null);
79
+ }
80
+ ;
81
+ resizeItem(keyCode, focusedTile, settings, col) {
82
+ const { resizeRight, resizeLeft, resizeDown, resizeUp } = shouldResize(keyCode, col, focusedTile, settings);
83
+ const resizeHorizontal = resizeLeft || resizeRight;
84
+ const resizeVertical = resizeDown || resizeUp;
85
+ const resizeDir = resizeLeft || resizeUp ? -1 : 1;
86
+ if (resizeHorizontal) {
87
+ focusedTile.colSpan += resizeDir;
88
+ }
89
+ else if (resizeVertical) {
90
+ focusedTile.rowSpan += resizeDir;
91
+ }
92
+ }
93
+ reorderItem(keyCode, focusedTile, settings, col) {
94
+ const { reorderLeft, reorderRight } = shouldReorder(keyCode, col, focusedTile, settings);
95
+ const onReorderRight = () => {
96
+ const nextTile = this.targetTile(focusedTile, settings.items, 1);
97
+ if (nextTile) {
98
+ focusedTile.order += 1;
99
+ nextTile.order -= 1;
100
+ }
101
+ };
102
+ const onReorderLeft = () => {
103
+ const prevTile = this.targetTile(focusedTile, settings.items, -1);
104
+ if (prevTile) {
105
+ focusedTile.order -= 1;
106
+ prevTile.order += 1;
107
+ }
108
+ };
109
+ if (reorderRight || reorderLeft) {
110
+ const reorderDir = reorderRight ? 1 : -1;
111
+ if (focusedTile.col) {
112
+ focusedTile.col += reorderDir;
113
+ }
114
+ else {
115
+ reorderRight ? onReorderRight() : onReorderLeft();
116
+ }
117
+ }
118
+ }
119
+ keepFocusWithinComponent(event, wrapper) {
120
+ const [firstFocusable, lastFocusable] = this.getFirstAndLastFocusable(wrapper);
121
+ const tabAfterLastFocusable = !event.shiftKey && event.target === lastFocusable;
122
+ const shiftTabAfterFirstFocusable = event.shiftKey && event.target === firstFocusable;
123
+ if (tabAfterLastFocusable) {
124
+ event.preventDefault();
125
+ firstFocusable.focus();
126
+ wrapper.blur();
127
+ }
128
+ if (shiftTabAfterFirstFocusable) {
129
+ event.preventDefault();
130
+ lastFocusable.focus();
131
+ }
132
+ }
133
+ getFirstAndLastFocusable(parent) {
134
+ const all = this.getAllFocusableChildren(parent);
135
+ const firstFocusable = all.length > 0 ? all[0] : parent;
136
+ const lastFocusable = all.length > 0 ? all[all.length - 1] : parent;
137
+ return [firstFocusable, lastFocusable];
138
+ }
139
+ ;
140
+ targetTile(focusedTile, items, offset) {
141
+ return items.find(item => item.order === focusedTile.order + offset);
142
+ }
143
+ }
144
+ TileLayoutKeyboardNavigationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TileLayoutKeyboardNavigationService, deps: [{ token: i0.NgZone }, { token: i0.Renderer2 }, { token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Injectable });
145
+ TileLayoutKeyboardNavigationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TileLayoutKeyboardNavigationService });
146
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TileLayoutKeyboardNavigationService, decorators: [{
147
+ type: Injectable
148
+ }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.Renderer2 }, { type: i1.LocalizationService }]; } });
@@ -0,0 +1,5 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2021 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ export {};
@@ -13,11 +13,11 @@ export class TileLayoutItemBodyComponent {
13
13
  this.minHeight = 0;
14
14
  }
15
15
  }
16
- TileLayoutItemBodyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TileLayoutItemBodyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
17
- TileLayoutItemBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: TileLayoutItemBodyComponent, selector: "kendo-tilelayout-item-body", host: { properties: { "class.k-tilelayout-item-body": "this.hostClass", "class.k-card-body": "this.hostClass", "style.min-height": "this.minHeight" } }, ngImport: i0, template: `
16
+ TileLayoutItemBodyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TileLayoutItemBodyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
17
+ TileLayoutItemBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: TileLayoutItemBodyComponent, selector: "kendo-tilelayout-item-body", host: { properties: { "class.k-tilelayout-item-body": "this.hostClass", "class.k-card-body": "this.hostClass", "style.min-height": "this.minHeight" } }, ngImport: i0, template: `
18
18
  <ng-content></ng-content>
19
19
  `, isInline: true });
20
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TileLayoutItemBodyComponent, decorators: [{
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TileLayoutItemBodyComponent, decorators: [{
21
21
  type: Component,
22
22
  args: [{
23
23
  selector: 'kendo-tilelayout-item-body',
@@ -29,11 +29,11 @@ export class TileLayoutItemHeaderComponent {
29
29
  }
30
30
  }
31
31
  }
32
- TileLayoutItemHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TileLayoutItemHeaderComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
33
- TileLayoutItemHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: TileLayoutItemHeaderComponent, selector: "kendo-tilelayout-item-header", inputs: { reorderable: "reorderable" }, host: { properties: { "class.k-tilelayout-item-header": "this.hostClass", "class.k-card-header": "this.hostClass" } }, ngImport: i0, template: `
32
+ TileLayoutItemHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TileLayoutItemHeaderComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
33
+ TileLayoutItemHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: TileLayoutItemHeaderComponent, selector: "kendo-tilelayout-item-header", inputs: { reorderable: "reorderable" }, host: { properties: { "class.k-tilelayout-item-header": "this.hostClass", "class.k-card-header": "this.hostClass" } }, ngImport: i0, template: `
34
34
  <ng-content></ng-content>
35
35
  `, isInline: true });
36
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TileLayoutItemHeaderComponent, decorators: [{
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TileLayoutItemHeaderComponent, decorators: [{
37
37
  type: Component,
38
38
  args: [{
39
39
  selector: 'kendo-tilelayout-item-header',
@@ -7,21 +7,25 @@ import { Subscription } from 'rxjs';
7
7
  import { isPresent } from './../common/util';
8
8
  import { RESIZE_DIRECTIONS, RTL_RESIZE_DIRECTIONS } from './constants';
9
9
  import { TileLayoutItemHeaderComponent } from './tilelayout-item-header.component';
10
+ import { getId } from './util';
10
11
  import * as i0 from "@angular/core";
11
12
  import * as i1 from "@progress/kendo-angular-l10n";
12
13
  import * as i2 from "./dragging-service";
13
- import * as i3 from "./tilelayout-item-header.component";
14
- import * as i4 from "@angular/common";
15
- import * as i5 from "./tilelayout-resize-handle.directive";
14
+ import * as i3 from "./keyboard-navigation.service";
15
+ import * as i4 from "./tilelayout-item-header.component";
16
+ import * as i5 from "@angular/common";
17
+ import * as i6 from "./tilelayout-resize-handle.directive";
16
18
  /**
17
19
  * Represents a tile item within the TileLayoutComponent.
18
20
  */
19
21
  export class TileLayoutItemComponent {
20
- constructor(elem, renderer, localization, draggingService) {
22
+ constructor(elem, zone, renderer, localization, draggingService, keyboardNavigationService) {
21
23
  this.elem = elem;
24
+ this.zone = zone;
22
25
  this.renderer = renderer;
23
26
  this.localization = localization;
24
27
  this.draggingService = draggingService;
28
+ this.keyboardNavigationService = keyboardNavigationService;
25
29
  /**
26
30
  * Determines how many rows will the tile item span ([see example]({% slug tiles_tilelayout %}#toc-tile-size-and-position)).
27
31
  * @default 1
@@ -44,6 +48,11 @@ export class TileLayoutItemComponent {
44
48
  */
45
49
  this.resizable = true;
46
50
  this.itemClass = true;
51
+ this.hostRole = 'listitem';
52
+ /**
53
+ * @hidden
54
+ */
55
+ this.titleId = '';
47
56
  this.subs = new Subscription();
48
57
  this.subs.add(this.localization.changes.subscribe(({ rtl }) => {
49
58
  this.rtl = rtl;
@@ -52,6 +61,7 @@ export class TileLayoutItemComponent {
52
61
  this.resizeDirections = resizable && this.resizable ?
53
62
  this.rtl ? RTL_RESIZE_DIRECTIONS : RESIZE_DIRECTIONS : undefined;
54
63
  }));
64
+ this.titleId = getId('k-tilelayout-title');
55
65
  }
56
66
  /**
57
67
  * Determines the order of the tile items within the TileLayout.
@@ -65,6 +75,21 @@ export class TileLayoutItemComponent {
65
75
  get order() {
66
76
  return this._order;
67
77
  }
78
+ get hostDropEffect() {
79
+ return this.isResizable || this.isReorderable ? 'execute' : undefined;
80
+ }
81
+ get hostTabindex() {
82
+ return this.isNavigable ? '0' : undefined;
83
+ }
84
+ get ariaKeyShortcuts() {
85
+ return this.isNavigable ? 'Enter' : undefined;
86
+ }
87
+ get hostGrabbed() {
88
+ return this.isResizable || this.isReorderable;
89
+ }
90
+ get hostLabelledBy() {
91
+ return this.title ? this.titleId : undefined;
92
+ }
68
93
  get colEnd() {
69
94
  return `span ${this.colSpan}`;
70
95
  }
@@ -80,10 +105,24 @@ export class TileLayoutItemComponent {
80
105
  /**
81
106
  * @hidden
82
107
  */
83
- get reorderableHeader() {
108
+ get isReorderable() {
84
109
  return this.reorderable && this.draggingService.reorderable.getValue();
85
110
  }
111
+ /**
112
+ * @hidden
113
+ */
114
+ get isNavigable() {
115
+ return this.keyboardNavigationService.navigable.getValue();
116
+ }
117
+ /**
118
+ * @hidden
119
+ */
120
+ get isResizable() {
121
+ return this.resizable && this.draggingService.resizable.getValue();
122
+ }
86
123
  ngAfterViewInit() {
124
+ const elem = this.elem.nativeElement;
125
+ const keyboardNavigation = this.keyboardNavigationService;
87
126
  this.subs.add(this.draggingService.reorderable.subscribe(reorderable => {
88
127
  var _a;
89
128
  this.toggleCursorClass(reorderable && this.reorderable);
@@ -91,6 +130,24 @@ export class TileLayoutItemComponent {
91
130
  this.headers.first.reorderable = reorderable && this.reorderable;
92
131
  }
93
132
  }));
133
+ this.subs.add(keyboardNavigation.navigable.subscribe(isNavigable => {
134
+ if (isNavigable) {
135
+ this.keyboardNavigationSubs = new Subscription();
136
+ this.focusableItems = keyboardNavigation.getAllFocusableChildren(elem);
137
+ this.zone.runOutsideAngular(() => {
138
+ keyboardNavigation.changeTabIndex('-1', elem, this.focusableItems);
139
+ this.keyboardNavigationSubs.add(this.renderer.listen(elem, 'keydown', event => keyboardNavigation.onKeyDown(event, elem, this.focusableItems, this.draggingService.tileLayoutSettings)));
140
+ this.keyboardNavigationSubs.add(this.renderer.listen(elem, 'click', event => keyboardNavigation.onClick(event, elem, this.focusableItems)));
141
+ this.keyboardNavigationSubs.add(this.renderer.listen(elem, 'focusout', event => keyboardNavigation.onFocusOut(event, elem, this.focusableItems)));
142
+ });
143
+ }
144
+ else if (this.focusableItems) {
145
+ this.focusableItems.forEach((focusItem) => {
146
+ this.renderer.setAttribute(focusItem, 'tabindex', '0');
147
+ });
148
+ this.keyboardNavigationSubs.unsubscribe();
149
+ }
150
+ }));
94
151
  }
95
152
  ngOnChanges(changes) {
96
153
  if (changes.reorderable && !changes.reorderable.firstChange) {
@@ -103,6 +160,9 @@ export class TileLayoutItemComponent {
103
160
  }
104
161
  ngOnDestroy() {
105
162
  this.subs.unsubscribe();
163
+ if (this.keyboardNavigationSubs) {
164
+ this.keyboardNavigationSubs.unsubscribe();
165
+ }
106
166
  }
107
167
  toggleCursorClass(isReorderable) {
108
168
  const headerEl = this.elem.nativeElement.querySelector('.k-tilelayout-item-header');
@@ -117,10 +177,10 @@ export class TileLayoutItemComponent {
117
177
  }
118
178
  }
119
179
  }
120
- TileLayoutItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TileLayoutItemComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.LocalizationService }, { token: i2.TileLayoutDraggingService }], target: i0.ɵɵFactoryTarget.Component });
121
- TileLayoutItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: TileLayoutItemComponent, selector: "kendo-tilelayout-item", inputs: { title: "title", rowSpan: "rowSpan", colSpan: "colSpan", order: "order", col: "col", row: "row", reorderable: "reorderable", resizable: "resizable" }, host: { properties: { "class.k-tilelayout-item": "this.itemClass", "class.k-card": "this.itemClass", "style.grid-column-end": "this.colEnd", "style.grid-row-end": "this.rowEnd", "style.grid-column-start": "this.colStart", "style.grid-row-start": "this.rowStart" } }, queries: [{ propertyName: "headers", predicate: TileLayoutItemHeaderComponent }], usesOnChanges: true, ngImport: i0, template: `
122
- <kendo-tilelayout-item-header [reorderable]="reorderableHeader" *ngIf="title">
123
- <h5 class="k-card-title">{{ title }}</h5>
180
+ TileLayoutItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TileLayoutItemComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i1.LocalizationService }, { token: i2.TileLayoutDraggingService }, { token: i3.TileLayoutKeyboardNavigationService }], target: i0.ɵɵFactoryTarget.Component });
181
+ TileLayoutItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: TileLayoutItemComponent, selector: "kendo-tilelayout-item", inputs: { title: "title", rowSpan: "rowSpan", colSpan: "colSpan", order: "order", col: "col", row: "row", reorderable: "reorderable", resizable: "resizable" }, host: { properties: { "class.k-tilelayout-item": "this.itemClass", "class.k-card": "this.itemClass", "attr.role": "this.hostRole", "attr.aria-dropeffect": "this.hostDropEffect", "attr.tabindex": "this.hostTabindex", "attr.aria-keyshortcuts": "this.ariaKeyShortcuts", "attr.aria-grabbed": "this.hostGrabbed", "attr.aria-labelledby": "this.hostLabelledBy", "style.grid-column-end": "this.colEnd", "style.grid-row-end": "this.rowEnd", "style.grid-column-start": "this.colStart", "style.grid-row-start": "this.rowStart" } }, queries: [{ propertyName: "headers", predicate: TileLayoutItemHeaderComponent }], usesOnChanges: true, ngImport: i0, template: `
182
+ <kendo-tilelayout-item-header [reorderable]="isReorderable" *ngIf="title">
183
+ <h5 [id]="titleId" class="k-card-title">{{ title }}</h5>
124
184
  </kendo-tilelayout-item-header>
125
185
  <ng-content></ng-content>
126
186
  <ng-container *ngIf="resizable">
@@ -132,14 +192,14 @@ TileLayoutItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0"
132
192
  [resizeDirection]="dir">
133
193
  </div>
134
194
  </ng-container>
135
- `, isInline: true, components: [{ type: i3.TileLayoutItemHeaderComponent, selector: "kendo-tilelayout-item-header", inputs: ["reorderable"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.TileLayoutResizeHandleDirective, selector: "[kendoTileLayoutResizeHandle]", inputs: ["resizeDirection", "rtl"] }] });
136
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TileLayoutItemComponent, decorators: [{
195
+ `, isInline: true, components: [{ type: i4.TileLayoutItemHeaderComponent, selector: "kendo-tilelayout-item-header", inputs: ["reorderable"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.TileLayoutResizeHandleDirective, selector: "[kendoTileLayoutResizeHandle]", inputs: ["resizeDirection", "rtl"] }] });
196
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TileLayoutItemComponent, decorators: [{
137
197
  type: Component,
138
198
  args: [{
139
199
  selector: 'kendo-tilelayout-item',
140
200
  template: `
141
- <kendo-tilelayout-item-header [reorderable]="reorderableHeader" *ngIf="title">
142
- <h5 class="k-card-title">{{ title }}</h5>
201
+ <kendo-tilelayout-item-header [reorderable]="isReorderable" *ngIf="title">
202
+ <h5 [id]="titleId" class="k-card-title">{{ title }}</h5>
143
203
  </kendo-tilelayout-item-header>
144
204
  <ng-content></ng-content>
145
205
  <ng-container *ngIf="resizable">
@@ -153,7 +213,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
153
213
  </ng-container>
154
214
  `
155
215
  }]
156
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.LocalizationService }, { type: i2.TileLayoutDraggingService }]; }, propDecorators: { title: [{
216
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i1.LocalizationService }, { type: i2.TileLayoutDraggingService }, { type: i3.TileLayoutKeyboardNavigationService }]; }, propDecorators: { title: [{
157
217
  type: Input
158
218
  }], rowSpan: [{
159
219
  type: Input
@@ -175,6 +235,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
175
235
  }, {
176
236
  type: HostBinding,
177
237
  args: ['class.k-card']
238
+ }], hostRole: [{
239
+ type: HostBinding,
240
+ args: ['attr.role']
241
+ }], hostDropEffect: [{
242
+ type: HostBinding,
243
+ args: ['attr.aria-dropeffect']
244
+ }], hostTabindex: [{
245
+ type: HostBinding,
246
+ args: ['attr.tabindex']
247
+ }], ariaKeyShortcuts: [{
248
+ type: HostBinding,
249
+ args: ['attr.aria-keyshortcuts']
250
+ }], hostGrabbed: [{
251
+ type: HostBinding,
252
+ args: ['attr.aria-grabbed']
253
+ }], hostLabelledBy: [{
254
+ type: HostBinding,
255
+ args: ['attr.aria-labelledby']
178
256
  }], colEnd: [{
179
257
  type: HostBinding,
180
258
  args: ['style.grid-column-end']
@@ -42,9 +42,9 @@ export class TileLayoutResizeHandleDirective {
42
42
  }
43
43
  }
44
44
  }
45
- TileLayoutResizeHandleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TileLayoutResizeHandleDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
46
- TileLayoutResizeHandleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: TileLayoutResizeHandleDirective, selector: "[kendoTileLayoutResizeHandle]", inputs: { resizeDirection: "resizeDirection", rtl: "rtl" }, ngImport: i0 });
47
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TileLayoutResizeHandleDirective, decorators: [{
45
+ TileLayoutResizeHandleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TileLayoutResizeHandleDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
46
+ TileLayoutResizeHandleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.17", type: TileLayoutResizeHandleDirective, selector: "[kendoTileLayoutResizeHandle]", inputs: { resizeDirection: "resizeDirection", rtl: "rtl" }, ngImport: i0 });
47
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: TileLayoutResizeHandleDirective, decorators: [{
48
48
  type: Directive,
49
49
  args: [{
50
50
  selector: '[kendoTileLayoutResizeHandle]'