Add Event on Hover
Usage
theme="ios" You can turn auto theming on and let it decide based on the platform.
Usage
themeVariant="light" You can turn auto dark mode on based on system settings.
Usage
clickToCreate={true}
// click to create is on dragToCreate={true}
// drag to create is on dragToMove={true}
// reordering is on dragToResize={true}
// resizing is on eventDelete={true}
// deleting is on Fine-tune drag & drop with these options, which are false by default.
Usage
locale={localeEn} Selecting the locale loads the localized settings and the translated UI text.
Add Event on Hover
Hover-based interactions can be simple yet elegant. Using the onCellHoverIn and onCellHoverOut events, the calendar dynamically displays an "Add event" button when users hover over day cells, providing an intuitive way to create new events with minimal interface clutter.
For customizing the cell content appearance, the renderCalendarDayContent is the perfect candidate, as it holds the basic structure of the day cell.
Demo

Code
View code on GitHub
import { Eventcalendar, formatDate, setOptions, Toast } from '@mobiscroll/react';
import { useCallback, useMemo, useState } from 'react';
setOptions({
locale: ,
theme: ' ',
themeVariant: ' '
});
function App() {
const [hoveredDate, setHoveredDate] = useState(null);
const [isToastOpen, setToastOpen] = useState(false);
const [toastMessage, setToastMessage] = useState('');
const [myEvents, setEvents] = useState(
() => [
{
start: '2026-10-02T12:00',
end: '2026-10-02T16:00',
title: 'Company Strategy Offsite',
color: '#90bcff',
},
{
start: '2026-10-07T09:00',
end: '2026-10-07T17:00',
title: 'R&D Innovation Workshop',
color: '#ffdfaf',
},
{
start: '2026-10-15T10:00',
end: '2026-10-15T15:00',
title: 'Client Feedback Review',
color: '#ffb9ad',
},
{
start: '2026-10-19T09:00',
end: '2026-10-19T19:00',
title: 'Team Building Adventure',
color: '#f3c1ff',
},
{
start: '2026-10-23T11:00',
end: '2026-10-23T15:00',
title: 'Sales Summit & Training',
color: '#b5eff8',
},
{
start: '2026-10-25T10:00',
end: '2026-10-25T15:00',
title: 'Executive Planning Retreat',
color: '#c7ffbb',
},
{
start: '2026-10-29T14:00',
end: '2026-10-29T17:00',
title: 'Marketing Team Conference',
color: '#ffeeb6',
},
],
[],
);
const myView = useMemo(
() => ({
calendar: {
labels: 2,
},
}),
[],
);
const addEvent = useCallback(() => {
const newEvent = {
start: hoveredDate,
title: 'New Event',
};
setEvents((myEvents) => [...myEvents, newEvent]);
setToastMessage('Event added on ' + formatDate('YYYY-MM-DD', hoveredDate));
setToastOpen(true);
}, [hoveredDate]);
const customDayContent = useCallback(
(args) => {
const isHovered = hoveredDate && hoveredDate.getTime() === args.date.getTime();
return (
isHovered && (
<button onClick={addEvent} className="mds-cell-summary-btn">
Add event
</button>
)
);
},
[hoveredDate, addEvent],
);
const handleCellHoverIn = useCallback((args) => {
setHoveredDate(args.date);
}, []);
const handleCellHoverOut = useCallback(() => {
setHoveredDate(null);
}, []);
const handleToastClose = useCallback(() => {
setToastOpen(false);
}, []);
return (
<>
<Eventcalendar
data={myEvents}
view={myView}
className="mds-cell-summary"
renderCalendarDayContent={customDayContent}
onCellHoverIn={handleCellHoverIn}
onCellHoverOut={handleCellHoverOut}
/>
<Toast isOpen={isToastOpen} message={toastMessage} onClose={handleToastClose} />
</>
);
}
export default App;
import {
Eventcalendar,
formatDate,
MbscCalendarDayData,
MbscCalendarEvent,
MbscCellHoverEvent,
setOptions,
Toast ,
} from '@mobiscroll/react';
import { FC, useCallback, useMemo, useState } from 'react';
setOptions({
locale: ,
theme: ' ',
themeVariant: ' '
});
const App: FC = () => {
const [hoveredDate, setHoveredDate] = useState<Date | null>(null);
const [isToastOpen, setToastOpen] = useState<boolean>(false);
const [toastMessage, setToastMessage] = useState<string>('');
const [myEvents, setEvents] = useState<MbscCalendarEvent[]>(() => [
{
start: '2026-10-02T12:00',
end: '2026-10-02T16:00',
title: 'Company Strategy Offsite',
color: '#90bcff',
},
{
start: '2026-10-07T09:00',
end: '2026-10-07T17:00',
title: 'R&D Innovation Workshop',
color: '#ffdfaf',
},
{
start: '2026-10-15T10:00',
end: '2026-10-15T15:00',
title: 'Client Feedback Review',
color: '#ffb9ad',
},
{
start: '2026-10-19T09:00',
end: '2026-10-19T19:00',
title: 'Team Building Adventure',
color: '#f3c1ff',
},
{
start: '2026-10-23T11:00',
end: '2026-10-23T15:00',
title: 'Sales Summit & Training',
color: '#b5eff8',
},
{
start: '2026-10-25T10:00',
end: '2026-10-25T15:00',
title: 'Executive Planning Retreat',
color: '#c7ffbb',
},
{
start: '2026-10-29T14:00',
end: '2026-10-29T17:00',
title: 'Marketing Team Conference',
color: '#ffeeb6',
},
]);
const myView = useMemo(
() => ({
calendar: {
labels: 2,
},
}),
[],
);
const addEvent = useCallback(() => {
const newEvent: MbscCalendarEvent = {
start: hoveredDate!,
title: 'New Event',
};
setEvents((myEvents) => [...myEvents, newEvent]);
setToastMessage('Event added on ' + formatDate('YYYY-MM-DD', hoveredDate!));
setToastOpen(true);
}, [hoveredDate]);
const customDayContent = useCallback(
(args: MbscCalendarDayData) => {
const isHovered = hoveredDate && hoveredDate.getTime() === args.date.getTime();
return (
isHovered && (
<button onClick={addEvent} className="mds-cell-summary-btn">
Add event
</button>
)
);
},
[hoveredDate, addEvent],
);
const handleCellHoverIn = useCallback((args: MbscCellHoverEvent) => {
setHoveredDate(args.date);
}, []);
const handleCellHoverOut = useCallback(() => {
setHoveredDate(null);
}, []);
const handleToastClose = useCallback(() => {
setToastOpen(false);
}, []);
return (
<>
<Eventcalendar
data={myEvents}
view={myView}
className="mds-cell-summary"
renderCalendarDayContent={customDayContent}
onCellHoverIn={handleCellHoverIn}
onCellHoverOut={handleCellHoverOut}
/>
<Toast isOpen={isToastOpen} message={toastMessage} onClose={handleToastClose} />
</>
);
};
export default App;
.mds-cell-summary .mbsc-calendar-cell {
min-height: 145px;
}
.mds-cell-summary-btn {
position: absolute;
left: 10px;
right: 10px;
bottom: 8px;
z-index: 3;
font-size: 10px;
padding: 8px;
background: transparent;
border-radius: 4px;
border: 1px solid #5584b5;
color: #5584b5;
text-transform: uppercase;
cursor: pointer;
transition: background-color 0.1s ease-out;
}
.mds-cell-summary-btn:hover {
background: #5584b5;
color: white;
box-shadow: 0 2px 8px rgba(85, 132, 181, 0.3);
}
.mds-cell-summary-btn:active {
box-shadow: 0 1px 4px rgba(85, 132, 181, 0.3);
}