Live <kal-calendar> below — loaded via script tag. See the integration guide for Solid.js project setup.
Day / Time view hides event details and colours each day by its availability bucket — open, conditional or blocked. The sample data includes multi-day spans, so a single event covers a range of days.
Navigation advances one month at a time. Turn on Selectable Range to pick a range that spans both.
Time view only. Sets the grid granularity and the length a booking with no end time occupies.
Time view only. Split shift is 09:00-12:00,13:00-17:00 — closed for lunch. Closed hours stay visible so an existing booking outside them is not hidden.
Sets --kalendly-primary-color and friends on the element, so it scopes to this calendar. Selected day, today outline and the ‹ › arrows all follow. The theme property does the same but writes to :root, colouring every calendar on the page.
Excluded days are not click targets at all — no hover, no event. Combines with Opening Hours.
Requires availability mode. Click a free day to start, click again to extend, third click resets. A range can cross a month boundary and stays marked in both months.
Simulates per-month server fetch. Navigate months to see the skeleton loading state.
# Install the package npm install kalendly # Import styles in your root component or index.css import 'kalendly/styles';
// Calendar.tsx import 'kalendly'; interface Props { events?: CalendarEvent[]; title?: string; onDateSelect?: (e: CustomEvent) => void; onMonthChange?: (e: CustomEvent) => void; } export function Calendar(props: Props) { return ( <kal-calendar title={props.title} prop:events={props.events ?? []} on:cal-date-select={props.onDateSelect} on:cal-month-change={props.onMonthChange} /> ); }
// App.tsx import { createSignal } from 'solid-js'; import { Calendar } from './Calendar'; import type { CalendarEvent } from 'kalendly/core'; export function App() { const [events, setEvents] = createSignal<CalendarEvent[]>([ { id: 1, name: 'Team Standup', date: new Date() }, ]); function onDateSelect(e: CustomEvent) { console.log('Selected:', e.detail.date, e.detail.events); } return ( <Calendar events={events()} title="My Calendar" onDateSelect={onDateSelect} /> ); }
// src/types/solid-ce.d.ts // Extend Solid's JSX namespace for kal-calendar import type { CalendarEvent } from 'kalendly/core'; declare module 'solid-js' { namespace JSX { interface IntrinsicElements { 'kal-calendar': { title?: string; 'initial-date'?: string; 'week-starts-on'?: '0' | '1'; 'prop:events'?: CalendarEvent[]; 'on:cal-date-select'?: (e: CustomEvent) => void; 'on:cal-month-change'?: (e: CustomEvent) => void; }; } } }