@progress/kendo-angular-layout 21.4.1-develop.1 → 22.0.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.
Files changed (182) hide show
  1. package/avatar/l10n/messages.d.ts +1 -1
  2. package/fesm2022/progress-kendo-angular-layout.mjs +290 -290
  3. package/package.json +12 -20
  4. package/stepper/localization/messages.d.ts +1 -1
  5. package/tabstrip/localization/messages.d.ts +1 -1
  6. package/timeline/localization/messages.d.ts +1 -1
  7. package/esm2022/avatar/avatar.component.mjs +0 -406
  8. package/esm2022/avatar/l10n/custom-messages.component.mjs +0 -53
  9. package/esm2022/avatar/l10n/localized-messages.directive.mjs +0 -40
  10. package/esm2022/avatar/l10n/messages.mjs +0 -27
  11. package/esm2022/avatar/models/fill.mjs +0 -5
  12. package/esm2022/avatar/models/models.mjs +0 -9
  13. package/esm2022/avatar/models/rounded.mjs +0 -5
  14. package/esm2022/avatar/models/shape.mjs +0 -5
  15. package/esm2022/avatar/models/size.mjs +0 -5
  16. package/esm2022/avatar/models/theme-color.mjs +0 -5
  17. package/esm2022/avatar.module.mjs +0 -38
  18. package/esm2022/card/card-actions.component.mjs +0 -177
  19. package/esm2022/card/card-body.component.mjs +0 -37
  20. package/esm2022/card/card-footer.component.mjs +0 -37
  21. package/esm2022/card/card-header.component.mjs +0 -38
  22. package/esm2022/card/card.component.mjs +0 -118
  23. package/esm2022/card/directives/card-media.directive.mjs +0 -33
  24. package/esm2022/card/directives/card-separator.directive.mjs +0 -61
  25. package/esm2022/card/directives/card-subtitle.directive.mjs +0 -31
  26. package/esm2022/card/directives/card-title.directive.mjs +0 -31
  27. package/esm2022/card/models/actions-layout.mjs +0 -5
  28. package/esm2022/card/models/card-action.mjs +0 -21
  29. package/esm2022/card.module.mjs +0 -45
  30. package/esm2022/common/direction.mjs +0 -5
  31. package/esm2022/common/dom-queries.mjs +0 -47
  32. package/esm2022/common/orientation.mjs +0 -5
  33. package/esm2022/common/preventable-event.mjs +0 -31
  34. package/esm2022/common/styling-classes.mjs +0 -5
  35. package/esm2022/common/util.mjs +0 -85
  36. package/esm2022/directives.mjs +0 -174
  37. package/esm2022/drawer/animations.mjs +0 -146
  38. package/esm2022/drawer/drawer-container.component.mjs +0 -135
  39. package/esm2022/drawer/drawer-content.component.mjs +0 -39
  40. package/esm2022/drawer/drawer.component.mjs +0 -471
  41. package/esm2022/drawer/drawer.service.mjs +0 -105
  42. package/esm2022/drawer/events/drawer-list-select.event.mjs +0 -29
  43. package/esm2022/drawer/events/select-event.mjs +0 -33
  44. package/esm2022/drawer/item.component.mjs +0 -210
  45. package/esm2022/drawer/list.component.mjs +0 -165
  46. package/esm2022/drawer/models/constants.mjs +0 -8
  47. package/esm2022/drawer/models/drawer-animation.interface.mjs +0 -5
  48. package/esm2022/drawer/models/drawer-item-expand.interface.mjs +0 -5
  49. package/esm2022/drawer/models/drawer-item.interface.mjs +0 -5
  50. package/esm2022/drawer/models/drawer-view-item.interface.mjs +0 -5
  51. package/esm2022/drawer/models/mode.mjs +0 -5
  52. package/esm2022/drawer/models/position.mjs +0 -5
  53. package/esm2022/drawer/template-directives/drawer-template.directive.mjs +0 -43
  54. package/esm2022/drawer/template-directives/footer-template.directive.mjs +0 -36
  55. package/esm2022/drawer/template-directives/header-template.directive.mjs +0 -36
  56. package/esm2022/drawer/template-directives/item-template.directive.mjs +0 -44
  57. package/esm2022/drawer/template-directives.mjs +0 -8
  58. package/esm2022/drawer/types.mjs +0 -5
  59. package/esm2022/drawer/util.mjs +0 -16
  60. package/esm2022/drawer.module.mjs +0 -43
  61. package/esm2022/expansionpanel/animations.mjs +0 -23
  62. package/esm2022/expansionpanel/events/action-event.mjs +0 -21
  63. package/esm2022/expansionpanel/expansionpanel-title.directive.mjs +0 -38
  64. package/esm2022/expansionpanel/expansionpanel.component.mjs +0 -515
  65. package/esm2022/expansionpanel.module.mjs +0 -38
  66. package/esm2022/gridlayout.module.mjs +0 -38
  67. package/esm2022/index.mjs +0 -89
  68. package/esm2022/layout.module.mjs +0 -89
  69. package/esm2022/layouts/grid-layout.component.mjs +0 -179
  70. package/esm2022/layouts/gridlayout-item.component.mjs +0 -82
  71. package/esm2022/layouts/models/gridlayout-gap-settings.mjs +0 -5
  72. package/esm2022/layouts/models/gridlayout-row-col-size.mjs +0 -5
  73. package/esm2022/layouts/models/layout-align-settings.mjs +0 -5
  74. package/esm2022/layouts/models/layout-horizontal-align.mjs +0 -5
  75. package/esm2022/layouts/models/layout-vertical-align.mjs +0 -5
  76. package/esm2022/layouts/models.mjs +0 -10
  77. package/esm2022/layouts/stack-layout.component.mjs +0 -161
  78. package/esm2022/layouts/util.mjs +0 -101
  79. package/esm2022/package-metadata.mjs +0 -16
  80. package/esm2022/panelbar/events/collapse-event.mjs +0 -14
  81. package/esm2022/panelbar/events/expand-event.mjs +0 -14
  82. package/esm2022/panelbar/events/item-click-event.mjs +0 -17
  83. package/esm2022/panelbar/events/select-event.mjs +0 -14
  84. package/esm2022/panelbar/events/state-change-event.mjs +0 -13
  85. package/esm2022/panelbar/events.mjs +0 -9
  86. package/esm2022/panelbar/panelbar-content.directive.mjs +0 -36
  87. package/esm2022/panelbar/panelbar-expand-mode.mjs +0 -29
  88. package/esm2022/panelbar/panelbar-item-model.mjs +0 -5
  89. package/esm2022/panelbar/panelbar-item-template.directive.mjs +0 -37
  90. package/esm2022/panelbar/panelbar-item-title.directive.mjs +0 -42
  91. package/esm2022/panelbar/panelbar-item.component.mjs +0 -722
  92. package/esm2022/panelbar/panelbar.component.mjs +0 -705
  93. package/esm2022/panelbar/panelbar.service.mjs +0 -53
  94. package/esm2022/panelbar.module.mjs +0 -41
  95. package/esm2022/progress-kendo-angular-layout.mjs +0 -8
  96. package/esm2022/splitter/splitter-bar.component.mjs +0 -338
  97. package/esm2022/splitter/splitter-pane.component.mjs +0 -324
  98. package/esm2022/splitter/splitter.component.mjs +0 -301
  99. package/esm2022/splitter/splitter.service.mjs +0 -205
  100. package/esm2022/splitter/util.mjs +0 -34
  101. package/esm2022/splitter.module.mjs +0 -38
  102. package/esm2022/stacklayout.module.mjs +0 -37
  103. package/esm2022/stepper/events/activate-event.mjs +0 -33
  104. package/esm2022/stepper/list.component.mjs +0 -185
  105. package/esm2022/stepper/localization/custom-messages.component.mjs +0 -52
  106. package/esm2022/stepper/localization/localized-messages.directive.mjs +0 -41
  107. package/esm2022/stepper/localization/messages.mjs +0 -27
  108. package/esm2022/stepper/models/constants.mjs +0 -8
  109. package/esm2022/stepper/models/orientation.mjs +0 -5
  110. package/esm2022/stepper/models/step-predicate.mjs +0 -5
  111. package/esm2022/stepper/models/step-type.mjs +0 -5
  112. package/esm2022/stepper/models/stepper-step.interface.mjs +0 -5
  113. package/esm2022/stepper/step.component.mjs +0 -396
  114. package/esm2022/stepper/stepper.component.mjs +0 -423
  115. package/esm2022/stepper/stepper.service.mjs +0 -186
  116. package/esm2022/stepper/template-directives/indicator-template.directive.mjs +0 -37
  117. package/esm2022/stepper/template-directives/label-template.directive.mjs +0 -37
  118. package/esm2022/stepper/template-directives/step-template.directive.mjs +0 -39
  119. package/esm2022/stepper/template-directives.mjs +0 -7
  120. package/esm2022/stepper/types.mjs +0 -5
  121. package/esm2022/stepper.module.mjs +0 -41
  122. package/esm2022/tabstrip/constants.mjs +0 -29
  123. package/esm2022/tabstrip/directives/tab-content.directive.mjs +0 -39
  124. package/esm2022/tabstrip/directives/tab-title.directive.mjs +0 -37
  125. package/esm2022/tabstrip/directives/tab.directive.mjs +0 -24
  126. package/esm2022/tabstrip/events/select-event.mjs +0 -25
  127. package/esm2022/tabstrip/events/tabclose-event.mjs +0 -23
  128. package/esm2022/tabstrip/events/tabscroll-event.mjs +0 -23
  129. package/esm2022/tabstrip/events.mjs +0 -7
  130. package/esm2022/tabstrip/localization/custom-messages.component.mjs +0 -53
  131. package/esm2022/tabstrip/localization/localized-messages.directive.mjs +0 -39
  132. package/esm2022/tabstrip/localization/messages.mjs +0 -39
  133. package/esm2022/tabstrip/models/button-state-change.mjs +0 -5
  134. package/esm2022/tabstrip/models/scroll-button-type.mjs +0 -5
  135. package/esm2022/tabstrip/models/scroll-buttons-visibility.mjs +0 -5
  136. package/esm2022/tabstrip/models/scrollable-settings.mjs +0 -23
  137. package/esm2022/tabstrip/models/size.mjs +0 -5
  138. package/esm2022/tabstrip/models/tab-alignment.mjs +0 -5
  139. package/esm2022/tabstrip/models/tab-position.mjs +0 -5
  140. package/esm2022/tabstrip/models/tabstrip-tab.component.mjs +0 -130
  141. package/esm2022/tabstrip/rendering/tab.component.mjs +0 -182
  142. package/esm2022/tabstrip/scrollable-button.component.mjs +0 -182
  143. package/esm2022/tabstrip/tabstrip-scroll.service.mjs +0 -176
  144. package/esm2022/tabstrip/tabstrip.component.mjs +0 -954
  145. package/esm2022/tabstrip/tabstrip.service.mjs +0 -155
  146. package/esm2022/tabstrip/util.mjs +0 -120
  147. package/esm2022/tabstrip.module.mjs +0 -41
  148. package/esm2022/tilelayout/constants.mjs +0 -70
  149. package/esm2022/tilelayout/dragging-service.mjs +0 -421
  150. package/esm2022/tilelayout/keyboard-navigation.service.mjs +0 -189
  151. package/esm2022/tilelayout/models/dragging-config.interface.mjs +0 -5
  152. package/esm2022/tilelayout/models/flowmode.type.mjs +0 -5
  153. package/esm2022/tilelayout/models/gap.interface.mjs +0 -5
  154. package/esm2022/tilelayout/models/navigation.interface.mjs +0 -5
  155. package/esm2022/tilelayout/reorder-event.mjs +0 -43
  156. package/esm2022/tilelayout/resize-event.mjs +0 -37
  157. package/esm2022/tilelayout/tilelayout-item-body.component.mjs +0 -45
  158. package/esm2022/tilelayout/tilelayout-item-header.component.mjs +0 -43
  159. package/esm2022/tilelayout/tilelayout-item.component.mjs +0 -322
  160. package/esm2022/tilelayout/tilelayout-resize-handle.directive.mjs +0 -61
  161. package/esm2022/tilelayout/tilelayout.component.mjs +0 -388
  162. package/esm2022/tilelayout/util.mjs +0 -138
  163. package/esm2022/tilelayout.module.mjs +0 -40
  164. package/esm2022/timeline/events/navigation-direction.mjs +0 -5
  165. package/esm2022/timeline/localization/custom-messages.component.mjs +0 -43
  166. package/esm2022/timeline/localization/localized-messages.directive.mjs +0 -39
  167. package/esm2022/timeline/localization/messages.mjs +0 -33
  168. package/esm2022/timeline/models/anchor-target.mjs +0 -5
  169. package/esm2022/timeline/models/default-model-fields.mjs +0 -16
  170. package/esm2022/timeline/models/events-order.mjs +0 -5
  171. package/esm2022/timeline/models/model-fields.mjs +0 -5
  172. package/esm2022/timeline/models/timeline-event.mjs +0 -5
  173. package/esm2022/timeline/templates/timeline-card-actions.directive.mjs +0 -40
  174. package/esm2022/timeline/templates/timeline-card-body.directive.mjs +0 -40
  175. package/esm2022/timeline/templates/timeline-card-header.directive.mjs +0 -41
  176. package/esm2022/timeline/timeline-card.component.mjs +0 -451
  177. package/esm2022/timeline/timeline-horizontal.component.mjs +0 -781
  178. package/esm2022/timeline/timeline-vertical.component.mjs +0 -203
  179. package/esm2022/timeline/timeline.component.mjs +0 -491
  180. package/esm2022/timeline/timeline.service.mjs +0 -32
  181. package/esm2022/timeline/util.mjs +0 -26
  182. package/esm2022/timeline.module.mjs +0 -41
