@progress/kendo-react-layout 5.15.0-dev.202307061400 → 5.15.0-dev.202307131533

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.
@@ -5,7 +5,7 @@ export var packageMetadata = {
5
5
  name: '@progress/kendo-react-layout',
6
6
  productName: 'KendoReact',
7
7
  productCodes: ['KENDOUIREACT', 'KENDOUICOMPLETE'],
8
- publishDate: 1688649586,
8
+ publishDate: 1689260358,
9
9
  version: '',
10
10
  licensingDocsUrl: 'https://www.telerik.com/kendo-react-ui/my-license/?utm_medium=product&utm_source=kendoreact&utm_campaign=kendo-ui-react-purchase-license-keys-warning'
11
11
  };
@@ -1,6 +1,10 @@
1
1
  import * as React from 'react';
2
2
  import { EventDataProps } from './TimelineCard';
3
3
  export interface TimelineEventProps {
4
+ /**
5
+ * Specifies if the event card is default collapsed.
6
+ */
7
+ opened?: boolean;
4
8
  /**
5
9
  * Specifies the text that is rendered as body of the event card.
6
10
  */
@@ -31,6 +35,10 @@ export interface TimelineEventProps {
31
35
  text: string;
32
36
  url: string;
33
37
  }[];
38
+ /**
39
+ * @Hidden
40
+ */
41
+ yearFlag?: number;
34
42
  }
