Skip to content

Calendar Picker

The Calendar Picker component provides an interactive date selection interface. It allows users to browse through months and years to select dates, date ranges, or specific time periods.

Installation

The Calendar Picker component is part of the Casoon UI Library.

bash
# Installation of the entire library
npm install @casoon/ui-lib

Import

css
/* Import all UI components */
@import '@casoon/ui-lib/ui.css';

/* Or just the Calendar Picker component */
@import '@casoon/ui-lib/ui/components/calendar-picker.css';

Basic Usage

html
<div class="calendar-picker">
  <div class="calendar-picker__header">
    <button class="calendar-picker__nav-btn prev-month">
      <svg width="16" height="16" viewBox="0 0 24 24">
        <path d="M15 18l-6-6 6-6" fill="none" stroke="currentColor" stroke-width="2" />
      </svg>
    </button>
    <div class="calendar-picker__title">March 2023</div>
    <button class="calendar-picker__nav-btn next-month">
      <svg width="16" height="16" viewBox="0 0 24 24">
        <path d="M9 18l6-6-6-6" fill="none" stroke="currentColor" stroke-width="2" />
      </svg>
    </button>
  </div>
  <div class="calendar-picker__weekdays">
    <span>Su</span>
    <span>Mo</span>
    <span>Tu</span>
    <span>We</span>
    <span>Th</span>
    <span>Fr</span>
    <span>Sa</span>
  </div>
  <div class="calendar-picker__days">
    <!-- Previous month days -->
    <button class="calendar-picker__day prev-month">26</button>
    <!-- Current month days -->
    <button class="calendar-picker__day">1</button>
    <button class="calendar-picker__day">2</button>
    <button class="calendar-picker__day selected">3</button>
    <button class="calendar-picker__day today">4</button>
    <!-- More days... -->
  </div>
</div>
March 2023
SuMoTuWeThFrSa

Variants

Date Range Selection

html
<div class="calendar-picker range-selection">
  <!-- Calendar structure -->
  <!-- Days with range classes -->
  <button class="calendar-picker__day range-start">10</button>
  <button class="calendar-picker__day in-range">11</button>
  <button class="calendar-picker__day range-end">12</button>
</div>

With Time Picker

html
<div class="calendar-picker with-time">
  <!-- Calendar structure -->
  <div class="calendar-picker__time">
    <div class="time-picker">
      <input type="number" min="0" max="23" value="14" class="time-picker__hours">
      <span>:</span>
      <input type="number" min="0" max="59" value="30" class="time-picker__minutes">
    </div>
  </div>
</div>

Multiple Months

html
<div class="calendar-picker-container">
  <div class="calendar-picker">
    <!-- First month -->
  </div>
  <div class="calendar-picker">
    <!-- Second month -->
  </div>
</div>

Usage Examples

Date Input with Calendar Picker

html
<div class="form-group">
  <label for="date-input">Select Date</label>
  <div class="input-with-calendar">
    <input type="text" id="date-input" placeholder="MM/DD/YYYY" class="input">
    <button class="calendar-toggle">
      <svg width="16" height="16" viewBox="0 0 24 24">
        <rect x="3" y="4" width="18" height="18" rx="2" ry="2" fill="none" stroke="currentColor" stroke-width="2" />
        <line x1="16" y1="2" x2="16" y2="6" stroke="currentColor" stroke-width="2" />
        <line x1="8" y1="2" x2="8" y2="6" stroke="currentColor" stroke-width="2" />
        <line x1="3" y1="10" x2="21" y2="10" stroke="currentColor" stroke-width="2" />
      </svg>
    </button>
    <div class="calendar-picker-dropdown">
      <!-- Calendar picker structure -->
    </div>
  </div>
</div>

Booking Interface

html
<div class="booking-interface">
  <div class="date-range-selector">
    <div class="input-group">
      <div class="input-with-label">
        <label>Check-in</label>
        <input type="text" value="03/15/2023" class="input">
      </div>
      <div class="input-with-label">
        <label>Check-out</label>
        <input type="text" value="03/20/2023" class="input">
      </div>
    </div>
    <div class="calendar-picker-container">
      <!-- Calendar picker structure with range selection -->
    </div>
  </div>
</div>

Customization

The Calendar Picker can be customized using CSS variables:

css
:root {
  --calendar-width: 280px;
  --calendar-border: 1px solid var(--color-neutral-200);
  --calendar-border-radius: var(--radius-m);
  --calendar-bg: var(--color-white);
  --calendar-shadow: var(--shadow-m);
  --calendar-padding: 1rem;
  
  --calendar-header-color: var(--color-neutral-900);
  --calendar-weekday-color: var(--color-neutral-500);
  
  --calendar-day-size: 36px;
  --calendar-day-color: var(--color-neutral-900);
  --calendar-day-hover-bg: var(--color-neutral-100);
  
  --calendar-selected-bg: var(--color-primary-500);
  --calendar-selected-color: var(--color-white);
  
  --calendar-today-border-color: var(--color-primary-500);
  --calendar-today-color: var(--color-primary-500);
  
  --calendar-range-bg: var(--color-primary-100);
  --calendar-disabled-color: var(--color-neutral-400);
}

Accessibility

  • Use semantic HTML with proper button elements for interactive calendar days
  • Implement keyboard navigation to allow users to move through dates using arrow keys
  • Include appropriate ARIA attributes for screen readers
  • Ensure date format follows localization patterns
  • Provide clear visual indication of selected dates and the current date

Browser Compatibility

The Calendar Picker component is compatible with all modern browsers.

FeatureChromeFirefoxSafariEdge
Basic functionality
Grid layout57+52+10.1+16+
CSS custom properties49+31+9.1+15+