@@ -1,705 +0,0 @@
1
- /**-----------------------------------------------------------------------------------------
2
- * Copyright © 2026 Progress Software Corporation. All rights reserved.
3
- * Licensed under commercial license. See LICENSE.md in the project root for more information
4
- *-------------------------------------------------------------------------------------------*/
5
- import { Component, ContentChild, ContentChildren, ElementRef, EventEmitter, HostBinding, HostListener, Input, Output, QueryList, ViewChildren, isDevMode } from '@angular/core';
6
- import { LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';
7
- import { Keys, shouldShowValidationUI, getLicenseMessage, WatermarkOverlayComponent, normalizeKeys } from '@progress/kendo-angular-common';
8
- import { validatePackage } from '@progress/kendo-licensing';
9
- import { packageMetadata } from '../package-metadata';
10
- import { PanelBarExpandMode } from './panelbar-expand-mode';
11
- import { PanelBarItemComponent } from './panelbar-item.component';
12
- import { PanelBarService } from "./panelbar.service";
13
- import { PanelBarItemTemplateDirective } from "./panelbar-item-template.directive";
14
- import { parsePanelBarItems } from "../common/util";
15
- import { Subscription } from 'rxjs';
16
- import { isFocusable } from './../common/dom-queries';
17
- import { PanelBarSelectEvent, PanelBarExpandEvent, PanelBarCollapseEvent, PanelBarStateChangeEvent } from './events';
18
- import * as i0 from "@angular/core";
19
- import * as i1 from "./panelbar.service";
20
- import * as i2 from "@progress/kendo-angular-l10n";
21
- /**
22
- * Represents the Kendo UI PanelBar component for Angular.
23
- * Displays hierarchical data as an expandable and collapsible accordion-style interface ([see overview]({% slug overview_panelbar %})).
24
- *
25
- * @example
26
- * ```typescript
27
- * @Component({
28
- * selector: 'my-app',
29
- * template: `
30
- * <kendo-panelbar [items]="items" expandMode="single">
31
- * </kendo-panelbar>
32
- * `
33
- * })
34
- * class AppComponent {
35
- * items = [
36
- * { title: 'Item 1', expanded: true, content: 'Content 1' },
37
- * { title: 'Item 2', content: 'Content 2' }
38
- * ];
39
- * }
40
- * ```
41
- * @remarks
42
- * Supported children components are: {@link PanelBarItemComponent}.
43
- */
44
- // TODO: add styles as input prop
45
- export class PanelBarComponent {
46
- localization;
47
- /**
48
- * Sets the expand mode of the PanelBar through the `PanelBarExpandMode` enum ([see example]({% slug expandmodes_panelbar %})).
49
- *
50
- * @default 'multiple
51
- */
52
- expandMode = PanelBarExpandMode.Default;
53
- /**
54
- * Allows the PanelBar to modify the selected state of the items.
55
- *
56
- * @default true
57
- */
58
- selectable = true;
59
- /**
60
- * Sets the animate state of the PanelBar ([see example]({% slug animations_panelbar %})).
61
- *
62
- * @default true
63
- */
64
- animate = true;
65
- /**
66
- * Sets the height of the component when the `"full"` expand mode is used.
67
- * This option is ignored when the `"multiple"` or `"single"` expand modes are used.
68
- *
69
- * @default '400px'
70
- */
71
- height = '400px';
72
- /**
73
- * Controls how the PanelBar renders item content.
74
- *
75
- * The available options are:
76
- *
77
- * * `true`&mdash;Renders all items' content and persists them in the DOM.
78
- * * `false`&mdash;Removes collapsed items' content from the DOM.
79
- * * `"loadOnDemand"`&mdash;Loads items' content only when expanded for the first time. Collapsed items' content is not rendered until the item is expanded.
80
- *
81
- * For more information, refer to the [Rendering Modes](slug:rendering_panelbar) article.
82
- *
83
- * @default false
84
- */
85
- get keepItemContent() {
86
- return this._keepItemContent;
87
- }
88
- set keepItemContent(keepItemContent) {
89
- this._keepItemContent = keepItemContent;
90
- this.eventService.onKeepContent(keepItemContent);
91
- }
92
- /**
93
- * Sets the items of the PanelBar as an array of `PanelBarItemModel` instances
94
- * ([see example]({% slug items_panelbar %})).
95
- */
96
- set items(data) {
97
- if (data) {
98
- this._items = parsePanelBarItems(data);
99
- }
100
- }
101
- get items() {
102
- return this._items;
103
- }
104
- /**
105
- * Fires when the state of the PanelBar changes.
106
- * This event is triggered when an item is selected, expanded, or collapsed.
107
- * ([see example](slug:routing_panelbar#using-router-service)).
108
- * The event data contains a collection of all items that are modified.
109
- */
110
- stateChange = new EventEmitter();
111
- /**
112
- * Fires when an item is about to be selected.
113
- * This event is preventable. If you cancel it, the item will not be selected
114
- * ([see example]({% slug events_panelbar %})).
115
- */
116
- select = new EventEmitter();
117
- /**
118
- * Fires when an item is about to be expanded.
119
- * This event is preventable. If you cancel it, the item will remain collapsed
120
- * ([see example]({% slug events_panelbar %})).
121
- */
122
- expand = new EventEmitter();
123
- /**
124
- * Fires when an item is about to be collapsed.
125
- * This event is preventable. If you cancel it, the item will remain expanded
126
- * ([see example]({% slug events_panelbar %})).
127
- */
128
- collapse = new EventEmitter();
129
- /**
130
- * Fires when an item is clicked ([see example]({% slug events_panelbar %})).
131
- */
132
- itemClick = new EventEmitter();
133
- hostClasses = true;
134
- tabIndex = 0;
135
- role = 'tree';
136
- activeDescendant = '';
137
- get hostHeight() {
138
- return this.expandMode === PanelBarExpandMode.Full ? this.height : 'auto';
139
- }
140
- get overflow() {
141
- return this.expandMode === PanelBarExpandMode.Full ? 'hidden' : 'visible';
142
- }
143
- get dir() {
144
- return this.localization.rtl ? 'rtl' : 'ltr';
145
- }
146
- template;
147
- contentItems;
148
- contentChildItems;
149
- viewChildItems;
150
- /**
151
- * @hidden
152
- */
153
- showLicenseWatermark = false;
154
- /**
155
- * @hidden
156
- */
157
- licenseMessage;
158
- allItems;
159
- childrenItems;
160
- isViewInit = true;
161
- focused = false;
162
- _items;
163
- _keepItemContent = false;
164
- elementRef;
165
- eventService;
166
- keyBindings;
167
- subs = new Subscription();
168
- constructor(elementRef, eventService, localization) {
169
- this.localization = localization;
170
- const isValid = validatePackage(packageMetadata);
171
- this.licenseMessage = getLicenseMessage(packageMetadata);
172
- this.showLicenseWatermark = shouldShowValidationUI(isValid);
173
- /* eslint-disable-line*/
174
- this.keyBindings = this.computedKeys;
175
- this.elementRef = elementRef;
176
- this.eventService = eventService;
177
- this.subs.add(this.eventService.children$.subscribe(event => this.onItemAction(event)));
178
- this.subs.add(this.eventService.itemClick.subscribe(ev => this.itemClick.emit(ev)));
179
- }
180
- /**
181
- * @hidden
182
- */
183
- invertKeys(original, inverted) {
184
- return this.localization.rtl ? inverted : original;
185
- }
186
- get computedKeys() {
187
- return {
188
- [Keys.Space]: () => this.selectFocusedItem(),
189
- [Keys.Enter]: () => this.selectFocusedItem(),
190
- [Keys.NumpadEnter]: () => this.selectFocusedItem(),
191
- [Keys.ArrowUp]: () => this.focusPreviousItem(),
192
- [this.invertKeys(Keys.ArrowLeft, Keys.ArrowRight)]: () => this.collapseItem(),
193
- [Keys.ArrowDown]: () => this.focusNextItem(),
194
- [this.invertKeys(Keys.ArrowRight, Keys.ArrowLeft)]: () => this.expandItem(),
195
- [Keys.End]: () => this.focusLastItem(),
196
- [Keys.Home]: () => this.focusFirstItem()
197
- };
198
- }
199
- ngOnDestroy() {
200
- this.subs.unsubscribe();
201
- }
202
- ngOnInit() {
203
- this.subs.add(this.localization.changes.subscribe(() => this.keyBindings = this.computedKeys));
204
- this.eventService.animate = this.animate;
205
- this.eventService.expandMode = this.expandMode;
206
- }
207
- ngAfterViewChecked() {
208
- if (this.items) {
209
- this.childrenItems = this.viewChildItems.toArray();
210
- this.allItems = this.viewItems;
211
- }
212
- else {
213
- this.childrenItems = this.contentChildItems.toArray();
214
- this.allItems = this.contentItems.toArray();
215
- }
216
- if (this.isViewInit && this.childrenItems.length) {
217
- this.isViewInit = false;
218
- setTimeout(() => this.updateChildrenHeight());
219
- }
220
- this.validateConfiguration();
221
- }
222
- ngOnChanges(changes) {
223
- if (changes['height'] || changes['expandMode'] || changes['items']) { // eslint-disable-line
224
- if (this.childrenItems) {
225
- setTimeout(this.updateChildrenHeight);
226
- }
227
- }
228
- if (changes['animate']) {
229
- this.eventService.animate = this.animate;
230
- }
231
- if (changes['expandMode']) {
232
- this.eventService.expandMode = this.expandMode;
233
- }
234
- }
235
- get templateRef() {
236
- return this.template ? this.template.templateRef : undefined;
237
- }
238
- /**
239
- * @hidden
240
- */
241
- onComponentClick(event) {
242
- const itemClicked = this.visibleItems().some((item) => {
243
- return item.header.nativeElement.contains(event.target);
244
- });
245
- if (!isFocusable(event.target) && !this.focused && itemClicked) {
246
- this.elementRef.nativeElement.focus();
247
- }
248
- }
249
- /**
250
- * @hidden
251
- */
252
- onComponentFocus() {
253
- this.eventService.onFocus();
254
- this.focused = true;
255
- if (this.allItems.length > 0) {
256
- const visibleItems = this.visibleItems();
257
- const focusedItems = visibleItems.filter(item => item.focused);
258
- if (!focusedItems.length && visibleItems.length > 0) {
259
- visibleItems[0].focused = true;
260
- this.activeDescendant = visibleItems[0].itemId;
261
- }
262
- }
263
- }
264
- /**
265
- * @hidden
266
- */
267
- onComponentBlur() {
268
- this.eventService.onBlur();
269
- this.focused = false;
270
- this.activeDescendant = '';
271
- }
272
- /**
273
- * @hidden
274
- */
275
- onComponentKeyDown(event) {
276
- if (event.target === this.elementRef.nativeElement) {
277
- // on some keyboards arrow keys, PageUp/Down, and Home/End are mapped to Numpad keys
278
- const code = normalizeKeys(event);
279
- if (code === Keys.Space || code === Keys.ArrowUp || code === Keys.ArrowDown ||
280
- code === Keys.ArrowLeft || code === Keys.ArrowRight || code === Keys.Home ||
281
- code === Keys.End || code === Keys.PageUp || code === Keys.PageDown) {
282
- event.preventDefault();
283
- }
284
- const handler = this.keyBindings[code];
285
- //TODO: check if next item is disabled and skip operation?
286
- if (handler) {
287
- handler();
288
- }
289
- }
290
- }
291
- /**
292
- * @hidden
293
- */
294
- emitEvent(event, item) {
295
- let eventArgs;
296
- switch (event) {
297
- case 'select':
298
- eventArgs = new PanelBarSelectEvent();
299
- break;
300
- case 'collapse':
301
- eventArgs = new PanelBarCollapseEvent();
302
- break;
303
- default:
304
- eventArgs = new PanelBarExpandEvent();
305
- break;
306
- }
307
- eventArgs.item = item.serialize();
308
- this[event].emit(eventArgs);
309
- return eventArgs;
310
- }
311
- get viewItems() {
312
- let treeItems = [];
313
- this.viewChildItems.toArray().forEach(item => {
314
- treeItems.push(item);
315
- treeItems = treeItems.concat(item.subTreeViewItems());
316
- });
317
- return treeItems;
318
- }
319
- validateConfiguration() {
320
- if (isDevMode()) {
321
- if (this.items && (this.contentItems && this.contentItems.length > 0)) {
322
- throw new Error('Invalid configuration: mixed template components and items property.');
323
- }
324
- }
325
- }
326
- updateChildrenHeight = () => {
327
- let childrenHeight = 0;
328
- const panelbarHeight = this.elementRef.nativeElement.offsetHeight;
329
- const contentOverflow = this.expandMode === PanelBarExpandMode.Full ? 'auto' : 'visible';
330
- this.childrenItems.forEach(item => {
331
- childrenHeight += item.headerHeight();
332
- });
333
- this.childrenItems.forEach(item => {
334
- item.contentHeight = PanelBarExpandMode.Full === this.expandMode ? (panelbarHeight - childrenHeight) + 'px' : 'auto';
335
- item.contentOverflow = contentOverflow;
336
- });
337
- };
338
- onItemAction(item) {
339
- if (!item) {
340
- return;
341
- }
342
- const modifiedItems = new Array();
343
- const selectPreventedItems = [];
344
- let isSelectPrevented = false;
345
- if (this.selectable && !item.selected) {
346
- isSelectPrevented = this.emitEvent('select', item).isDefaultPrevented();
347
- }
348
- if (!isSelectPrevented) {
349
- this.allItems.forEach((currentItem) => {
350
- let selectedState = currentItem === item;
351
- const focusedState = selectedState;
352
- selectedState = this.selectable ? selectedState : currentItem.selected;
353
- if (currentItem.selected !== selectedState || currentItem.focused !== focusedState) {
354
- currentItem.selected = selectedState;
355
- currentItem.focused = focusedState;
356
- this.activeDescendant = focusedState ? currentItem.itemId : '';
357
- modifiedItems.push(currentItem);
358
- }
359
- });
360
- }
361
- else {
362
- selectPreventedItems.push(item);
363
- this.allItems.forEach((currentItem) => {
364
- const focusedState = currentItem === item;
365
- if (currentItem.focused !== focusedState) {
366
- currentItem.focused = focusedState;
367
- this.activeDescendant = focusedState ? currentItem.itemId : '';
368
- modifiedItems.push(currentItem);
369
- }
370
- });
371
- }
372
- if (this.expandMode === PanelBarExpandMode.Multiple) {
373
- if ((item.hasChildItems || item.hasContent) && !selectPreventedItems.includes(item)) {
374
- const isEventPrevented = item.expanded ?
375
- this.emitEvent('collapse', item).isDefaultPrevented() :
376
- this.emitEvent('expand', item).isDefaultPrevented();
377
- if (!isEventPrevented) {
378
- item.expanded = !item.expanded;
379
- if (modifiedItems.indexOf(item) < 0) {
380
- modifiedItems.push(item);
381
- }
382
- }
383
- }
384
- }
385
- else {
386
- const siblings = item.parent ? item.parent.childrenItems : this.childrenItems;
387
- let preventedCollapseItem;
388
- const expandedItems = [];
389
- if ((item.hasChildItems || item.hasContent) && !selectPreventedItems.includes(item)) {
390
- siblings
391
- .forEach((currentItem) => {
392
- const expandedState = currentItem === item;
393
- if (currentItem.expanded !== expandedState) {
394
- const isEventPrevented = currentItem.expanded ?
395
- this.emitEvent('collapse', currentItem).isDefaultPrevented() :
396
- this.emitEvent('expand', currentItem).isDefaultPrevented();
397
- if (!isEventPrevented) {
398
- currentItem.expanded = expandedState;
399
- if (currentItem.expanded) {
400
- expandedItems.push(currentItem);
401
- }
402
- if (modifiedItems.indexOf(currentItem) < 0) {
403
- modifiedItems.push(currentItem);
404
- }
405
- }
406
- else if (isEventPrevented && currentItem.expanded) {
407
- preventedCollapseItem = currentItem;
408
- }
409
- }
410
- else if (currentItem.expanded === expandedState && expandedState) {
411
- const isCollapsePrevented = this.emitEvent('collapse', currentItem).isDefaultPrevented();
412
- if (!isCollapsePrevented) {
413
- currentItem.expanded = !currentItem.expanded;
414
- if (modifiedItems.indexOf(currentItem) < 0) {
415
- modifiedItems.push(currentItem);
416
- }
417
- }
418
- }
419
- });
420
- expandedItems.forEach(item => {
421
- if (preventedCollapseItem && item.id !== preventedCollapseItem.id) {
422
- item.expanded = false;
423
- if (isDevMode()) {
424
- const expandMode = PanelBarExpandMode[this.expandMode].toLowerCase();
425
- console.warn(`
426
- The ${expandMode} expandMode allows the expansion of only one item at a time.
427
- See https://www.telerik.com/kendo-angular-ui/components/layout/panelbar/expand-modes/`);
428
- }
429
- }
430
- });
431
- }
432
- }
433
- if (modifiedItems.length > 0) {
434
- const eventArgs = new PanelBarStateChangeEvent();
435
- eventArgs.items = modifiedItems.map(currentItem => currentItem.serialize());
436
- this.stateChange.emit(eventArgs);
437
- }
438
- }
439
- isVisible(item) {
440
- const visibleItems = this.visibleItems();
441
- return visibleItems.some(i => i === item);
442
- }
443
- getVisibleParent(item) {
444
- const visibleItems = this.visibleItems();
445
- if (!item.parent) {
446
- return item;
447
- }
448
- return visibleItems.some(i => i === item.parent) ? item.parent : this.getVisibleParent(item.parent);
449
- }
450
- focusItem(action) {
451
- const visibleItems = this.visibleItems();
452
- let currentIndex = visibleItems.findIndex(item => item.focused);
453
- let currentItem = visibleItems[currentIndex];
454
- let nextItem;
455
- if (currentIndex === -1) {
456
- const focusedItem = this.allItems.find(item => item.focused);
457
- focusedItem.focused = false;
458
- currentItem = this.getVisibleParent(focusedItem);
459
- currentIndex = visibleItems.findIndex(item => item === currentItem);
460
- }
461
- switch (action) {
462
- case 'lastItem':
463
- nextItem = visibleItems[visibleItems.length - 1];
464
- break;
465
- case 'firstItem':
466
- nextItem = visibleItems[0];
467
- break;
468
- case 'nextItem':
469
- nextItem = visibleItems[currentIndex < visibleItems.length - 1 ? currentIndex + 1 : 0];
470
- break;
471
- case 'previousItem':
472
- nextItem = visibleItems[currentIndex > 0 ? currentIndex - 1 : visibleItems.length - 1];
473
- break;
474
- default:
475
- }
476
- if (currentItem && nextItem && currentItem !== nextItem) {
477
- this.moveFocus(currentItem, nextItem);
478
- }
479
- }
480
- moveFocus(from, to) {
481
- if (!from || !to) {
482
- return;
483
- }
484
- from.focused = false;
485
- to.focused = true;
486
- this.activeDescendant = to.itemId;
487
- const modifiedItems = new Array(from.serialize(), to.serialize());
488
- const eventArgs = new PanelBarStateChangeEvent();
489
- eventArgs.items = modifiedItems;
490
- this.stateChange.emit(eventArgs);
491
- }
492
- focusLastItem() {
493
- this.focusItem('lastItem');
494
- }
495
- focusFirstItem() {
496
- this.focusItem('firstItem');
497
- }
498
- focusNextItem() {
499
- this.focusItem('nextItem');
500
- }
501
- focusPreviousItem() {
502
- this.focusItem('previousItem');
503
- }
504
- expandItem() {
505
- let currentItem = this.allItems.filter(item => item.focused)[0];
506
- if (!this.isVisible(currentItem)) {
507
- currentItem.focused = false;
508
- currentItem = this.getVisibleParent(currentItem);
509
- }
510
- if (currentItem.hasChildItems || currentItem.hasContent) {
511
- if (!currentItem.expanded) {
512
- this.onItemAction(currentItem);
513
- }
514
- else if (currentItem.hasChildItems) {
515
- const firstChildIndex = currentItem.childrenItems.findIndex(item => !item.disabled);
516
- if (firstChildIndex > -1) {
517
- this.moveFocus(currentItem, currentItem.childrenItems[firstChildIndex]);
518
- }
519
- }
520
- }
521
- }
522
- collapseItem() {
523
- const currentItem = this.allItems.filter(item => item.focused)[0];
524
- if (currentItem.expanded) {
525
- this.onItemAction(currentItem);
526
- }
527
- else if (currentItem.parent) {
528
- this.moveFocus(currentItem, currentItem.parent);
529
- }
530
- }
531
- selectFocusedItem() {
532
- let focusedItem = this.allItems.filter(item => item.focused)[0];
533
- if (!this.isVisible(focusedItem)) {
534
- focusedItem.focused = false;
535
- focusedItem = this.getVisibleParent(focusedItem);
536
- }
537
- if (focusedItem) {
538
- focusedItem.onItemAction();
539
- }
540
- }
541
- visibleItems() {
542
- return this.flatVisibleItems(this.childrenItems);
543
- }
544
- flatVisibleItems(listOfItems = new Array(), flattedItems = new Array()) {
545
- listOfItems.forEach(item => {
546
- flattedItems.push(item);
547
- if (item.expanded && item.hasChildItems) {
548
- this.flatVisibleItems(item.childrenItems, flattedItems);
549
- }
550
- });
551
- return flattedItems;
552
- }
553
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PanelBarComponent, deps: [{ token: i0.ElementRef }, { token: i1.PanelBarService }, { token: i2.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
554
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: PanelBarComponent, isStandalone: true, selector: "kendo-panelbar", inputs: { expandMode: "expandMode", selectable: "selectable", animate: "animate", height: "height", keepItemContent: "keepItemContent", items: "items" }, outputs: { stateChange: "stateChange", select: "select", expand: "expand", collapse: "collapse", itemClick: "itemClick" }, host: { listeners: { "click": "onComponentClick($event)", "focus": "onComponentFocus()", "blur": "onComponentBlur()", "keydown": "onComponentKeyDown($event)" }, properties: { "class.k-panelbar": "this.hostClasses", "attr.tabIndex": "this.tabIndex", "attr.role": "this.role", "attr.aria-activedescendant": "this.activeDescendant", "style.height": "this.hostHeight", "style.overflow": "this.overflow", "attr.dir": "this.dir" } }, providers: [
555
- PanelBarService,
556
- LocalizationService,
557
- {
558
- provide: L10N_PREFIX,
559
- useValue: 'kendo.panelbar'
560
- }
561
- ], queries: [{ propertyName: "template", first: true, predicate: PanelBarItemTemplateDirective, descendants: true }, { propertyName: "contentItems", predicate: PanelBarItemComponent, descendants: true }, { propertyName: "contentChildItems", predicate: PanelBarItemComponent }], viewQueries: [{ propertyName: "viewChildItems", predicate: PanelBarItemComponent, descendants: true }], exportAs: ["kendoPanelbar"], usesOnChanges: true, ngImport: i0, template: `
562
- @if (contentChildItems && !items) {
563
- <ng-content select="kendo-panelbar-item"></ng-content>
564
- }
565
- @if (items?.length) {
566
- @for (item of items; track item) {
567
- @if (!item.hidden) {
568
- <kendo-panelbar-item
569
- [title]="item.title"
570
- [id]="item.id"
571
- [icon]="item.icon"
572
- [iconClass]="item.iconClass"
573
- [svgIcon]="item.svgIcon"
574
- [imageUrl]="item.imageUrl"
575
- [selected]="!!item.selected"
576
- [expanded]="!!item.expanded"
577
- [disabled]="!!item.disabled"
578
- [template]="templateRef"
579
- [items]="item.children"
580
- [content]="item.content"
581
- >
582
- </kendo-panelbar-item>
583
- }
584
- }
585
- }
586
-
587
- @if (showLicenseWatermark) {
588
- <div kendoWatermarkOverlay [licenseMessage]="licenseMessage"></div>
589
- }
590
- `, isInline: true, dependencies: [{ kind: "component", type: PanelBarItemComponent, selector: "kendo-panelbar-item", inputs: ["title", "id", "icon", "iconClass", "svgIcon", "imageUrl", "disabled", "expanded", "selected", "content", "items", "template"], exportAs: ["kendoPanelbarItem"] }, { kind: "component", type: WatermarkOverlayComponent, selector: "div[kendoWatermarkOverlay]", inputs: ["licenseMessage"] }] });
591
- }
592
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PanelBarComponent, decorators: [{
593
- type: Component,
594
- args: [{
595
- exportAs: 'kendoPanelbar',
596
- providers: [
597
- PanelBarService,
598
- LocalizationService,
599
- {
600
- provide: L10N_PREFIX,
601
- useValue: 'kendo.panelbar'
602
- }
603
- ],
604
- selector: 'kendo-panelbar',
605
- template: `
606
- @if (contentChildItems && !items) {
607
- <ng-content select="kendo-panelbar-item"></ng-content>
608
- }
609
- @if (items?.length) {
610
- @for (item of items; track item) {
611
- @if (!item.hidden) {
612
- <kendo-panelbar-item
613
- [title]="item.title"
614
- [id]="item.id"
615
- [icon]="item.icon"
616
- [iconClass]="item.iconClass"
617
- [svgIcon]="item.svgIcon"
618
- [imageUrl]="item.imageUrl"
619
- [selected]="!!item.selected"
620
- [expanded]="!!item.expanded"
621
- [disabled]="!!item.disabled"
622
- [template]="templateRef"
623
- [items]="item.children"
624
- [content]="item.content"
625
- >
626
- </kendo-panelbar-item>
627
- }
628
- }
629
- }
630
-
631
- @if (showLicenseWatermark) {
632
- <div kendoWatermarkOverlay [licenseMessage]="licenseMessage"></div>
633
- }
634
- `,
635
- standalone: true,
636
- imports: [PanelBarItemComponent, WatermarkOverlayComponent]
637
- }]
638
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.PanelBarService }, { type: i2.LocalizationService }], propDecorators: { expandMode: [{
639
- type: Input
640
- }], selectable: [{
641
- type: Input
642
- }], animate: [{
643
- type: Input
644
- }], height: [{
645
- type: Input
646
- }], keepItemContent: [{
647
- type: Input
648
- }], items: [{
649
- type: Input
650
- }], stateChange: [{
651
- type: Output
652
- }], select: [{
653
- type: Output
654
- }], expand: [{
655
- type: Output
656
- }], collapse: [{
657
- type: Output
658
- }], itemClick: [{
659
- type: Output
660
- }], hostClasses: [{
661
- type: HostBinding,
662
- args: ['class.k-panelbar']
663
- }], tabIndex: [{
664
- type: HostBinding,
665
- args: ['attr.tabIndex']
666
- }], role: [{
667
- type: HostBinding,
668
- args: ['attr.role']
669
- }], activeDescendant: [{
670
- type: HostBinding,
671
- args: ['attr.aria-activedescendant']
672
- }], hostHeight: [{
673
- type: HostBinding,
674
- args: ['style.height']
675
- }], overflow: [{
676
- type: HostBinding,
677
- args: ['style.overflow']
678
- }], dir: [{
679
- type: HostBinding,
680
- args: ['attr.dir']
681
- }], template: [{
682
- type: ContentChild,
683
- args: [PanelBarItemTemplateDirective, { static: false }]
684
- }], contentItems: [{
685
- type: ContentChildren,
686
- args: [PanelBarItemComponent, { descendants: true }]
687
- }], contentChildItems: [{
688
- type: ContentChildren,
689
- args: [PanelBarItemComponent]
690
- }], viewChildItems: [{
691
- type: ViewChildren,
692
- args: [PanelBarItemComponent]
693
- }], onComponentClick: [{
694
- type: HostListener,
695
- args: ['click', ['$event']]
696
- }], onComponentFocus: [{
697
- type: HostListener,
698
- args: ['focus']
699
- }], onComponentBlur: [{
700
- type: HostListener,
701
- args: ['blur']
702
- }], onComponentKeyDown: [{
703
- type: HostListener,
704
- args: ['keydown', ['$event']]
705
- }] } });