35
43
  export interface TimelineProps {
36
44
  events: TimelineEventProps[];
@@ -54,6 +62,13 @@ export interface TimelineProps {
54
62
  * Render events alternatingly on both sides of the axis.
55
63
  */
56
64
  alterMode?: boolean;
65
+ /**
66
+ * Specifies the time for sliding to next event in horizontal mode and time for collapsing the event in vertical mode.
67
+ * The default value are:
68
+ * - `300ms` for horizontal
69
+ * - `400ms` for vertical
70
+ */
71
+ transitionDuration?: number;
57
72
  /**
58
73
  * An event that is called when event card is toggled.
59
74
  */
@@ -63,4 +78,13 @@ export interface TimelineProps {
63
78
  */
64
79
  onActionClick?: (event: EventDataProps) => void;
65
80
  }
81
+ /**
82
+ * @hidden
83
+ */
84
+ export interface TimelineDirectionsProps {
85
+ eventsData: TimelineEventProps[];
86
+ dateFormat?: string;
87
+ transitionDuration?: number;
88
+ onActionClick?: (event: EventDataProps) => void;
89
+ }
66
90
  export declare const Timeline: React.FunctionComponent<TimelineProps>;
@@ -1,36 +1,27 @@
1
1
  import * as React from 'react';
2
2
  import * as PropTypes from 'prop-types';
3
- import { TimelineCard } from './TimelineCard';
4
3
  import { classNames } from '@progress/kendo-react-common';
5
- import { useInternationalization } from '@progress/kendo-react-intl';
4
+ import { TimelineHorizontal } from './TimelineHorizontal';
5
+ import { TimelineVertical } from './TimelineVertical';
6
6
  export var Timeline = function (props) {
7
- var collapsibleEvents = props.collapsibleEvents, className = props.className, alterMode = props.alterMode, horizontal = props.horizontal, events = props.events, dateFormat = props.dateFormat, onChange = props.onChange, onActionClick = props.onActionClick;
8
- var intl = useInternationalization();
9
- var yearPoint = undefined;
10
- var setYearPoint = function (year) {
11
- yearPoint = year;
12
- return (React.createElement("li", { className: "k-timeline-flag-wrap" },
13
- React.createElement("span", { className: "k-timeline-flag" }, year)));
14
- };
15
- var timelineVertical = function () { return (React.createElement("ul", null, events.map(function (eventData, index) {
16
- return (React.createElement(React.Fragment, { key: index },
17
- yearPoint !== eventData.date.getFullYear() && setYearPoint(eventData.date.getFullYear()),
18
- React.createElement("li", { className: classNames('k-timeline-event', { 'k-reverse': index % 2 === 0 }) },
19
- React.createElement("div", { className: "k-timeline-date-wrap" },
20
- React.createElement("span", { className: "k-timeline-date" }, intl.formatDate(eventData.date, dateFormat))),
21
- React.createElement("a", { className: "k-timeline-circle" }),
22
- React.createElement(TimelineCard, { eventData: eventData, alternated: alterMode && index % 2 === 0, collapsible: collapsibleEvents, onChange: onChange, onActionClick: onActionClick }))));
23
- }))); };
24
- return (React.createElement("div", { className: classNames('k-timeline', 'k-timeline-collapsible', {
7
+ var collapsibleEvents = props.collapsibleEvents, transitionDuration = props.transitionDuration, className = props.className, alterMode = props.alterMode, horizontal = props.horizontal, events = props.events, dateFormat = props.dateFormat, onChange = props.onChange, onActionClick = props.onActionClick;
8
+ var _a = React.useState(), trackAxisWidth = _a[0], setTrackAxisWidth = _a[1];
9
+ var trackWrapRef = React.useRef(null);
10
+ React.useEffect(function () {
11
+ var _a;
12
+ setTrackAxisWidth((_a = trackWrapRef.current) === null || _a === void 0 ? void 0 : _a.offsetWidth);
13
+ }, []);
14
+ return (React.createElement("div", { ref: trackWrapRef, className: classNames('k-timeline', {
25
15
  'k-timeline-collapsible': collapsibleEvents,
26
16
  'k-timeline-vertical': !horizontal,
27
17
  'k-timeline-alternating': alterMode,
28
18
  'k-timeline-horizontal': horizontal
29
- }, className) }, timelineVertical()));
19
+ }, className), style: { width: "".concat(trackAxisWidth, "px") } }, horizontal ? React.createElement(TimelineHorizontal, { eventsData: events, dateFormat: dateFormat, transitionDuration: transitionDuration, onActionClick: onActionClick })
20
+ : React.createElement(TimelineVertical, { eventsData: events, dateFormat: dateFormat, alterMode: alterMode, collapsibleEvents: collapsibleEvents, transitionDuration: transitionDuration, onChange: onChange, onActionClick: onActionClick })));
30
21
  };
31
22
  Timeline.defaultProps = {
32
23
  alterMode: false,
33
- collapsibleEvents: false,
24
+ collapsibleEvents: true,
34
25
  dateFormat: 'MMM dd, yyyy'
35
26
  };
36
27
  Timeline.propTypes = {
@@ -4,9 +4,14 @@ import { TimelineEventProps } from './Timeline';
4
4
  * @hidden
5
5
  */
6
6
  interface TimelineCardProps {
7
+ tabindex?: number;
8
+ id?: string;
7
9
  eventData: TimelineEventProps;
8
10
  alternated?: boolean;
11
+ horizontal?: boolean;
9
12
  collapsible?: boolean;
13
+ calloutStyle?: React.CSSProperties;
14
+ transitionDuration?: number;
10
15
  onChange?: (event: EventDataProps) => void;
11
16
  onActionClick?: (event: EventDataProps) => void;
12
17
  }
@@ -7,17 +7,16 @@ import { CardSubtitle } from '../card/CardSubtitle';
7
7
  import { CardBody } from '../card/CardBody';
8
8
  import { CardImage } from '../card/CardImage';
9
9
  import { CardActions } from '../card/CardActions';
10
- import { Button } from '@progress/kendo-react-buttons';
11
- import { classNames } from '@progress/kendo-react-common';
10
+ import { SvgIcon, classNames } from '@progress/kendo-react-common';
12
11
  import { Reveal } from '@progress/kendo-react-animation';
13
12
  import { chevronRightIcon } from '@progress/kendo-svg-icons';
14
13
  export var TimelineCard = function (props) {
15
- var animationDuration = 400;
14
+ var ANIMATION_DURATION = 400;
16
15
  var _a = props.eventData, title = _a.title, subtitle = _a.subtitle, actions = _a.actions, images = _a.images, description = _a.description;
17
- var _b = React.useState(true), collapse = _b[0], setCollapse = _b[1];
18
- var _c = React.useState(true), collapsed = _c[0], setCollapsed = _c[1];
16
+ var _b = React.useState(props.eventData.opened || false), open = _b[0], setOpen = _b[1];
17
+ var _c = React.useState(props.eventData.opened || !!props.collapsible), opened = _c[0], setOpened = _c[1];
19
18
  var toggleCard = function (event) {
20
- setCollapse(!collapse);
19
+ setOpen(!open);
21
20
  if (props.onChange) {
22
21
  var toggleEvent = {
23
22
  syntheticEvent: event,
@@ -37,22 +36,24 @@ export var TimelineCard = function (props) {
37
36
  props.onActionClick.call(undefined, actionClickEvent);
38
37
  }
39
38
  };
40
- var cardBody = function () { return (React.createElement(CardBody, null,
41
- React.createElement("div", { className: "k-card-description" },
42
- React.createElement("p", null, description),
43
- images && images.map(function (image, index) { return (React.createElement(CardImage, { key: index, src: image.src })); })),
39
+ var cardBody = function () { return (React.createElement(React.Fragment, null,
40
+ React.createElement(CardBody, null,
41
+ React.createElement("div", { className: "k-card-description" },
42
+ React.createElement("p", null, description),
43
+ images && images.map(function (image, index) { return (React.createElement(CardImage, { key: index, src: image.src })); }))),
44
44
  React.createElement(CardActions, null, actions && actions.map(function (action, index) { return (React.createElement("a", { key: index, href: action.url, className: "k-button k-button-md k-rounded-md k-button-flat k-button-flat-primary", onClick: actionClick }, action.text)); })))); };
45
- return (React.createElement("div", { className: classNames('k-timeline-card', { 'k-collapsed': props.collapsible && collapsed }) },
46
- React.createElement(Card, { className: "k-card-with-callout" },
47
- React.createElement("span", { className: classNames('k-timeline-card-callout', 'k-card-callout', { 'k-callout-e': props.alternated }, { 'k-callout-w': !props.alternated }) }),
48
- React.createElement("div", { className: "k-card-inner" },
45
+ return (React.createElement("div", { className: classNames('k-timeline-card', { 'k-collapsed': props.collapsible && opened }) },
46
+ React.createElement(Card, { "aria-live": "polite", "aria-describedby": props.id, "aria-atomic": "true", tabIndex: props.tabindex, role: props.horizontal ? 'tabpanel' : 'button', "aria-expanded": props.collapsible && opened },
47
+ React.createElement("span", { style: props.calloutStyle, className: classNames('k-timeline-card-callout', 'k-card-callout', { 'k-callout-n': props.horizontal }, { 'k-callout-e': props.alternated && !props.horizontal }, { 'k-callout-w': !props.alternated && !props.horizontal }) }),
48
+ React.createElement("div", { className: 'k-card-inner' },
49
49
  React.createElement(CardHeader, null,
50
50
  React.createElement(CardTitle, null,
51
51
  React.createElement("span", { className: "k-event-title" }, title),
52
- props.collapsible && React.createElement(Button, { fillMode: 'flat', icon: 'chevron-right', svgIcon: chevronRightIcon, onClick: function (event) { return toggleCard(event); }, className: 'k-event-collapse' })),
52
+ props.collapsible && React.createElement("span", { onClick: function (event) { return toggleCard(event); }, className: "k-event-collapse k-button k-button-md k-rounded-md k-button-flat k-button-flat-base k-icon-button" },
53
+ React.createElement(SvgIcon, { icon: chevronRightIcon }))),
53
54
  subtitle && React.createElement(CardSubtitle, null, subtitle)),
54
- props.collapsible ?
55
- React.createElement(Reveal, { transitionEnterDuration: animationDuration, transitionExitDuration: animationDuration, onBeforeEnter: function () { return setCollapsed(false); }, onAfterExited: function () { return setCollapsed(true); } }, !collapse ? cardBody() : null)
55
+ props.collapsible
56
+ ? React.createElement(Reveal, { transitionEnterDuration: props.transitionDuration || ANIMATION_DURATION, transitionExitDuration: props.transitionDuration || ANIMATION_DURATION, onBeforeEnter: function () { return setOpened(false); }, onAfterExited: function () { return setOpened(true); } }, open ? cardBody() : null)
56
57
  : cardBody()))));
57
58
  };
58
59
  TimelineCard.propTypes = {
@@ -0,0 +1,3 @@
1
+ import * as React from 'react';
2
+ import { TimelineDirectionsProps } from './Timeline';
3
+ export declare const TimelineHorizontal: React.FunctionComponent<TimelineDirectionsProps>;
@@ -0,0 +1,205 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ import * as React from 'react';
13
+ import * as PropTypes from 'prop-types';
14
+ import { TimelineCard } from './TimelineCard';
15
+ import { addYearsFlags } from './utils';
16
+ import { caretAltLeftIcon, caretAltRightIcon } from '@progress/kendo-svg-icons';
17
+ import { useInternationalization } from '@progress/kendo-react-intl';
18
+ import { classNames, canUseDOM, SvgIcon } from '@progress/kendo-react-common';
19
+ export var TimelineHorizontal = function (props) {
20
+ var DEFAULT_EVENT_POINT_WITH = 150;
21
+ var EVENT_CARD_TRANSITION_DURATION = 300;
22
+ var intl = useInternationalization();
23
+ var _a = React.useState(false), arrowLeft = _a[0], setArrowLeft = _a[1];
24
+ var _b = React.useState(true), arrowRight = _b[0], setArrowRight = _b[1];
25
+ var _c = React.useState(), calloutOffset = _c[0], setCalloutOffset = _c[1];
26
+ var _d = React.useState(0), translate = _d[0], setTranslate = _d[1];
27
+ var _e = React.useState(), tabFlexWith = _e[0], setTabFlexWith = _e[1];
28
+ var _f = React.useState(0), visibleTabs = _f[0], setVisibleTabs = _f[1];
29
+ var _g = React.useState(0), firstIndexInView = _g[0], setFirstIndexInView = _g[1];
30
+ var _h = React.useState(1), currentEvent = _h[0], setCurrentEvent = _h[1];
31
+ var _j = React.useState(), eventsToShow = _j[0], setEventsToShow = _j[1];
32
+ var _k = React.useState(), eventsOnTrack = _k[0], setEventsOnTrack = _k[1];
33
+ var _l = React.useState([0, 0, 0]), eventsPositions = _l[0], setEventsPositions = _l[1];
34
+ var _m = React.useState(0), eventsTranslate = _m[0], setEventsTranslate = _m[1];
35
+ var _o = React.useState(1), pivotEvent = _o[0], setPivotEvent = _o[1];
36
+ var trackWrapRef = React.useRef(null);
37
+ var trackRef = React.useRef(null);
38
+ var arrowLeftRef = React.useRef(null);
39
+ var tabWith = tabFlexWith ? "".concat(tabFlexWith, "%") : "".concat(DEFAULT_EVENT_POINT_WITH, "px");
40
+ var eventsData = props.eventsData, dateFormat = props.dateFormat, onActionClick = props.onActionClick;
41
+ React.useEffect(function () {
42
+ var _a;
43
+ var observerResize = canUseDOM && window.ResizeObserver && new window.ResizeObserver(repositionEvents);
44
+ var trackList = trackRef.current;
45
+ var cardWith = ((_a = trackWrapRef === null || trackWrapRef === void 0 ? void 0 : trackWrapRef.current) === null || _a === void 0 ? void 0 : _a.offsetWidth) || 0;
46
+ if (observerResize && trackList) {
47
+ observerResize.observe(trackList);
48
+ }
49
+ setYearsFlags();
50
+ repositionEvents();
51
+ setEventsPositions([cardWith, 0, -cardWith]);
52
+ return function () {
53
+ observerResize.disconnect();
54
+ };
55
+ }, []);
56
+ React.useEffect(function () {
57
+ var trackList = trackRef.current;
58
+ var currentTab = trackList && trackList.children[currentEvent];
59
+ if (currentTab) {
60
+ var tabWidth = currentTab.offsetWidth;
61
+ var leftArrow = !(translate >= 0);
62
+ setArrowLeft(leftArrow);
63
+ if (eventsOnTrack) {
64
+ var rightArrow = eventsOnTrack.length * tabWidth > (visibleTabs * tabWidth) * (((translate * -1) + 100) / 100);
65
+ setArrowRight(rightArrow);
66
+ }
67
+ if (((trackList === null || trackList === void 0 ? void 0 : trackList.offsetWidth) * -translate) / 100 >= trackList.children.length * tabWidth) {
68
+ // TODO: on resize window reposition
69
+ setYearsFlags();
70
+ repositionEvents();
71
+ setTranslate((((currentTab.offsetLeft - currentTab.offsetWidth) / (visibleTabs * currentTab.offsetWidth)) * 100) * -1);
72
+ }
73
+ positionCallout(currentTab);
74
+ }
75
+ }, [visibleTabs, tabFlexWith, currentEvent]);
76
+ var setYearsFlags = function () {
77
+ var trackData = addYearsFlags(eventsData);
78
+ setEventsOnTrack(trackData);
79
+ setEventsToShow([trackData[currentEvent - 1], trackData[currentEvent], trackData[currentEvent + 1]]);
80
+ };
81
+ var handlePrevClick = function () {
82
+ var _a;
83
+ var trackList = trackRef.current;
84
+ if (trackList && eventsOnTrack) {
85
+ var firstTabToUpdate = firstIndexInView - visibleTabs;
86
+ var lastIndexInView = firstIndexInView - 1;
87
+ var currentEventToUpdate = eventsOnTrack[lastIndexInView] && ((_a = eventsOnTrack[lastIndexInView]) === null || _a === void 0 ? void 0 : _a.yearFlag)
88
+ ? lastIndexInView - 1
89
+ : lastIndexInView;
90
+ var translateUpdate = translate + 100 > 0 ? 0 : translate + 100;
91
+ updatePage(false, currentEventToUpdate);
92
+ repositionEvents();
93
+ setFirstIndexInView(firstTabToUpdate);
94
+ setTranslate(translateUpdate);
95
+ setCurrentEvent(currentEventToUpdate);
96
+ }
97
+ };
98
+ var handleNextClick = function () {
99
+ var trackList = trackRef.current;
100
+ if (trackList && eventsOnTrack) {
101
+ var firstTabToUpdate = firstIndexInView + visibleTabs;
102
+ var currentEventToUpdate = eventsOnTrack[firstTabToUpdate] && eventsOnTrack[firstTabToUpdate].yearFlag
103
+ ? firstTabToUpdate + 1
104
+ : firstTabToUpdate;
105
+ var translateUpdate = translate - 100;
106
+ updatePage(true, currentEventToUpdate);
107
+ repositionEvents();
108
+ setFirstIndexInView(firstTabToUpdate);
109
+ setTranslate(translateUpdate);
110
+ setCurrentEvent(currentEventToUpdate);
111
+ }
112
+ };
113
+ var updatePage = function (forward, current) {
114
+ var _a;
115
+ if (eventsToShow && eventsOnTrack) {
116
+ var pageToUpdateIndex_1 = getPivotIndex(forward, pivotEvent);
117
+ var eventCardsArray_1 = Object.assign([], eventsToShow, (_a = {}, _a[pageToUpdateIndex_1] = eventsOnTrack[current], _a));
118
+ setEventsToShow(eventCardsArray_1);
119
+ setPivotEvent(pageToUpdateIndex_1);
120
+ setEventsTranslate(forward ? -100 : 100);
121
+ setTimeout(function () {
122
+ var _a, _b;
123
+ var _c;
124
+ var cardWith = (_c = trackWrapRef.current) === null || _c === void 0 ? void 0 : _c.offsetWidth;
125
+ var repositionArray = Object.assign([], eventsPositions, (_a = {},
126
+ _a[pageToUpdateIndex_1] = 0,
127
+ _a[getPivotIndex(true, pageToUpdateIndex_1)] = cardWith,
128
+ _a[getPivotIndex(false, pageToUpdateIndex_1)] = cardWith && -cardWith,
129
+ _a));
130
+ var clearEventsArray = Object.assign([], eventCardsArray_1, (_b = {},
131
+ _b[getPivotIndex(true, pageToUpdateIndex_1)] = {},
132
+ _b[getPivotIndex(false, pageToUpdateIndex_1)] = {},
133
+ _b));
134
+ setEventsToShow(clearEventsArray);
135
+ setEventsPositions(repositionArray);
136
+ setEventsTranslate(0);
137
+ }, props.transitionDuration || EVENT_CARD_TRANSITION_DURATION);
138
+ }
139
+ };
140
+ var getPivotIndex = function (forward, index) {
141
+ var pageIndex = forward ? index + 1 : index - 1;
142
+ if (eventsToShow) {
143
+ var validIndex = pageIndex < 0
144
+ ? eventsToShow.length - 1
145
+ : pageIndex % eventsToShow.length;
146
+ return validIndex;
147
+ }
148
+ return 0;
149
+ };
150
+ var positionCallout = function (element) {
151
+ var _a;
152
+ var offsetToSet = ((currentEvent - firstIndexInView) * element.offsetWidth) +
153
+ (element.offsetWidth / 2) +
154
+ (((_a = arrowLeftRef.current) === null || _a === void 0 ? void 0 : _a.offsetWidth) || 0);
155
+ setCalloutOffset(offsetToSet);
156
+ };
157
+ var onPointClick = function (index, event) {
158
+ event.preventDefault();
159
+ if (index > currentEvent) {
160
+ updatePage(true, index);
161
+ }
162
+ else if (index < currentEvent) {
163
+ updatePage(false, index);
164
+ }
165
+ setCurrentEvent(index);
166
+ };
167
+ var repositionEvents = React.useCallback(function () {
168
+ var trackList = trackRef.current;
169
+ var currentTab = trackList && trackList.children[currentEvent];
170
+ if (trackList instanceof HTMLElement && currentTab) {
171
+ var visibleTabsCount = Math.round(trackList.offsetWidth / DEFAULT_EVENT_POINT_WITH);
172
+ positionCallout(currentTab);
173
+ setTabFlexWith(100 / visibleTabsCount);
174
+ setVisibleTabs(visibleTabsCount);
175
+ }
176
+ }, []);
177
+ var eventCardAnimationStyle = function () { return ({
178
+ transitionDuration: "".concat(EVENT_CARD_TRANSITION_DURATION, "ms")
179
+ }); };
180
+ var eventCardReorderStyle = function (translation) { return ({
181
+ transform: "translateX(".concat(translation, "%)"), transformOrigin: 'left top'
182
+ }); };
183
+ return (React.createElement(React.Fragment, null,
184
+ React.createElement("div", { className: "k-timeline-track-wrap", ref: trackWrapRef },
185
+ React.createElement("a", { ref: arrowLeftRef, "aria-hidden": "true", onClick: function () { return arrowLeft && handlePrevClick(); }, className: classNames('k-timeline-arrow', 'k-timeline-arrow-left', 'k-button k-button-md k-rounded-md k-button-solid k-button-solid-base k-icon-button', { 'k-disabled': !arrowLeft }) },
186
+ React.createElement(SvgIcon, { icon: caretAltLeftIcon })),
187
+ React.createElement("a", { "aria-hidden": "true", onClick: function () { return arrowRight && handleNextClick(); }, className: classNames('k-timeline-arrow', 'k-timeline-arrow-right', 'k-button k-button-md k-rounded-md k-button-solid k-button-solid-base k-icon-button', { 'k-disabled': !arrowRight }) },
188
+ React.createElement(SvgIcon, { icon: caretAltRightIcon })),
189
+ React.createElement("div", { className: "k-timeline-track" },
190
+ React.createElement("ul", { ref: trackRef, className: "k-timeline-scrollable-wrap", role: "tablist", tabIndex: 0, style: { transform: "translateX(".concat(translate, "%)") } }, eventsOnTrack && eventsOnTrack.map(function (event, index) { return (event.yearFlag
191
+ ? (React.createElement("li", { role: "none", className: "k-timeline-track-item k-timeline-flag-wrap", style: { flex: "1 0 ".concat(tabWith) }, key: index },
192
+ React.createElement("span", { className: "k-timeline-flag" }, event.yearFlag)))
193
+ : (React.createElement("li", { role: "tab", className: classNames('k-timeline-track-item', { 'k-focus': index === currentEvent }), "aria-selected": index === currentEvent, style: { flex: "1 0 ".concat(tabWith) }, key: index },
194
+ React.createElement("div", { className: "k-timeline-date-wrap" },
195
+ React.createElement("span", { className: "k-timeline-date" }, intl.formatDate(event.date, dateFormat))),
196
+ React.createElement("span", { onClick: function (e) { return onPointClick(index, e); }, className: "k-timeline-circle" })))); })))),
197
+ React.createElement("div", { className: "k-timeline-events-list" },
198
+ React.createElement("ul", { className: "k-timeline-scrollable-wrap", style: eventsTranslate === 0
199
+ ? __assign({}, eventCardReorderStyle(eventsTranslate)) : __assign(__assign({}, eventCardReorderStyle(eventsTranslate)), eventCardAnimationStyle()) }, eventsToShow && eventsToShow.map(function (eventData, index) {
200
+ return (React.createElement("li", { key: index, className: "k-timeline-event", style: { transform: "translate3d(".concat(eventsPositions[index], "px, 0px, 0px)") } }, eventData && React.createElement(TimelineCard, { tabindex: eventsPositions[index] === 0 ? 0 : -1, eventData: eventData, onActionClick: onActionClick, horizontal: true, collapsible: false, calloutStyle: { left: "".concat(calloutOffset, "px") } })));
201
+ })))));
202
+ };
203
+ TimelineHorizontal.propTypes = {
204
+ onActionClick: PropTypes.func
205
+ };
@@ -0,0 +1,12 @@
1
+ import * as React from 'react';
2
+ import { EventDataProps } from './TimelineCard';
3
+ import { TimelineDirectionsProps } from './Timeline';
4
+ /**
5
+ * @hidden
6
+ */
7
+ export interface TimelineVerticalProps extends TimelineDirectionsProps {
8
+ alterMode?: boolean;
9
+ collapsibleEvents?: boolean;
10
+ onChange?: (event: EventDataProps) => void;
11
+ }
12
+ export declare const TimelineVertical: React.FunctionComponent<TimelineVerticalProps>;
@@ -0,0 +1,28 @@
1
+ import * as React from 'react';
2
+ import * as PropTypes from 'prop-types';
3
+ import { TimelineCard } from './TimelineCard';
4
+ import { addYearsFlags } from './utils';
5
+ import { classNames, guid } from '@progress/kendo-react-common';
6
+ import { useInternationalization } from '@progress/kendo-react-intl';
7
+ export var TimelineVertical = function (props) {
8
+ var intl = useInternationalization();
9
+ var _a = React.useState(), eventsList = _a[0], setEventsList = _a[1];
10
+ var collapsibleEvents = props.collapsibleEvents, transitionDuration = props.transitionDuration, eventsData = props.eventsData, dateFormat = props.dateFormat, alterMode = props.alterMode, onChange = props.onChange, onActionClick = props.onActionClick;
11
+ React.useEffect(function () {
12
+ setEventsList(addYearsFlags(eventsData));
13
+ }, []);
14
+ return (React.createElement("ul", null, eventsList && eventsList.map(function (event, index) {
15
+ var cardId = guid();
16
+ return (React.createElement(React.Fragment, { key: index }, event.yearFlag
17
+ ? (React.createElement("li", { className: "k-timeline-flag-wrap" },
18
+ React.createElement("span", { className: "k-timeline-flag" }, event.yearFlag)))
19
+ : (React.createElement("li", { className: classNames('k-timeline-event', { 'k-reverse': index % 2 !== 0 }) },
20
+ React.createElement("div", { className: "k-timeline-date-wrap" },
21
+ React.createElement("span", { className: "k-timeline-date", id: cardId }, intl.formatDate(event.date, dateFormat))),
22
+ React.createElement("a", { className: "k-timeline-circle" }),
23
+ React.createElement(TimelineCard, { id: cardId, tabindex: 0, eventData: event, alternated: alterMode && index % 2 !== 0, collapsible: collapsibleEvents, transitionDuration: transitionDuration, onChange: onChange, onActionClick: onActionClick })))));
24
+ })));
25
+ };
26
+ TimelineVertical.propTypes = {
27
+ onActionClick: PropTypes.func
28
+ };
@@ -3,3 +3,13 @@ import { TimelineEventProps } from './Timeline';
3
3
  * Sort the events list based on event date.
4
4
  */
5
5
  export declare const sortEventList: (eventList: TimelineEventProps[]) => TimelineEventProps[];
6
+ /**
7
+ * @hidden
8
+ */
9
+ export interface yearFlagProps {
10
+ yearFlag?: number;
11
+ }
12
+ /**
13
+ * @hidden
14
+ */
15
+ export declare const addYearsFlags: (eventsData: TimelineEventProps[]) => (TimelineEventProps | yearFlagProps)[];
@@ -7,3 +7,20 @@ export var sortEventList = function (eventList) {
7
7
  });
8
8
  return sortedEvents;
9
9
  };
10
+ /**
11
+ * @hidden
12
+ */
13
+ export var addYearsFlags = function (eventsData) {
14
+ var yearFlag;
15
+ var trackData = eventsData.reduce(function (arr, eventData) {
16
+ if (yearFlag !== eventData.date.getFullYear()) {
17
+ yearFlag = eventData.date.getFullYear();
18
+ arr.push({ yearFlag: yearFlag }, eventData);
19
+ }
20
+ else {
21
+ arr.push(eventData);
22
+ }
23
+ return arr;
24
+ }, []);
25
+ return trackData;
26
+ };
@@ -8,7 +8,7 @@ exports.packageMetadata = {
8
8
  name: '@progress/kendo-react-layout',
9
9
  productName: 'KendoReact',
10
10
  productCodes: ['KENDOUIREACT', 'KENDOUICOMPLETE'],
11
- publishDate: 1688649586,
11
+ publishDate: 1689260358,
12
12
  version: '',
13
13
  licensingDocsUrl: 'https://www.telerik.com/kendo-react-ui/my-license/?utm_medium=product&utm_source=kendoreact&utm_campaign=kendo-ui-react-purchase-license-keys-warning'
14
14
  };
@@ -1,6 +1,10 @@
1
1
  import * as React from 'react';
2
2
  import { EventDataProps } from './TimelineCard';
3
3
  export interface TimelineEventProps {
4
+ /**
5
+ * Specifies if the event card is default collapsed.
6
+ */
7
+ opened?: boolean;
4
8
  /**
5
9
  * Specifies the text that is rendered as body of the event card.
6
10
  */
@@ -31,6 +35,10 @@ export interface TimelineEventProps {
31
35
  text: string;
32
36
  url: string;
33
37
  }[];
38
+ /**
39
+ * @Hidden
40
+ */
41
+ yearFlag?: number;
34
42
  }
35
43
  export interface TimelineProps {
36
44
  events: TimelineEventProps[];
@@ -54,6 +62,13 @@ export interface TimelineProps {
54
62
  * Render events alternatingly on both sides of the axis.
55
63
  */
56
64
  alterMode?: boolean;
65
+ /**
66
+ * Specifies the time for sliding to next event in horizontal mode and time for collapsing the event in vertical mode.
67
+ * The default value are:
68
+ * - `300ms` for horizontal
69
+ * - `400ms` for vertical
70
+ */
71
+ transitionDuration?: number;
57
72
  /**
58
73
  * An event that is called when event card is toggled.
59
74
  */
@@ -63,4 +78,13 @@ export interface TimelineProps {
63
78
  */
64
79
  onActionClick?: (event: EventDataProps) => void;
65
80
  }
81
+ /**
82
+ * @hidden
83
+ */
84
+ export interface TimelineDirectionsProps {
85
+ eventsData: TimelineEventProps[];
86
+ dateFormat?: string;
87
+ transitionDuration?: number;
88
+ onActionClick?: (event: EventDataProps) => void;
89
+ }
66
90
  export declare const Timeline: React.FunctionComponent<TimelineProps>;
@@ -3,38 +3,29 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Timeline = void 0;
4
4
  var React = require("react");
5
5
  var PropTypes = require("prop-types");
6
- var TimelineCard_1 = require("./TimelineCard");
7
6
  var kendo_react_common_1 = require("@progress/kendo-react-common");
8
- var kendo_react_intl_1 = require("@progress/kendo-react-intl");
7
+ var TimelineHorizontal_1 = require("./TimelineHorizontal");
8
+ var TimelineVertical_1 = require("./TimelineVertical");
9
9
  var Timeline = function (props) {
10
- var collapsibleEvents = props.collapsibleEvents, className = props.className, alterMode = props.alterMode, horizontal = props.horizontal, events = props.events, dateFormat = props.dateFormat, onChange = props.onChange, onActionClick = props.onActionClick;
11
- var intl = (0, kendo_react_intl_1.useInternationalization)();
12
- var yearPoint = undefined;
13
- var setYearPoint = function (year) {
14
- yearPoint = year;
15
- return (React.createElement("li", { className: "k-timeline-flag-wrap" },
16
- React.createElement("span", { className: "k-timeline-flag" }, year)));
17
- };
18
- var timelineVertical = function () { return (React.createElement("ul", null, events.map(function (eventData, index) {
19
- return (React.createElement(React.Fragment, { key: index },
20
- yearPoint !== eventData.date.getFullYear() && setYearPoint(eventData.date.getFullYear()),
21
- React.createElement("li", { className: (0, kendo_react_common_1.classNames)('k-timeline-event', { 'k-reverse': index % 2 === 0 }) },
22
- React.createElement("div", { className: "k-timeline-date-wrap" },
23
- React.createElement("span", { className: "k-timeline-date" }, intl.formatDate(eventData.date, dateFormat))),
24
- React.createElement("a", { className: "k-timeline-circle" }),
25
- React.createElement(TimelineCard_1.TimelineCard, { eventData: eventData, alternated: alterMode && index % 2 === 0, collapsible: collapsibleEvents, onChange: onChange, onActionClick: onActionClick }))));
26
- }))); };
27
- return (React.createElement("div", { className: (0, kendo_react_common_1.classNames)('k-timeline', 'k-timeline-collapsible', {
10
+ var collapsibleEvents = props.collapsibleEvents, transitionDuration = props.transitionDuration, className = props.className, alterMode = props.alterMode, horizontal = props.horizontal, events = props.events, dateFormat = props.dateFormat, onChange = props.onChange, onActionClick = props.onActionClick;
11
+ var _a = React.useState(), trackAxisWidth = _a[0], setTrackAxisWidth = _a[1];
12
+ var trackWrapRef = React.useRef(null);
13
+ React.useEffect(function () {
14
+ var _a;
15
+ setTrackAxisWidth((_a = trackWrapRef.current) === null || _a === void 0 ? void 0 : _a.offsetWidth);
16
+ }, []);
17
+ return (React.createElement("div", { ref: trackWrapRef, className: (0, kendo_react_common_1.classNames)('k-timeline', {
28
18
  'k-timeline-collapsible': collapsibleEvents,
29
19
  'k-timeline-vertical': !horizontal,
30
20
  'k-timeline-alternating': alterMode,
31
21
  'k-timeline-horizontal': horizontal
32
- }, className) }, timelineVertical()));
22
+ }, className), style: { width: "".concat(trackAxisWidth, "px") } }, horizontal ? React.createElement(TimelineHorizontal_1.TimelineHorizontal, { eventsData: events, dateFormat: dateFormat, transitionDuration: transitionDuration, onActionClick: onActionClick })
23
+ : React.createElement(TimelineVertical_1.TimelineVertical, { eventsData: events, dateFormat: dateFormat, alterMode: alterMode, collapsibleEvents: collapsibleEvents, transitionDuration: transitionDuration, onChange: onChange, onActionClick: onActionClick })));
33
24
  };
34
25
  exports.Timeline = Timeline;
35
26
  exports.Timeline.defaultProps = {
36
27
  alterMode: false,
37
- collapsibleEvents: false,
28
+ collapsibleEvents: true,
38
29
  dateFormat: 'MMM dd, yyyy'
39
30
  };
40
31
  exports.Timeline.propTypes = {
@@ -4,9 +4,14 @@ import { TimelineEventProps } from './Timeline';
4
4
  * @hidden
5
5
  */
6
6
  interface TimelineCardProps {
7
+ tabindex?: number;
8
+ id?: string;
7
9
  eventData: TimelineEventProps;
8
10
  alternated?: boolean;
11
+ horizontal?: boolean;
9
12
  collapsible?: boolean;
13
+ calloutStyle?: React.CSSProperties;
14
+ transitionDuration?: number;
10
15
  onChange?: (event: EventDataProps) => void;
11
16
  onActionClick?: (event: EventDataProps) => void;
12
17
  }