@progress/kendo-angular-layout 21.2.0-develop.1 → 21.2.0-develop.11
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/codemods/utils.js +805 -394
- package/codemods/v19/tabstrip-mousescrollspeed.js +11 -15
- package/esm2022/drawer/list.component.mjs +2 -2
- package/esm2022/package-metadata.mjs +2 -2
- package/esm2022/panelbar/panelbar.component.mjs +2 -2
- package/esm2022/splitter/splitter-bar.component.mjs +2 -2
- package/esm2022/stepper/stepper.service.mjs +2 -2
- package/esm2022/tabstrip/tabstrip.service.mjs +2 -2
- package/esm2022/tilelayout/keyboard-navigation.service.mjs +2 -2
- package/esm2022/timeline/models/events-order.mjs +5 -0
- package/esm2022/timeline/timeline-horizontal.component.mjs +3 -9
- package/esm2022/timeline/timeline.component.mjs +40 -13
- package/fesm2022/progress-kendo-angular-layout.mjs +51 -30
- package/index.d.ts +1 -0
- package/package.json +10 -11
- package/timeline/models/events-order.d.ts +10 -0
- package/timeline/timeline.component.d.ts +13 -1
- package/codemods/template-transformer/index.js +0 -93
|
@@ -28,27 +28,23 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
28
28
|
};
|
|
29
29
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
30
|
exports.default = default_1;
|
|
31
|
-
const index_1 = require("../template-transformer/index");
|
|
32
|
-
const utils_1 = require("../utils");
|
|
33
31
|
const fs = __importStar(require("fs"));
|
|
32
|
+
const utils_1 = require("../utils");
|
|
34
33
|
function default_1(fileInfo, api) {
|
|
35
34
|
const filePath = fileInfo.path;
|
|
35
|
+
// Handle HTML files and inline templates
|
|
36
|
+
const htmlResult = (0, utils_1.htmlTransformer)(fileInfo, api, (templateContent) => (0, utils_1.attributeRemoval)(templateContent, 'kendo-tabstrip', 'scrollable', 'mouseScrollSpeed'));
|
|
36
37
|
if (filePath.endsWith('.html')) {
|
|
37
|
-
if (
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
updatedContent = (0, utils_1.htmlAttributeRemoval)({ ...fileInfo, source: updatedContent }, 'kendo-tabstrip', 'scrollable', 'mouseScrollSpeed');
|
|
41
|
-
// Only write to file once after all transformations
|
|
42
|
-
fs.writeFileSync(filePath, updatedContent, 'utf-8');
|
|
38
|
+
if (htmlResult && htmlResult !== fileInfo.source) {
|
|
39
|
+
fs.writeFileSync(filePath, htmlResult, 'utf-8');
|
|
40
|
+
return htmlResult;
|
|
43
41
|
}
|
|
44
|
-
return;
|
|
42
|
+
return fileInfo.source; // Return original source if no changes
|
|
45
43
|
}
|
|
44
|
+
// Handle TypeScript property transformations
|
|
46
45
|
const j = api.jscodeshift;
|
|
47
|
-
const rootSource = j(fileInfo.source);
|
|
48
|
-
(0,
|
|
49
|
-
|
|
50
|
-
});
|
|
51
|
-
(0, utils_1.tsPropertyRemoval)(fileInfo.source, rootSource, j, 'TabStripScrollableSettings', 'mouseScrollSpeed');
|
|
52
|
-
(0, utils_1.tsComponentPropertyRemoval)(fileInfo.source, rootSource, j, 'TabStripComponent', 'scrollable', 'mouseScrollSpeed');
|
|
46
|
+
const rootSource = j(htmlResult || fileInfo.source);
|
|
47
|
+
(0, utils_1.tsPropertyRemoval)(fileInfo.source, rootSource, j, '@progress/kendo-angular-layout', 'TabStripScrollableSettings', 'mouseScrollSpeed');
|
|
48
|
+
(0, utils_1.tsComponentPropertyRemoval)(fileInfo.source, rootSource, j, '@progress/kendo-angular-layout', 'TabStripComponent', 'scrollable', 'mouseScrollSpeed');
|
|
53
49
|
return rootSource.toSource();
|
|
54
50
|
}
|
|
@@ -7,7 +7,7 @@ import { Component, ElementRef, Input, NgZone, Renderer2, TemplateRef, Output, E
|
|
|
7
7
|
import { closestItem, itemIndex } from '../common/dom-queries';
|
|
8
8
|
import { DRAWER_ITEM_INDEX } from './models/constants';
|
|
9
9
|
import { DrawerService } from './drawer.service';
|
|
10
|
-
import { Keys,
|
|
10
|
+
import { Keys, normalizeKeys } from '@progress/kendo-angular-common';
|
|
11
11
|
import { ACTIVE_NESTED_LINK_SELECTOR, nestedLink } from './util';
|
|
12
12
|
import { DrawerListSelectEvent } from './events/drawer-list-select.event';
|
|
13
13
|
import { DrawerItemComponent } from './item.component';
|
|
@@ -52,7 +52,7 @@ export class DrawerListComponent {
|
|
|
52
52
|
const nativeElement = this.element.nativeElement;
|
|
53
53
|
this.subscriptions.add(this.renderer.listen(nativeElement, 'click', this.clickHandler.bind(this)));
|
|
54
54
|
this.subscriptions.add(this.renderer.listen(nativeElement, 'keydown', (e) => {
|
|
55
|
-
const code =
|
|
55
|
+
const code = normalizeKeys(e);
|
|
56
56
|
const isEnterOrSpace = code === Keys.Enter || code === Keys.Space;
|
|
57
57
|
const isArrowUpOrDown = code === Keys.ArrowUp || code === Keys.ArrowDown;
|
|
58
58
|
if (isEnterOrSpace) {
|
|
@@ -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.2.0-develop.
|
|
13
|
+
publishDate: 1764684962,
|
|
14
|
+
version: '21.2.0-develop.11',
|
|
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
|
};
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*-------------------------------------------------------------------------------------------*/
|
|
5
5
|
import { Component, ContentChild, ContentChildren, ElementRef, EventEmitter, HostBinding, HostListener, Input, Output, QueryList, ViewChildren, isDevMode } from '@angular/core';
|
|
6
6
|
import { LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';
|
|
7
|
-
import { Keys, shouldShowValidationUI, getLicenseMessage, WatermarkOverlayComponent,
|
|
7
|
+
import { Keys, shouldShowValidationUI, getLicenseMessage, WatermarkOverlayComponent, normalizeKeys } from '@progress/kendo-angular-common';
|
|
8
8
|
import { validatePackage } from '@progress/kendo-licensing';
|
|
9
9
|
import { packageMetadata } from '../package-metadata';
|
|
10
10
|
import { PanelBarExpandMode } from './panelbar-expand-mode';
|
|
@@ -268,7 +268,7 @@ export class PanelBarComponent {
|
|
|
268
268
|
onComponentKeyDown(event) {
|
|
269
269
|
if (event.target === this.elementRef.nativeElement) {
|
|
270
270
|
// on some keyboards arrow keys, PageUp/Down, and Home/End are mapped to Numpad keys
|
|
271
|
-
const code =
|
|
271
|
+
const code = normalizeKeys(event);
|
|
272
272
|
if (code === Keys.Space || code === Keys.ArrowUp || code === Keys.ArrowDown ||
|
|
273
273
|
code === Keys.ArrowLeft || code === Keys.ArrowRight || code === Keys.Home ||
|
|
274
274
|
code === Keys.End || code === Keys.PageUp || code === Keys.PageDown) {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
6
6
|
import { ChangeDetectorRef, Component, ElementRef, Host, HostBinding, Input, Renderer2 } from '@angular/core';
|
|
7
7
|
import { LocalizationService } from '@progress/kendo-angular-l10n';
|
|
8
|
-
import { DraggableDirective, Keys, isObjectPresent,
|
|
8
|
+
import { DraggableDirective, Keys, isObjectPresent, normalizeKeys, parseAttributes, removeHTMLAttributes, setHTMLAttributes } from '@progress/kendo-angular-common';
|
|
9
9
|
import { SplitterService } from './splitter.service';
|
|
10
10
|
import { Subscription, of } from 'rxjs';
|
|
11
11
|
import { delay, filter, map, switchMap, takeUntil, tap } from 'rxjs/operators';
|
|
@@ -225,7 +225,7 @@ export class SplitterBarComponent {
|
|
|
225
225
|
return panes.length === 2 && panes[1].collapsed;
|
|
226
226
|
}
|
|
227
227
|
onKeyDown(event) {
|
|
228
|
-
const keyCode =
|
|
228
|
+
const keyCode = normalizeKeys(event);
|
|
229
229
|
const shouldToggle = event.ctrlKey || event.metaKey;
|
|
230
230
|
if (keyCode === Keys.Enter || keyCode === Keys.NumpadEnter) {
|
|
231
231
|
event.preventDefault();
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Licensed under commercial license. See LICENSE.md in the project root for more information
|
|
4
4
|
*-------------------------------------------------------------------------------------------*/
|
|
5
5
|
import { Injectable, NgZone, ChangeDetectorRef, EventEmitter } from '@angular/core';
|
|
6
|
-
import { hasObservers, Keys,
|
|
6
|
+
import { hasObservers, Keys, normalizeKeys, PreventableEvent } from '@progress/kendo-angular-common';
|
|
7
7
|
import { LocalizationService } from '@progress/kendo-angular-l10n';
|
|
8
8
|
import { isPresent } from '../common/util';
|
|
9
9
|
import * as i0 from "@angular/core";
|
|
@@ -100,7 +100,7 @@ export class StepperService {
|
|
|
100
100
|
keydown(e) {
|
|
101
101
|
const current = this.focusedStep || this.currentStep;
|
|
102
102
|
// on some keyboards arrow keys, PageUp/Down, and Home/End are mapped to Numpad keys
|
|
103
|
-
const code =
|
|
103
|
+
const code = normalizeKeys(e);
|
|
104
104
|
const handler = this.handlers[code];
|
|
105
105
|
if (!isPresent(current)) {
|
|
106
106
|
return;
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*-------------------------------------------------------------------------------------------*/
|
|
5
5
|
import { Injectable, NgZone } from '@angular/core';
|
|
6
6
|
import { LocalizationService } from '@progress/kendo-angular-l10n';
|
|
7
|
-
import { Keys,
|
|
7
|
+
import { Keys, normalizeKeys } from '@progress/kendo-angular-common';
|
|
8
8
|
import { isArrowKey, isHorizontalArrowKey, isNavigationKey, isVerticalArrowKey } from '../common/util';
|
|
9
9
|
import { SelectEvent } from './events';
|
|
10
10
|
import { isTabClosable, getActiveTab, isTabElement, isTablistHorizontal, getTabByIndex, getTabHeaderByIndex, resetTabSelection } from './util';
|
|
@@ -26,7 +26,7 @@ export class TabStripService {
|
|
|
26
26
|
return;
|
|
27
27
|
}
|
|
28
28
|
// on some keyboards arrow keys, PageUp/Down, and Home/End are mapped to Numpad keys
|
|
29
|
-
const code =
|
|
29
|
+
const code = normalizeKeys(event);
|
|
30
30
|
if (this.shouldHandleKey(code)) {
|
|
31
31
|
event.preventDefault();
|
|
32
32
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*-------------------------------------------------------------------------------------------*/
|
|
5
5
|
/* eslint-disable no-unused-expressions */
|
|
6
6
|
import { Injectable, NgZone, Renderer2 } from '@angular/core';
|
|
7
|
-
import { Keys,
|
|
7
|
+
import { Keys, normalizeKeys } from '@progress/kendo-angular-common';
|
|
8
8
|
import { LocalizationService } from '@progress/kendo-angular-l10n';
|
|
9
9
|
import { BehaviorSubject } from 'rxjs';
|
|
10
10
|
import { focusableSelector } from '@progress/kendo-angular-common';
|
|
@@ -36,7 +36,7 @@ export class TileLayoutKeyboardNavigationService {
|
|
|
36
36
|
this.localizationSubscription.unsubscribe();
|
|
37
37
|
}
|
|
38
38
|
onKeyDown(event, elem, focusableItems, settings) {
|
|
39
|
-
const keyCode =
|
|
39
|
+
const keyCode = normalizeKeys(event);
|
|
40
40
|
const isTileFocused = document.activeElement === elem;
|
|
41
41
|
const focusedTile = settings.items.find(item => item.elem.nativeElement === elem);
|
|
42
42
|
const col = getCurrentCol(focusedTile, settings, this.rtl);
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**-----------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright © 2025 Progress Software Corporation. All rights reserved.
|
|
3
|
+
* Licensed under commercial license. See LICENSE.md in the project root for more information
|
|
4
|
+
*-------------------------------------------------------------------------------------------*/
|
|
5
|
+
export {};
|
|
@@ -6,7 +6,7 @@ import { ChangeDetectorRef, Component, ElementRef, Input, NgZone, QueryList, Ren
|
|
|
6
6
|
import { caretAltLeftIcon, caretAltRightIcon } from '@progress/kendo-svg-icons';
|
|
7
7
|
import { Subscription } from 'rxjs';
|
|
8
8
|
import { TimelineCardComponent } from './timeline-card.component';
|
|
9
|
-
import { Keys, ResizeSensorComponent, guid, isChanged, isDocumentAvailable, isPresent,
|
|
9
|
+
import { Keys, ResizeSensorComponent, guid, isChanged, isDocumentAvailable, isPresent, normalizeKeys } from '@progress/kendo-angular-common';
|
|
10
10
|
import { animate, state, style, transition, trigger } from '@angular/animations';
|
|
11
11
|
import { TimelineService } from './timeline.service';
|
|
12
12
|
import { LocalizationService } from '@progress/kendo-angular-l10n';
|
|
@@ -140,13 +140,7 @@ export class TimelineHorizontalComponent {
|
|
|
140
140
|
}
|
|
141
141
|
this.trackItems.push(event);
|
|
142
142
|
});
|
|
143
|
-
this.
|
|
144
|
-
.slice(this.firstCircleInView, this.firstCircleInView + this.visibleTabsCount)
|
|
145
|
-
.filter(event => !event.isFlag);
|
|
146
|
-
this.selectedEvent = this.events[0];
|
|
147
|
-
this.cdr.detectChanges();
|
|
148
|
-
this.calloutStyle = this.calloutOffset;
|
|
149
|
-
this.focusTrackItem(0);
|
|
143
|
+
this.navigateToFirstInterval();
|
|
150
144
|
}
|
|
151
145
|
}
|
|
152
146
|
}
|
|
@@ -306,7 +300,7 @@ export class TimelineHorizontalComponent {
|
|
|
306
300
|
if (!this.navigable) {
|
|
307
301
|
return;
|
|
308
302
|
}
|
|
309
|
-
const code =
|
|
303
|
+
const code = normalizeKeys(event);
|
|
310
304
|
event.preventDefault();
|
|
311
305
|
if (code === Keys.Home) {
|
|
312
306
|
this.onHomeKey();
|
|
@@ -39,18 +39,7 @@ export class TimelineComponent {
|
|
|
39
39
|
}
|
|
40
40
|
this.originalData = events;
|
|
41
41
|
this._events = processItems(this.originalData, this.modelFields);
|
|
42
|
-
this.
|
|
43
|
-
return a.date.getTime() - b.date.getTime();
|
|
44
|
-
});
|
|
45
|
-
if (this._events.length > 0) {
|
|
46
|
-
let flag = this._events[0].date.getFullYear() - 1;
|
|
47
|
-
this._events.forEach((event) => {
|
|
48
|
-
if (event.date.getFullYear() !== flag) {
|
|
49
|
-
flag = event.date.getFullYear();
|
|
50
|
-
event.flag = flag;
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
}
|
|
42
|
+
this.updateEvents();
|
|
54
43
|
}
|
|
55
44
|
get events() {
|
|
56
45
|
return this._events;
|
|
@@ -105,6 +94,23 @@ export class TimelineComponent {
|
|
|
105
94
|
* @default true
|
|
106
95
|
*/
|
|
107
96
|
animation;
|
|
97
|
+
/**
|
|
98
|
+
* Specifies the order of the Timeline events.
|
|
99
|
+
* `asc` - chronological order
|
|
100
|
+
* `desc` - reverse-chronological order
|
|
101
|
+
*
|
|
102
|
+
* @default 'asc'
|
|
103
|
+
*/
|
|
104
|
+
set eventsOrder(order) {
|
|
105
|
+
if (order === this._eventsOrder) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
this._eventsOrder = order;
|
|
109
|
+
this.updateEvents();
|
|
110
|
+
}
|
|
111
|
+
get eventsOrder() {
|
|
112
|
+
return this._eventsOrder;
|
|
113
|
+
}
|
|
108
114
|
/**
|
|
109
115
|
* Sets a specific width for the event.
|
|
110
116
|
* This setting is supported only in `vertical` mode.
|
|
@@ -232,6 +238,7 @@ export class TimelineComponent {
|
|
|
232
238
|
_eventHeight = DEFAULT_EVENT_HEIGHT;
|
|
233
239
|
_dateFormat = DEFAULT_DATE_FORMAT;
|
|
234
240
|
originalData = [];
|
|
241
|
+
_eventsOrder = 'asc';
|
|
235
242
|
subscriptions = new Subscription();
|
|
236
243
|
constructor(timelineService) {
|
|
237
244
|
this.timelineService = timelineService;
|
|
@@ -278,6 +285,24 @@ export class TimelineComponent {
|
|
|
278
285
|
collapse(index) {
|
|
279
286
|
this.timelineVertical?.collapse(index);
|
|
280
287
|
}
|
|
288
|
+
updateEvents() {
|
|
289
|
+
const sortOrder = this._eventsOrder === 'asc' ? 1 : -1;
|
|
290
|
+
this._events = [...this._events].sort((a, b) => {
|
|
291
|
+
return sortOrder * (a.date.getTime() - b.date.getTime());
|
|
292
|
+
});
|
|
293
|
+
if (this._events.length > 0) {
|
|
294
|
+
let flag = this._events[0].date.getFullYear() - sortOrder;
|
|
295
|
+
this._events.forEach((event) => {
|
|
296
|
+
if (event.date.getFullYear() === flag) {
|
|
297
|
+
event.flag = null;
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
flag = event.date.getFullYear();
|
|
301
|
+
event.flag = flag;
|
|
302
|
+
}
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
}
|
|
281
306
|
initTemplates() {
|
|
282
307
|
this.headerTemplate = this.cardHeaderTemplate?.first;
|
|
283
308
|
this.bodyTemplate = this.cardBodyTemplate?.first;
|
|
@@ -293,7 +318,7 @@ export class TimelineComponent {
|
|
|
293
318
|
}));
|
|
294
319
|
}
|
|
295
320
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TimelineComponent, deps: [{ token: i1.TimelineService }], target: i0.ɵɵFactoryTarget.Component });
|
|
296
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TimelineComponent, isStandalone: true, selector: "kendo-timeline", inputs: { events: "events", modelFields: "modelFields", orientation: "orientation", alterMode: "alterMode", collapsibleEvents: "collapsibleEvents", navigable: "navigable", showDateLabels: "showDateLabels", animation: "animation", eventWidth: "eventWidth", eventHeight: "eventHeight", dateFormat: "dateFormat" }, outputs: { onToggle: "onToggle", onActionClick: "onActionClick", onNavigate: "onNavigate" }, host: { properties: { "class.k-timeline": "this.hostClass", "class.k-timeline-vertical": "this.verticalClass", "class.k-timeline-horizontal": "this.horizontalClass", "class.k-timeline-alternating": "this.alternatingClass", "class.k-timeline-collapsible": "this.collapsibleClass" } }, providers: [
|
|
321
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TimelineComponent, isStandalone: true, selector: "kendo-timeline", inputs: { events: "events", modelFields: "modelFields", orientation: "orientation", alterMode: "alterMode", collapsibleEvents: "collapsibleEvents", navigable: "navigable", showDateLabels: "showDateLabels", animation: "animation", eventsOrder: "eventsOrder", eventWidth: "eventWidth", eventHeight: "eventHeight", dateFormat: "dateFormat" }, outputs: { onToggle: "onToggle", onActionClick: "onActionClick", onNavigate: "onNavigate" }, host: { properties: { "class.k-timeline": "this.hostClass", "class.k-timeline-vertical": "this.verticalClass", "class.k-timeline-horizontal": "this.horizontalClass", "class.k-timeline-alternating": "this.alternatingClass", "class.k-timeline-collapsible": "this.collapsibleClass" } }, providers: [
|
|
297
322
|
TimelineService,
|
|
298
323
|
LocalizationService,
|
|
299
324
|
{
|
|
@@ -419,6 +444,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
419
444
|
type: Input
|
|
420
445
|
}], animation: [{
|
|
421
446
|
type: Input
|
|
447
|
+
}], eventsOrder: [{
|
|
448
|
+
type: Input
|
|
422
449
|
}], eventWidth: [{
|
|
423
450
|
type: Input
|
|
424
451
|
}], eventHeight: [{
|
|
@@ -7,7 +7,7 @@ import { Injectable, Directive, Optional, isDevMode, Component, SkipSelf, Host,
|
|
|
7
7
|
import * as i1 from '@progress/kendo-angular-l10n';
|
|
8
8
|
import { LocalizationService, L10N_PREFIX, ComponentMessages } from '@progress/kendo-angular-l10n';
|
|
9
9
|
import * as i1$1 from '@progress/kendo-angular-common';
|
|
10
|
-
import { Keys, getLicenseMessage, shouldShowValidationUI,
|
|
10
|
+
import { Keys, getLicenseMessage, shouldShowValidationUI, normalizeKeys, WatermarkOverlayComponent, isDocumentAvailable, anyChanged, isObjectPresent, removeHTMLAttributes, parseAttributes, setHTMLAttributes, DraggableDirective, PreventableEvent as PreventableEvent$1, guid, ResizeSensorComponent, hasObservers, isPresent as isPresent$1, focusableSelector, isChanged } from '@progress/kendo-angular-common';
|
|
11
11
|
import { validatePackage } from '@progress/kendo-licensing';
|
|
12
12
|
import * as i1$2 from '@angular/animations';
|
|
13
13
|
import { trigger, state, style, transition, animate, AUTO_STYLE } from '@angular/animations';
|
|
@@ -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.2.0-develop.
|
|
32
|
+
publishDate: 1764684962,
|
|
33
|
+
version: '21.2.0-develop.11',
|
|
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
|
|
|
@@ -1363,7 +1363,7 @@ class PanelBarComponent {
|
|
|
1363
1363
|
onComponentKeyDown(event) {
|
|
1364
1364
|
if (event.target === this.elementRef.nativeElement) {
|
|
1365
1365
|
// on some keyboards arrow keys, PageUp/Down, and Home/End are mapped to Numpad keys
|
|
1366
|
-
const code =
|
|
1366
|
+
const code = normalizeKeys(event);
|
|
1367
1367
|
if (code === Keys.Space || code === Keys.ArrowUp || code === Keys.ArrowDown ||
|
|
1368
1368
|
code === Keys.ArrowLeft || code === Keys.ArrowRight || code === Keys.Home ||
|
|
1369
1369
|
code === Keys.End || code === Keys.PageUp || code === Keys.PageDown) {
|
|
@@ -2546,7 +2546,7 @@ class SplitterBarComponent {
|
|
|
2546
2546
|
return panes.length === 2 && panes[1].collapsed;
|
|
2547
2547
|
}
|
|
2548
2548
|
onKeyDown(event) {
|
|
2549
|
-
const keyCode =
|
|
2549
|
+
const keyCode = normalizeKeys(event);
|
|
2550
2550
|
const shouldToggle = event.ctrlKey || event.metaKey;
|
|
2551
2551
|
if (keyCode === Keys.Enter || keyCode === Keys.NumpadEnter) {
|
|
2552
2552
|
event.preventDefault();
|
|
@@ -3340,7 +3340,7 @@ class TabStripService {
|
|
|
3340
3340
|
return;
|
|
3341
3341
|
}
|
|
3342
3342
|
// on some keyboards arrow keys, PageUp/Down, and Home/End are mapped to Numpad keys
|
|
3343
|
-
const code =
|
|
3343
|
+
const code = normalizeKeys(event);
|
|
3344
3344
|
if (this.shouldHandleKey(code)) {
|
|
3345
3345
|
event.preventDefault();
|
|
3346
3346
|
}
|
|
@@ -5703,7 +5703,7 @@ class DrawerListComponent {
|
|
|
5703
5703
|
const nativeElement = this.element.nativeElement;
|
|
5704
5704
|
this.subscriptions.add(this.renderer.listen(nativeElement, 'click', this.clickHandler.bind(this)));
|
|
5705
5705
|
this.subscriptions.add(this.renderer.listen(nativeElement, 'keydown', (e) => {
|
|
5706
|
-
const code =
|
|
5706
|
+
const code = normalizeKeys(e);
|
|
5707
5707
|
const isEnterOrSpace = code === Keys.Enter || code === Keys.Space;
|
|
5708
5708
|
const isArrowUpOrDown = code === Keys.ArrowUp || code === Keys.ArrowDown;
|
|
5709
5709
|
if (isEnterOrSpace) {
|
|
@@ -6645,7 +6645,7 @@ class StepperService {
|
|
|
6645
6645
|
keydown(e) {
|
|
6646
6646
|
const current = this.focusedStep || this.currentStep;
|
|
6647
6647
|
// on some keyboards arrow keys, PageUp/Down, and Home/End are mapped to Numpad keys
|
|
6648
|
-
const code =
|
|
6648
|
+
const code = normalizeKeys(e);
|
|
6649
6649
|
const handler = this.handlers[code];
|
|
6650
6650
|
if (!isPresent(current)) {
|
|
6651
6651
|
return;
|
|
@@ -10110,7 +10110,7 @@ class TileLayoutKeyboardNavigationService {
|
|
|
10110
10110
|
this.localizationSubscription.unsubscribe();
|
|
10111
10111
|
}
|
|
10112
10112
|
onKeyDown(event, elem, focusableItems, settings) {
|
|
10113
|
-
const keyCode =
|
|
10113
|
+
const keyCode = normalizeKeys(event);
|
|
10114
10114
|
const isTileFocused = document.activeElement === elem;
|
|
10115
10115
|
const focusedTile = settings.items.find(item => item.elem.nativeElement === elem);
|
|
10116
10116
|
const col = getCurrentCol(focusedTile, settings, this.rtl);
|
|
@@ -12342,13 +12342,7 @@ class TimelineHorizontalComponent {
|
|
|
12342
12342
|
}
|
|
12343
12343
|
this.trackItems.push(event);
|
|
12344
12344
|
});
|
|
12345
|
-
this.
|
|
12346
|
-
.slice(this.firstCircleInView, this.firstCircleInView + this.visibleTabsCount)
|
|
12347
|
-
.filter(event => !event.isFlag);
|
|
12348
|
-
this.selectedEvent = this.events[0];
|
|
12349
|
-
this.cdr.detectChanges();
|
|
12350
|
-
this.calloutStyle = this.calloutOffset;
|
|
12351
|
-
this.focusTrackItem(0);
|
|
12345
|
+
this.navigateToFirstInterval();
|
|
12352
12346
|
}
|
|
12353
12347
|
}
|
|
12354
12348
|
}
|
|
@@ -12508,7 +12502,7 @@ class TimelineHorizontalComponent {
|
|
|
12508
12502
|
if (!this.navigable) {
|
|
12509
12503
|
return;
|
|
12510
12504
|
}
|
|
12511
|
-
const code =
|
|
12505
|
+
const code = normalizeKeys(event);
|
|
12512
12506
|
event.preventDefault();
|
|
12513
12507
|
if (code === Keys.Home) {
|
|
12514
12508
|
this.onHomeKey();
|
|
@@ -13231,18 +13225,7 @@ class TimelineComponent {
|
|
|
13231
13225
|
}
|
|
13232
13226
|
this.originalData = events;
|
|
13233
13227
|
this._events = processItems(this.originalData, this.modelFields);
|
|
13234
|
-
this.
|
|
13235
|
-
return a.date.getTime() - b.date.getTime();
|
|
13236
|
-
});
|
|
13237
|
-
if (this._events.length > 0) {
|
|
13238
|
-
let flag = this._events[0].date.getFullYear() - 1;
|
|
13239
|
-
this._events.forEach((event) => {
|
|
13240
|
-
if (event.date.getFullYear() !== flag) {
|
|
13241
|
-
flag = event.date.getFullYear();
|
|
13242
|
-
event.flag = flag;
|
|
13243
|
-
}
|
|
13244
|
-
});
|
|
13245
|
-
}
|
|
13228
|
+
this.updateEvents();
|
|
13246
13229
|
}
|
|
13247
13230
|
get events() {
|
|
13248
13231
|
return this._events;
|
|
@@ -13297,6 +13280,23 @@ class TimelineComponent {
|
|
|
13297
13280
|
* @default true
|
|
13298
13281
|
*/
|
|
13299
13282
|
animation;
|
|
13283
|
+
/**
|
|
13284
|
+
* Specifies the order of the Timeline events.
|
|
13285
|
+
* `asc` - chronological order
|
|
13286
|
+
* `desc` - reverse-chronological order
|
|
13287
|
+
*
|
|
13288
|
+
* @default 'asc'
|
|
13289
|
+
*/
|
|
13290
|
+
set eventsOrder(order) {
|
|
13291
|
+
if (order === this._eventsOrder) {
|
|
13292
|
+
return;
|
|
13293
|
+
}
|
|
13294
|
+
this._eventsOrder = order;
|
|
13295
|
+
this.updateEvents();
|
|
13296
|
+
}
|
|
13297
|
+
get eventsOrder() {
|
|
13298
|
+
return this._eventsOrder;
|
|
13299
|
+
}
|
|
13300
13300
|
/**
|
|
13301
13301
|
* Sets a specific width for the event.
|
|
13302
13302
|
* This setting is supported only in `vertical` mode.
|
|
@@ -13424,6 +13424,7 @@ class TimelineComponent {
|
|
|
13424
13424
|
_eventHeight = DEFAULT_EVENT_HEIGHT;
|
|
13425
13425
|
_dateFormat = DEFAULT_DATE_FORMAT;
|
|
13426
13426
|
originalData = [];
|
|
13427
|
+
_eventsOrder = 'asc';
|
|
13427
13428
|
subscriptions = new Subscription();
|
|
13428
13429
|
constructor(timelineService) {
|
|
13429
13430
|
this.timelineService = timelineService;
|
|
@@ -13470,6 +13471,24 @@ class TimelineComponent {
|
|
|
13470
13471
|
collapse(index) {
|
|
13471
13472
|
this.timelineVertical?.collapse(index);
|
|
13472
13473
|
}
|
|
13474
|
+
updateEvents() {
|
|
13475
|
+
const sortOrder = this._eventsOrder === 'asc' ? 1 : -1;
|
|
13476
|
+
this._events = [...this._events].sort((a, b) => {
|
|
13477
|
+
return sortOrder * (a.date.getTime() - b.date.getTime());
|
|
13478
|
+
});
|
|
13479
|
+
if (this._events.length > 0) {
|
|
13480
|
+
let flag = this._events[0].date.getFullYear() - sortOrder;
|
|
13481
|
+
this._events.forEach((event) => {
|
|
13482
|
+
if (event.date.getFullYear() === flag) {
|
|
13483
|
+
event.flag = null;
|
|
13484
|
+
}
|
|
13485
|
+
else {
|
|
13486
|
+
flag = event.date.getFullYear();
|
|
13487
|
+
event.flag = flag;
|
|
13488
|
+
}
|
|
13489
|
+
});
|
|
13490
|
+
}
|
|
13491
|
+
}
|
|
13473
13492
|
initTemplates() {
|
|
13474
13493
|
this.headerTemplate = this.cardHeaderTemplate?.first;
|
|
13475
13494
|
this.bodyTemplate = this.cardBodyTemplate?.first;
|
|
@@ -13485,7 +13504,7 @@ class TimelineComponent {
|
|
|
13485
13504
|
}));
|
|
13486
13505
|
}
|
|
13487
13506
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TimelineComponent, deps: [{ token: TimelineService }], target: i0.ɵɵFactoryTarget.Component });
|
|
13488
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TimelineComponent, isStandalone: true, selector: "kendo-timeline", inputs: { events: "events", modelFields: "modelFields", orientation: "orientation", alterMode: "alterMode", collapsibleEvents: "collapsibleEvents", navigable: "navigable", showDateLabels: "showDateLabels", animation: "animation", eventWidth: "eventWidth", eventHeight: "eventHeight", dateFormat: "dateFormat" }, outputs: { onToggle: "onToggle", onActionClick: "onActionClick", onNavigate: "onNavigate" }, host: { properties: { "class.k-timeline": "this.hostClass", "class.k-timeline-vertical": "this.verticalClass", "class.k-timeline-horizontal": "this.horizontalClass", "class.k-timeline-alternating": "this.alternatingClass", "class.k-timeline-collapsible": "this.collapsibleClass" } }, providers: [
|
|
13507
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TimelineComponent, isStandalone: true, selector: "kendo-timeline", inputs: { events: "events", modelFields: "modelFields", orientation: "orientation", alterMode: "alterMode", collapsibleEvents: "collapsibleEvents", navigable: "navigable", showDateLabels: "showDateLabels", animation: "animation", eventsOrder: "eventsOrder", eventWidth: "eventWidth", eventHeight: "eventHeight", dateFormat: "dateFormat" }, outputs: { onToggle: "onToggle", onActionClick: "onActionClick", onNavigate: "onNavigate" }, host: { properties: { "class.k-timeline": "this.hostClass", "class.k-timeline-vertical": "this.verticalClass", "class.k-timeline-horizontal": "this.horizontalClass", "class.k-timeline-alternating": "this.alternatingClass", "class.k-timeline-collapsible": "this.collapsibleClass" } }, providers: [
|
|
13489
13508
|
TimelineService,
|
|
13490
13509
|
LocalizationService,
|
|
13491
13510
|
{
|
|
@@ -13611,6 +13630,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
13611
13630
|
type: Input
|
|
13612
13631
|
}], animation: [{
|
|
13613
13632
|
type: Input
|
|
13633
|
+
}], eventsOrder: [{
|
|
13634
|
+
type: Input
|
|
13614
13635
|
}], eventWidth: [{
|
|
13615
13636
|
type: Input
|
|
13616
13637
|
}], eventHeight: [{
|
package/index.d.ts
CHANGED
|
@@ -92,6 +92,7 @@ export { TimelineModelFields } from './timeline/models/model-fields';
|
|
|
92
92
|
export { TimelineEvent } from './timeline/models/timeline-event';
|
|
93
93
|
export { AnchorTarget } from './timeline/models/anchor-target';
|
|
94
94
|
export { NavigationDirection } from './timeline/events/navigation-direction';
|
|
95
|
+
export { TimelineEventsOrder } from './timeline/models/events-order';
|
|
95
96
|
export { TimelineCardHeaderTemplateDirective } from "./timeline/templates/timeline-card-header.directive";
|
|
96
97
|
export { TimelineCardBodyTemplateDirective } from "./timeline/templates/timeline-card-body.directive";
|
|
97
98
|
export { TimelineCardActionsTemplateDirective } from "./timeline/templates/timeline-card-actions.directive";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@progress/kendo-angular-layout",
|
|
3
|
-
"version": "21.2.0-develop.
|
|
3
|
+
"version": "21.2.0-develop.11",
|
|
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": 1764684962,
|
|
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,19 +60,18 @@
|
|
|
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.2.0-develop.
|
|
64
|
-
"@progress/kendo-angular-l10n": "21.2.0-develop.
|
|
65
|
-
"@progress/kendo-angular-progressbar": "21.2.0-develop.
|
|
66
|
-
"@progress/kendo-angular-icons": "21.2.0-develop.
|
|
67
|
-
"@progress/kendo-angular-buttons": "21.2.0-develop.
|
|
68
|
-
"@progress/kendo-angular-intl": "21.2.0-develop.
|
|
63
|
+
"@progress/kendo-angular-common": "21.2.0-develop.11",
|
|
64
|
+
"@progress/kendo-angular-l10n": "21.2.0-develop.11",
|
|
65
|
+
"@progress/kendo-angular-progressbar": "21.2.0-develop.11",
|
|
66
|
+
"@progress/kendo-angular-icons": "21.2.0-develop.11",
|
|
67
|
+
"@progress/kendo-angular-buttons": "21.2.0-develop.11",
|
|
68
|
+
"@progress/kendo-angular-intl": "21.2.0-develop.11",
|
|
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.2.0-develop.
|
|
74
|
-
"@progress/kendo-draggable": "^3.0.2"
|
|
75
|
-
"node-html-parser": "^7.0.1"
|
|
73
|
+
"@progress/kendo-angular-schematics": "21.2.0-develop.11",
|
|
74
|
+
"@progress/kendo-draggable": "^3.0.2"
|
|
76
75
|
},
|
|
77
76
|
"schematics": "./schematics/collection.json",
|
|
78
77
|
"module": "fesm2022/progress-kendo-angular-layout.mjs",
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**-----------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright © 2025 Progress Software Corporation. All rights reserved.
|
|
3
|
+
* Licensed under commercial license. See LICENSE.md in the project root for more information
|
|
4
|
+
*-------------------------------------------------------------------------------------------*/
|
|
5
|
+
/**
|
|
6
|
+
* Specifies the order of the Timeline events.
|
|
7
|
+
* `asc` - chronological order
|
|
8
|
+
* `desc` - reverse-chronological order
|
|
9
|
+
*/
|
|
10
|
+
export type TimelineEventsOrder = 'asc' | 'desc';
|
|
@@ -12,6 +12,7 @@ import { NavigationDirection } from './events/navigation-direction';
|
|
|
12
12
|
import { TimelineCardBodyTemplateDirective } from './templates/timeline-card-body.directive';
|
|
13
13
|
import { TimelineCardHeaderTemplateDirective } from './templates/timeline-card-header.directive';
|
|
14
14
|
import { TimelineCardActionsTemplateDirective } from './templates/timeline-card-actions.directive';
|
|
15
|
+
import { TimelineEventsOrder } from './models/events-order';
|
|
15
16
|
import * as i0 from "@angular/core";
|
|
16
17
|
/**
|
|
17
18
|
* Represents the [Kendo UI Timeline component for Angular]({% slug overview_timeline %}).
|
|
@@ -69,6 +70,15 @@ export declare class TimelineComponent implements AfterContentInit, OnDestroy {
|
|
|
69
70
|
* @default true
|
|
70
71
|
*/
|
|
71
72
|
animation: boolean | number;
|
|
73
|
+
/**
|
|
74
|
+
* Specifies the order of the Timeline events.
|
|
75
|
+
* `asc` - chronological order
|
|
76
|
+
* `desc` - reverse-chronological order
|
|
77
|
+
*
|
|
78
|
+
* @default 'asc'
|
|
79
|
+
*/
|
|
80
|
+
set eventsOrder(order: TimelineEventsOrder);
|
|
81
|
+
get eventsOrder(): TimelineEventsOrder;
|
|
72
82
|
/**
|
|
73
83
|
* Sets a specific width for the event.
|
|
74
84
|
* This setting is supported only in `vertical` mode.
|
|
@@ -153,6 +163,7 @@ export declare class TimelineComponent implements AfterContentInit, OnDestroy {
|
|
|
153
163
|
private _eventHeight;
|
|
154
164
|
private _dateFormat;
|
|
155
165
|
private originalData;
|
|
166
|
+
private _eventsOrder;
|
|
156
167
|
private subscriptions;
|
|
157
168
|
constructor(timelineService: TimelineService);
|
|
158
169
|
ngAfterContentInit(): void;
|
|
@@ -182,7 +193,8 @@ export declare class TimelineComponent implements AfterContentInit, OnDestroy {
|
|
|
182
193
|
* This method is supported only in `vertical` mode.
|
|
183
194
|
*/
|
|
184
195
|
collapse(index: number): void;
|
|
196
|
+
private updateEvents;
|
|
185
197
|
private initTemplates;
|
|
186
198
|
static ɵfac: i0.ɵɵFactoryDeclaration<TimelineComponent, never>;
|
|
187
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<TimelineComponent, "kendo-timeline", ["kendoTimeline"], { "events": { "alias": "events"; "required": false; }; "modelFields": { "alias": "modelFields"; "required": false; }; "orientation": { "alias": "orientation"; "required": false; }; "alterMode": { "alias": "alterMode"; "required": false; }; "collapsibleEvents": { "alias": "collapsibleEvents"; "required": false; }; "navigable": { "alias": "navigable"; "required": false; }; "showDateLabels": { "alias": "showDateLabels"; "required": false; }; "animation": { "alias": "animation"; "required": false; }; "eventWidth": { "alias": "eventWidth"; "required": false; }; "eventHeight": { "alias": "eventHeight"; "required": false; }; "dateFormat": { "alias": "dateFormat"; "required": false; }; }, { "onToggle": "onToggle"; "onActionClick": "onActionClick"; "onNavigate": "onNavigate"; }, ["cardHeaderTemplate", "cardBodyTemplate", "cardActionsTemplate"], never, true, never>;
|
|
199
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TimelineComponent, "kendo-timeline", ["kendoTimeline"], { "events": { "alias": "events"; "required": false; }; "modelFields": { "alias": "modelFields"; "required": false; }; "orientation": { "alias": "orientation"; "required": false; }; "alterMode": { "alias": "alterMode"; "required": false; }; "collapsibleEvents": { "alias": "collapsibleEvents"; "required": false; }; "navigable": { "alias": "navigable"; "required": false; }; "showDateLabels": { "alias": "showDateLabels"; "required": false; }; "animation": { "alias": "animation"; "required": false; }; "eventsOrder": { "alias": "eventsOrder"; "required": false; }; "eventWidth": { "alias": "eventWidth"; "required": false; }; "eventHeight": { "alias": "eventHeight"; "required": false; }; "dateFormat": { "alias": "dateFormat"; "required": false; }; }, { "onToggle": "onToggle"; "onActionClick": "onActionClick"; "onNavigate": "onNavigate"; }, ["cardHeaderTemplate", "cardBodyTemplate", "cardActionsTemplate"], never, true, never>;
|
|
188
200
|
}
|