Calendar

A date picker calendar component for selecting dates, date ranges, or multiple dates.

Import

import { Calendar } from '@akitectio/aki-ui'

Single Date

August 2025
Su
Mo
Tu
We
Th
Fr
Sa

Selected: Mon Aug 11 2025

const [date, setDate] = useState<Date | undefined>(new Date());

<Calendar
  mode="single"
  selected={date}
  onSelect={(newDate) => setDate(newDate as Date | undefined)}
  className="rounded-lg border shadow"
/>
{date && (
  <p className="mt-4 text-sm text-gray-600">
    Selected: {date.toDateString()}
  </p>
)}

Multiple Dates

August 2025
Su
Mo
Tu
We
Th
Fr
Sa
const [dates, setDates] = useState<Date[]>([]);

<Calendar
  mode="multiple"
  selected={dates}
  onSelect={(newDates) => setDates(newDates as Date[])}
  className="rounded-lg border shadow"
/>
{dates.length > 0 && (
  <div className="mt-4 text-sm text-gray-600">
    <p>Selected dates ({dates.length}):</p>
    <ul className="list-disc list-inside max-h-32 overflow-y-auto">
      {dates.map(date => (
        <li key={date.toISOString()}>{date.toDateString()}</li>
      ))}
    </ul>
  </div>
)}

Date Range

August 2025
Su
Mo
Tu
We
Th
Fr
Sa
const [range, setRange] = useState<{ from: Date; to?: Date } | undefined>();

<Calendar
  mode="range"
  selected={range}
  onSelect={(newRange) => setRange(newRange as { from: Date; to?: Date } | undefined)}
  className="rounded-lg border shadow"
/>
{range && (
  <div className="mt-4 text-sm text-gray-600">
    <p>Selected range:</p>
    <p>From: {range.from.toDateString()}</p>
    {range.to && <p>To: {range.to.toDateString()}</p>}
  </div>
)}

With Disabled Dates

August 2025
Su
Mo
Tu
We
Th
Fr
Sa

Weekends and past dates are disabled

Selected: Mon Aug 11 2025

<Calendar
  mode="single"
  selected={date}
  onSelect={(newDate) => setDate(newDate as Date | undefined)}
  disabled={(date) => {
    const day = date.getDay();
    const today = new Date();
    today.setHours(0, 0, 0, 0);
    return day === 0 || day === 6 || date < today; // Disable weekends and past dates
  }}
  className="rounded-lg border shadow"
/>