<a href="https://5f985eb478dcb00022cfd60e-hqwgomhkqw.chromatic.com/?path=/story/example-vertical--vertical-basic" target="_blank"><img src="https://raw.githubusercontent.com/storybooks/brand/master/badge/badge-storybook.svg"></a>
// install with yarn yarn add react-chrono // or with npm npm install react-chrono
Please make sure you wrap the component in a container that has a width and height.
When no mode is specified, the component defaults to HORIZONTAL mode. Please check props for all the available options.
import React from "react" import { Chrono } from "react-chrono"; const Home = () => { const items = [{ title: "May 1940", cardTitle: "Dunkirk", url: "http://www.history.com", cardSubtitle:"Men of the British Expeditionary Force (BEF) wade out to..", cardDetailedText: "Men of the British Expeditionary Force (BEF) wade out to..", media: { type: "IMAGE", source: { url: "http://someurl/image.jpg" } } }, ...]; return ( <div style={{ width: "500px", height: "400px" }}> <Chrono items={items} /> </div> ) }

To render the timeline vertically use the VERTICAL mode
<div style={{ width: '500px', height: '950px' }}> <Chrono items={items} mode="VERTICAL" /> </div>

In VERTICAL_ALTERNATING mode the timeline is rendered vertically with cards alternating between left and right side.
<div style={{ width: '500px', height: '950px' }}> <Chrono items={items} mode="VERTICAL_ALTERNATING" /> </div>

