📆 A Streamlit component to show callendar using FullCalendar (https://fullcalendar.io)
Project description
streamlit-calendar 📆
A Streamlit component to show calendar view using FullCalendar with support for Streamlit light/dark theme, callbacks, and custom CSS
🌏Demo 
⚙️Installation
pip install streamlit-calendar
💻Usage
import streamlit as st
from streamlit_calendar import calendar
calendar_options = {
"editable": True,
"selectable": True,
"headerToolbar": {
"left": "today prev,next",
"center": "title",
"right": "resourceTimelineDay,resourceTimelineWeek,resourceTimelineMonth",
},
"slotMinTime": "06:00:00",
"slotMaxTime": "18:00:00",
"initialView": "resourceTimelineDay",
"resourceGroupField": "building",
"resources": [
{"id": "a", "building": "Building A", "title": "Building A"},
{"id": "b", "building": "Building A", "title": "Building B"},
{"id": "c", "building": "Building B", "title": "Building C"},
{"id": "d", "building": "Building B", "title": "Building D"},
{"id": "e", "building": "Building C", "title": "Building E"},
{"id": "f", "building": "Building C", "title": "Building F"},
],
}
calendar_events = [
{
"title": "Event 1",
"start": "2023-07-31T08:30:00",
"end": "2023-07-31T10:30:00",
"resourceId": "a",
},
{
"title": "Event 2",
"start": "2023-07-31T07:30:00",
"end": "2023-07-31T10:30:00",
"resourceId": "b",
},
{
"title": "Event 3",
"start": "2023-07-31T10:40:00",
"end": "2023-07-31T12:30:00",
"resourceId": "a",
}
]
custom_css="""
.fc-event-past {
opacity: 0.8;
}
.fc-event-time {
font-style: italic;
}
.fc-event-title {
font-weight: 700;
}
.fc-toolbar-title {
font-size: 2rem;
}
"""
calendar = calendar(
events=calendar_events,
options=calendar_options,
custom_css=custom_css,
key='calendar', # Assign a widget key to prevent state loss
)
st.write(calendar)
📝API References
Initialization Args
For complete events object properties, check out: https://fullcalendar.io/docs/event-object
For complete options object properties, check out: https://fullcalendar.io/docs
For complete custom_css options, check out: https://fullcalendar.io/docs/css-customization
For information about key, check out: Streamlit Widget Behavior
[!IMPORTANT] If using
st.session_state["events"]asevents(see demo), provide a string value forkeyto prevent unintended calendar refreshes because of state loss.
Component Values
The component value, i.e. the return value of the calendar(...) instance, is a dict which properties depends on the current called callback.
For example, when the user clicked on an event, the component value would be:
st.write(calendar)
# {
# "callback": "eventClick",
# "eventClick": {
# "event": {
# "allDay": true,
# "title": "Event 1",
# "start": "2023-07-03",
# "end": "2023-07-05",
# "backgroundColor": "#FF6C6C",
# "borderColor": "#FF6C6C"
# },
# "view": {
# "type": "dayGridMonth",
# "title": "July 2023",
# "activeStart": "2023-06-24T17:00:00.000Z",
# "activeEnd": "2023-08-05T17:00:00.000Z",
# "currentStart": "2023-06-30T17:00:00.000Z",
# "currentEnd": "2023-07-31T17:00:00.000Z"
# }
# },
# }
The properties of each callback are explained as follows:
eventMouseEnter
Triggered when the mouse enters an event element.
| Property | Type | Description |
|---|---|---|
| event | Event |
The associated event. |
| view | View |
The current view. |
Source: https://fullcalendar.io/docs/eventMouseEnter
dateClick
Triggered when the user clicks on a date or a time.
Source: https://fullcalendar.io/docs/dateClick
| Property | Type | Description |
|---|---|---|
| allDay | boolean |
true or false whether the click happened on an all-day cell. |
| date | string |
a date for the clicked day/time in ISO8601 string format. |
| view | View |
The current view. |
| resource | Resource |
If the current view is a resource-view, the resource that owns this date. |
eventClick
Triggered when the user clicks an event.
Source: https://fullcalendar.io/docs/eventClick
| Property | Type | Description |
|---|---|---|
| event | Event |
The associated event. |
| view | View |
The current view. |
eventChange
Called after an event has been modified in some way.
Source: https://fullcalendar.io/docs/eventChange
| Property | Type | Description |
|---|---|---|
| oldEvent | Event |
An event with data prior to the change. |
| event | Event |
An Event Object with the updated changed data. |
| relatedEvents | Event[] |
An array of other related events that were also affected. An event might have other recurring event instances or might be linked to other events with the same groupId. |
eventsSet
Called after event data is initialized OR changed in any way.
Source: https://fullcalendar.io/docs/eventsSet
| Property | Type | Description |
|---|---|---|
| events | Event[] |
An array of events. It contains every event in memory. |
| view | View |
The current view. |
select
Triggered when a date/time selection is made.
Source: https://fullcalendar.io/docs/select-callback
| Property | Type | Description |
|---|---|---|
| allDay | boolean |
true or false whether the selection happened on all-day cells. |
| start | string |
a date indicating the beginning of the selection in ISO8601 string format. |
| end. | string |
a date indicating the end of the selection in ISO8601 string format. |
| view | View |
The current view. |
| resource | Resource |
If the current view is a resource-view, the resource that owns this selection. |
Types
Event
Source: https://fullcalendar.io/docs/event-object
| Property | Type | Description |
|---|---|---|
| id | string |
A unique identifier of an event. |
| groupId | string |
Events that share a groupId will be dragged and resized together automatically. |
| allDay | boolean |
Determines if the event is shown in the “all-day” section of relevant views. In addition, if true the time text is not displayed with the event. |
| start | string |
An ISO8601 string representation of the start date. If the event is all-day, there will not be a time part. |
| end | string |
An ISO8601 string representation of the end date. If the event is all-day, there will not be a time part. |
| title | string |
The text that will appear on an event. |
| url | string |
A URL that will be visited when this event is clicked by the user. |
| classNames | string[] |
An array of strings like [ 'myclass1', myclass2' ]. Determines which HTML classNames will be attached to the rendered event. |
| display | string |
The rendering type of this event. Can be 'auto', 'block', 'list-item', 'background', 'inverse-background', or 'none'. |
| backgroundColor | string |
The eventBackgroundColor override for this specific event. |
| borderColor | string |
The eventBorderColor override for this specific event. |
| textColor | string |
The eventTextColor override for this specific event. |
| extendedProps | Dictionary |
A plain object holding miscellaneous other properties specified during parsing. Receives properties in the explicitly given extendedProps hash as well as other non-standard properties. |
| resourceId | string |
The unique string identifier for the resource of the event (if any). |
Resource
Source: https://fullcalendar.io/docs/resource-object
| Property | Type | Description |
|---|---|---|
| id | string |
The unique string identifier for this resource. |
| title | string |
The title of this resource. |
| eventBackgroundColor | string |
Same as Event.backgroundColor. |
| eventBorderColor | string |
Same as Event.borderColor. |
| eventTextColor | string |
Same as Event.textColor. |
| eventClassNames | string[] |
Same as Event.ClassNames. |
| extendedProps | Dictionary |
A hash of non-standard props that were specified during parsing |
View
Source: https://fullcalendar.io/docs/view-object
| Property | Type | Description |
|---|---|---|
| type | string | Name of one of the available views. |
| title | string | Title text that is displayed at the top of the headerToolbar. |
| activeStart | string | An ISO8601 string that is the first visible day. |
| activeEnd | string | An ISO8601 string that is the last visible day. |
| currentStart | string | An ISO8601 string that is the start of the interval the view is trying to represent. |
| currentEnd | string | An ISO8601 string that is the end of the interval the view is trying to represent. |
🛠️Development
Note: you only need to run these steps if you want to change this component or contribute to its development!
Setup
First, clone the repository:
git clone https://github.com/im-perativa/streamlit-calendar.git
cd streamlit-calendar
Install the Python dependencies:
poetry install
And install the frontend dependencies:
cd streamlit_calendar/frontend
npm install
Making changes
To make changes, first go to streamlit_calendar/__init__.py and make sure the
variable _RELEASE is set to False. This will make the component use the local
version of the frontend code, and not the built project.
Then, start one terminal and run:
cd streamlit_calendar/frontend
npm start
This starts the frontend code on port 3001.
Open another terminal and run:
cd streamlit_calendar
poetry shell
streamlit run __init__.py
This runs the development version on local Streamlit server. Now you can make changes to the Python or Javascript
code in streamlit_calendar and the demo app should update automatically!
If nothing updates, make sure the variable _RELEASE in streamlit_calendar/__init__.py is set to False.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file streamlit_calendar_fork-1.3.2rc0.tar.gz.
File metadata
- Download URL: streamlit_calendar_fork-1.3.2rc0.tar.gz
- Upload date:
- Size: 333.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.7.21
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0ff5cb16b84d61a14f6180288065ff11bb52c016172d21b07ae6ff6fbd5fd838
|
|
| MD5 |
7a6ea25b904a58f77590d7e8c7ae7e76
|
|
| BLAKE2b-256 |
993a4fd43598d9bc1a9a2b52a20f4a1497578020e3277a7b72a160f570d068ee
|
File details
Details for the file streamlit_calendar_fork-1.3.2rc0-py3-none-any.whl.
File metadata
- Download URL: streamlit_calendar_fork-1.3.2rc0-py3-none-any.whl
- Upload date:
- Size: 336.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.7.21
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ee1a2e087cd94bca1340a0f337815c3e3384b4b8bdbf646c32d9a9892a9a3405
|
|
| MD5 |
afbd2a3aaa68584ff43ae5b269cf35d9
|
|
| BLAKE2b-256 |
0ce47a77ac5d823f365a04a82bb78ca2d3bc46e01599ec5c1ed2a1393aab5100
|