Below are the available configuration options for the component:
| Name | Default | Description |
|---|---|---|
| activeItemIndex | 0 | Selects the active timeline item when loading. |
| allowDynamicUpdate | false | Enables or disables dynamic updates of timeline items. |
| borderLessCards | false | Removes borders and shadows from the timeline cards. |
| buttonTexts | Customizes the alternative text for all buttons. | |
| cardHeight | 200 | Defines the minimum height of timeline cards. |
| cardLess | false | Disables timeline cards in both horizontal and vertical layouts. |
| cardPositionHorizontal | Positions the card in horizontal mode. Options: TOP or BOTTOM. | |
| cardWidth | Sets the maximum width of timeline cards. | |
| classNames | Applies custom class names to different card elements. | |
| contentDetailsHeight | 150 | Controls the height of the details section if using cardDetailedText. Refer to TimelineItem model for more info. |
| disableAutoScrollOnClick | false | Prevents auto-scrolling when a timeline card is clicked. |
| disableClickOnCircle | false | Disables the click action on circular points. |
| disableInteraction | false | Disables all the interactions with the Timeline. |
| disableNavOnKey | false | Turns off keyboard navigation. |
| disableTimelinePoint | false | Disables the timeline point in both HORIZONTAL and VERTICAL mode. |
| enableBreakPoint | true | Automatically switches to vertical mode when the vertical breakpoint is reached. |
| enableDarkToggle | false | Adds a toggle switch for dark mode. |
| enableLayoutSwitch | true | Switches the timeline layout |
| enableQuickJump | true | Allows to quickly jump to a timeline item |
| flipLayout | false | Reverses the layout (Right to Left). |
| focusActiveItemOnLoad | false | Automatically scrolls to and focuses on the activeItemIndex when loading. |
| fontSizes | Allows customization of font sizes. | |
| highlightCardsOnHover | false | Highlights the card on hover |
| items | [] | A collection of Timeline Item Models. |
| itemWidth | 300 | Sets the width of the timeline section in horizontal mode. |
| lineWidth | 3px | Adjusts the width of the timeline track line. |
| mediaHeight | 200 | Sets the minimum height for media elements like images or videos in the card. |
| mediaSettings | Configures settings specific to media layout. Refer to mediaSettings for more info. | |
| mode | VERTICAL_ALTERNATING | Sets the component mode. Options: HORIZONTAL, VERTICAL, VERTICAL_ALTERNATING. |
| nestedCardHeight | 150 | Defines the height of nested timeline cards. |
| noUniqueId | false | Prevents generating a unique id for the table wrapper. |
| onItemSelected | Invokes a callback on item selection, passing relevant data. | |
| onScrollEnd | Detects the end of the timeline via onScrollEnd. | |
| onThemeChange | Invokes a callback when the theme changes, triggered via enableDarkToggle. | |
| parseDetailsAsHTML | false | Parses the cardDetailedText as HTML. |
| responsiveBreakPoint | 1024 | Break point at which the timeline changes to VERTICAL mode when VERTICAL_ALTERNATING is the default mode |
| scrollable | true | Makes the timeline scrollable in VERTICAL and VERTICAL_ALTERNATING modes. |
| showAllCardsHorizontal | false | Displays all cards in horizontal mode. By default, only the active card is shown. |
| slideItemDuration | 5000 | Sets the duration (in milliseconds) that a timeline card is active during a slideshow. |
| slideShow | false | Enables slideshow control. |
| textDensity | HIGH | Configures the amount of text to be displayed in each timeline card. Can be either HIGH or LOW |
| textOverlay | false | Displays text as an overlay on media elements. Refer to Text Overlay for more info. |
| theme | Customizes colors. Refer to Theme for more info. | |
| timelinePointDimension | Defines the dimensions of circular points on the timeline. | |
| timelinePointShape | circle | Configures the shape of timeline points. Options: circle, square, diamond. |
| titleDateFormat | 'MMM DD, YYYY' | Formats the date for each timeline item. Supports all dayjs formats. |
| toolbarPosition | TOP | Configures the position of the toolbar. Can be TOP or BOTTOM |
| uniqueId | Used with noUniqueId to set a custom unique id for the wrapper. | |
| useReadMore | true | Enables or disables the "read more" button. Available if text content on the card is taller than the card itself. |
| disableToolbar | false | Hides the toolbar / control panel |
react-chrono supports three modes HORIZONTAL, VERTICAL and VERTICAL_ALTERNATING. No additional setting is required.
<Chrono items={items} mode="HORIZONTAL" />
<Chrono items={items} mode="VERTICAL" />
<Chrono items={items} mode="VERTICAL_ALTERNATING" />
| name | description | type |
|---|---|---|
cardDetailedText | detailed text displayed in the timeline card | String or String[] |
cardSubtitle | text displayed in the timeline card | String |
cardTitle | title that is displayed on the timeline card | String |
date | date to be used in the title. when used, this will override the title property | Date |
media | media object to set image or video | Object |
timelineContent | render custom content instead of text.This prop has higher precedence over cardDetailedText | ReactNode |
title | title of the timeline item | String |
url | url to be used in the title | String |
{ title: "May 1940", cardTitle: "Dunkirk", cardSubtitle: "Men of the British Expeditionary Force (BEF) wade out to a destroyer during the evacuation from Dunkirk.", cardDetailedText: ["paragraph1", "paragraph2"], timelineContent: <div>Custom content</div>, }
if you have a large text to display(via cardDetailedText) and want to split the text into paragraphs, you can pass an array of strings.
each array entry will be created as a paragraph inside the timeline card.
The timeline can be navigated via keyboard.
HORIZONTAL mode use your <kbd>LEFT</kbd> <kbd>RIGHT</kbd> arrow keys for navigation.VERTICAL or VERTICAL_ALTERNATING mode, the timeline can be navigated via the <kbd>UP</kbd> <kbd>DOWN</kbd> arrow keys.To disable keyboard navigation set disableNavOnKey to true.
<Chrono items={items} disableNavOnKey />
With the scrollable prop, you can enable scrolling on both VERTICAL and VERTICAL_ALTERNATING modes.
<Chrono items={items} scrollable />
The scrollbar is not shown by default. To enable the scrollbar, pass an object with prop scrollbar to scrollable prop.
<Chrono items={items} scrollable={{ scrollbar: true }} />
Both images and videos can be embedded in the timeline.
Just add the media attribute to the Timeline Item model and the component will take care of the rest.
<h5> To embed a video </h5>{ title: "May 1940", cardTitle: "Dunkirk", media: { name: "dunkirk beach", source: { url: "http://someurl/image.jpg" }, type: "IMAGE" } }
Videos start playing automatically when active and will be automatically paused when not active.
Like images, videos are also automatically hidden when not in the visible viewport of the container.
{ title: "7 December 1941", cardTitle: "Pearl Harbor", media: { source: { url: "/pearl-harbor.mp4", type: "mp4" }, type: "VIDEO", name: "Pearl Harbor" } }
To embed YouTube videos, use the right embed url.
{ title: "7 December 1941", cardTitle: "Pearl Harbor", media: { source: { url:


企业专属的AI法律顾问
iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。


稳定高效的流量提升解决方案,助力品牌曝光
稳定高效的流量提升解决方案,助力品牌曝光


最新版Sora2模型免费使用,一键生成无水印视频
最新版Sora2模型免费使用,一键生成无水印视频


实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。


选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。


AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。


最强AI数据分析助手
小浣熊家族Raccoon,您的AI智能助手,致力于通过先进的人工智能技术,为用户提供高效、便捷的智能服务。无论是日常咨询还是专业问题解答,小浣熊都能以快速、准确的响应满足您的需求,让您的生活更加智能便捷。


像人一样思考的AI智能体
imini 是一款超级AI智能体,能根据人类指令,自主思考、自主完成、并且交付结果的AI智能体。


AI数字人视频创作平台
Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。


一站式AI创作平台
提供 AI 驱动的图片、视频生成及数字人等功能,助力创意创作
最新AI工具、AI资讯
独家AI资源、AI项目落地

微信扫一扫关注公众号