# DatePicker

Simple React datepicker component for working with `gregorian`, `persian`, `arabic` and `indian` calendars
with the ability to select the date in `single`, `multiple` and `range` modes.

<div align="center">
  <img src="https://github.com/shahabyazdi/react-multi-date-picker/blob/master/screenshot/screenshot.jpg?raw=true" alt="date picker"/>
</div>

# Layouts

You can change the appearance of the datepicker to `prime` or `mobile` by importing css files from the styles folder.

<div align="center">
  <img src="https://github.com/shahabyazdi/react-multi-date-picker/blob/master/screenshot/layouts.jpg?raw=true"  alt="date picker layouts"/>
</div>

# Plugins

Ability to further customize the calendar and datepicker by adding one or more plugins.

<div align="center">
  <img src="https://github.com/shahabyazdi/react-multi-date-picker/blob/master/screenshot/plugins.jpg?raw=true" alt="date picker plugins all in one"/>
</div>

## Installation

```code
npm install --save react-multi-date-picker
```

## Demo

- **[DatePicker & Calendar](https://shahabyazdi.github.io/react-multi-date-picker/)**
  - [Multiple Date Picker](https://shahabyazdi.github.io/react-multi-date-picker/multiple/)
  - [Range Picker](https://shahabyazdi.github.io/react-multi-date-picker/range/)
  - [Time Picker & Other Pickers](https://shahabyazdi.github.io/react-multi-date-picker/other-pickers/)
  - [FullYear Picker](https://shahabyazdi.github.io/react-multi-date-picker/other-examples/#full-year-view)
  - [Locales](https://shahabyazdi.github.io/react-multi-date-picker/locales/)
- **[Plugins](https://shahabyazdi.github.io/react-multi-date-picker/plugins)**

  - [Date Panel](https://shahabyazdi.github.io/react-multi-date-picker/plugins/panel/)
  - [Multiple Time Picker](https://shahabyazdi.github.io/react-multi-date-picker/plugins/time-picker/)
  - [Analog Time Picker](https://shahabyazdi.github.io/react-multi-date-picker/plugins/analog-time-picker/)
  - [Toolbar](https://shahabyazdi.github.io/react-multi-date-picker/plugins/toolbar/)
  - [Range Picker Footer](https://shahabyazdi.github.io/react-multi-date-picker/plugins/range-picker-footer/)

- **[آموزش نصب و راه اندازی دیت پیکر به فارسی](https://shahabyazdi.github.io/react-multi-date-picker/fa)**

## Usage

```javascript
import React, { useState } from "react";
import DatePicker from "react-multi-date-picker";

export default function Example() {
  const [value, setValue] = useState(new Date());

  return <DatePicker value={value} onChange={setValue} />;
}
```

## Browser (non react-app)

```html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>React Multi Date Picker</title>
  </head>
  <body>
    <span>Calendar Example :</span>
    <div id="calendar"></div>

    <span>DatePicker Example :</span>
    <div id="datePicker"></div>

    <span>Plugins Example :</span>
    <div id="datePickerWithPlugin"></div>

    <!-- Ract -->
    <script src="https://unpkg.com/react@17/umd/react.production.min.js"></script>
    <script src="https://unpkg.com/react-dom@17/umd/react-dom.production.min.js"></script>

    <!-- DatePicker and dependencies-->
    <script src="https://cdn.jsdelivr.net/npm/date-object@latest/dist/umd/date-object.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/react-element-popper@latest/build/browser.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/react-multi-date-picker@latest/build/browser.min.js"></script>

    <!-- Optional Plugin -->
    <script src="https://cdn.jsdelivr.net/npm/react-multi-date-picker@latest/build/date_picker_header.browser.js"></script>

    <script>
      const { DatePicker, Calendar } = ReactMultiDatePicker;

      ReactDOM.render(
        React.createElement(Calendar),
        document.getElementById("calendar")
      );

      ReactDOM.render(
        React.createElement(DatePicker),
        document.getElementById("datePicker")
      );

      ReactDOM.render(
        React.createElement(DatePicker, {
          plugins: [React.createElement(DatePickerHeader)],
        }),
        document.getElementById("datePickerWithPlugin")
      );
    </script>
  </body>
</html>
```

## Available props

<table>
      <thead>
        <tr>
          <th>Name</th>
          <th style="text-align:center">Type</th>
          <th style="text-align:center">Default</th>
          <th>Availability (DatePicker/ Calendar)</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>value</td>
          <td style="text-align:center">
            Date,
            <a href="https://github.com/shahabyazdi/react-date-object">
              DateObject
            </a>
            , String, Number or Array
          </td>
          <td style="text-align:center">new Date()</td>
          <td>both</td>
        </tr>
        <tr>
          <td>ref</td>
          <td style="text-align:center">React.RefObject</td>
          <td style="text-align:center"></td>
          <td>both</td>
        </tr>
        <tr>
          <td>multiple</td>
          <td style="text-align:center">Boolean</td>
          <td style="text-align:center">false (true if value is Array)</td>
          <td>both</td>
        </tr>
        <tr>
          <td>range</td>
          <td style="text-align:center">Boolean</td>
          <td style="text-align:center">false</td>
          <td>both</td>
        </tr>
        <tr>
          <td>onlyMonthPicker</td>
          <td style="text-align:center">Boolean</td>
          <td style="text-align:center">false</td>
          <td>both</td>
        </tr>
        <tr>
          <td>onlyYearPicker</td>
          <td style="text-align:center">Boolean</td>
          <td style="text-align:center">false</td>
          <td>both</td>
        </tr>
        <tr>
          <td>format</td>
          <td style="text-align:center">String</td>
          <td style="text-align:center">YYYY/MM/DD</td>
          <td>both</td>
        </tr>
        <tr>
          <td>formattingIgnoreList</td>
          <td style="text-align:center">Array</td>
          <td style="text-align:center"></td>
          <td>both</td>
        </tr>
        <tr>
          <td>calendar</td>
          <td style="text-align:center">Object</td>
          <td style="text-align:center">gregorian</td>
          <td>both</td>
        </tr>
        <tr>
          <td>locale</td>
          <td style="text-align:center">Object</td>
          <td style="text-align:center">gregorian_en</td>
          <td>both</td>
        </tr>
        <tr>
          <td>mapDays</td>
          <td style="text-align:center">Function</td>
          <td style="text-align:center"></td>
          <td>both</td>
        </tr>
        <tr>
          <td>onChange</td>
          <td style="text-align:center">Function</td>
          <td style="text-align:center"></td>
          <td>both</td>
        </tr>
        <tr>
          <td>onOpen</td>
          <td style="text-align:center">Function</td>
          <td style="text-align:center"></td>
          <td>DatePicker</td>
        </tr>
        <tr>
          <td>onClose</td>
          <td style="text-align:center">Function</td>
          <td style="text-align:center"></td>
          <td>DatePicker</td>
        </tr>
        <tr>
          <td>onPropsChange</td>
          <td style="text-align:center">Function</td>
          <td style="text-align:center"></td>
          <td>both</td>
        </tr>
        <tr>
          <td>onMonthChange</td>
          <td style="text-align:center">Function</td>
          <td style="text-align:center"></td>
          <td>both</td>
        </tr>
        <tr>
          <td>onYearChange</td>
          <td style="text-align:center">Function</td>
          <td style="text-align:center"></td>
          <td>both</td>
        </tr>
        <tr>
          <td>onFocusedDateChange</td>
          <td style="text-align:center">Function</td>
          <td style="text-align:center"></td>
          <td>both</td>
        </tr>
        <tr>
          <td>onPositionChange</td>
          <td style="text-align:center">Function</td>
          <td style="text-align:center"></td>
          <td>DatePicker</td>
        </tr>
        <tr>
          <td>digits</td>
          <td style="text-align:center">Array</td>
          <td style="text-align:center"></td>
          <td>both</td>
        </tr>
        <tr>
          <td>weekDays</td>
          <td style="text-align:center">Array</td>
          <td style="text-align:center"></td>
          <td>both</td>
        </tr>
        <tr>
          <td>months</td>
          <td style="text-align:center">Array</td>
          <td style="text-align:center"></td>
          <td>both</td>
        </tr>
        <tr>
          <td>showOtherDays</td>
          <td style="text-align:center">Boolean</td>
          <td style="text-align:center">false</td>
          <td>both</td>
        </tr>
        <tr>
          <td>minDate</td>
          <td style="text-align:center">Date, DateObject, String or Number</td>
          <td style="text-align:center"></td>
          <td>both</td>
        </tr>
        <tr>
          <td>maxDate</td>
          <td style="text-align:center">Date, DateObject, String or Number</td>
          <td style="text-align:center"></td>
          <td>both</td>
        </tr>
        <tr>
          <td>disableYearPicker</td>
          <td style="text-align:center">Boolean</td>
          <td style="text-align:center">false</td>
          <td>both</td>
        </tr>
        <tr>
          <td>disableMonthPicker</td>
          <td style="text-align:center">Boolean</td>
          <td style="text-align:center">false</td>
          <td>both</td>
        </tr>
        <tr>
          <td>disableDayPicker</td>
          <td style="text-align:center">Boolean</td>
          <td style="text-align:center">false</td>
          <td>both</td>
        </tr>
        <tr>
          <td>zIndex</td>
          <td style="text-align:center">Number</td>
          <td style="text-align:center">100</td>
          <td>both</td>
        </tr>
        <tr>
          <td>plugins</td>
          <td style="text-align:center">Array</td>
          <td style="text-align:center">[]</td>
          <td>both</td>
        </tr>
        <tr>
          <td>sort</td>
          <td style="text-align:center">Boolean</td>
          <td style="text-align:center">false</td>
          <td>both</td>
        </tr>
        <tr>
          <td>numberOfMonths</td>
          <td style="text-align:center">Number</td>
          <td style="text-align:center">1</td>
          <td>both</td>
        </tr>
        <tr>
          <td>currentDate</td>
          <td style="text-align:center">DateObject</td>
          <td style="text-align:center"></td>
          <td>both</td>
        </tr>
        <tr>
          <td>buttons</td>
          <td style="text-align:center">Boolean</td>
          <td style="text-align:center">true</td>
          <td>both</td>
        </tr>
        <tr>
          <td>renderButton</td>
          <td style="text-align:center">React.ReactElement or Function</td>
          <td style="text-align:center"></td>
          <td>both</td>
        </tr>
        <tr>
          <td>weekStartDayIndex</td>
          <td style="text-align:center">Number</td>
          <td style="text-align:center"></td>
          <td>both</td>
        </tr>
        <tr>
          <td>className</td>
          <td style="text-align:center">String</td>
          <td style="text-align:center"></td>
          <td>both</td>
        </tr>
        <tr>
          <td>readOnly</td>
          <td style="text-align:center">Boolean</td>
          <td style="text-align:center">false</td>
          <td>both</td>
        </tr>
        <tr>
          <td>disabled</td>
          <td style="text-align:center">Boolean</td>
          <td style="text-align:center">false</td>
          <td>both</td>
        </tr>
        <tr>
          <td>hideMonth</td>
          <td style="text-align:center">Boolean</td>
          <td style="text-align:center">false</td>
          <td>both</td>
        </tr>
        <tr>
          <td>hideYear</td>
          <td style="text-align:center">Boolean</td>
          <td style="text-align:center">false</td>
          <td>both</td>
        </tr>
         <tr>
          <td>hideWeekDays</td>
          <td style="text-align:center">Boolean</td>
          <td style="text-align:center">false</td>
          <td>both</td>
        </tr>
        <tr>
          <td>shadow</td>
          <td style="text-align:center">Boolean</td>
          <td style="text-align:center">true</td>
          <td>both</td>
        </tr>
        <tr>
          <td>fullYear</td>
          <td style="text-align:center">Boolean</td>
          <td style="text-align:center">false</td>
          <td>both</td>
        </tr>
        <tr>
          <td>displayWeekNumbers</td>
          <td style="text-align:center">Boolean</td>
          <td style="text-align:center">false</td>
          <td>both</td>
        </tr>
        <tr>
          <td>weekNumber</td>
          <td style="text-align:center">String</td>
          <td style="text-align:center"></td>
          <td>both</td>
        </tr>
        <tr>
          <td>weekPicker</td>
          <td style="text-align:center">Boolean</td>
          <td style="text-align:center">false</td>
          <td>both</td>
        </tr>
         <tr>
          <td>rangeHover</td>
          <td style="text-align:center">Boolean</td>
          <td style="text-align:center">false</td>
          <td>both</td>
        </tr>
        <tr>
          <td>containerClassName</td>
          <td style="text-align:center">String</td>
          <td style="text-align:center"></td>
          <td>DatePicker</td>
        </tr>
        <tr>
          <td>arrowClassName</td>
          <td style="text-align:center">String</td>
          <td style="text-align:center">0</td>
          <td>DatePicker</td>
        </tr>
        <tr>
          <td>style</td>
          <td style="text-align:center">React.CSSProperties</td>
          <td style="text-align:center">{}</td>
          <td>DatePicker</td>
        </tr>
        <tr>
          <td>containerStyle</td>
          <td style="text-align:center">React.CSSProperties</td>
          <td style="text-align:center"></td>
          <td>DatePicker</td>
        </tr>
        <tr>
          <td>arrowStyle</td>
          <td style="text-align:center">React.CSSProperties</td>
          <td style="text-align:center">0</td>
          <td>DatePicker</td>
        </tr>
        <tr>
          <td>arrow</td>
          <td style="text-align:center">Boolean or React.ReactElement</td>
          <td style="text-align:center">true</td>
          <td>DatePicker</td>
        </tr>
        <tr>
          <td>animations</td>
          <td style="text-align:center">Array</td>
          <td style="text-align:center">false</td>
          <td>DatePicker</td>
        </tr>
        <tr>
          <td>inputClass</td>
          <td style="text-align:center">String</td>
          <td style="text-align:center"></td>
          <td>DatePicker</td>
        </tr>
        <tr>
          <td>name</td>
          <td style="text-align:center">String</td>
          <td style="text-align:center"></td>
          <td>DatePicker</td>
        </tr>
        <tr>
          <td>id</td>
          <td style="text-align:center">String</td>
          <td style="text-align:center"></td>
          <td>DatePicker</td>
        </tr>
        <tr>
          <td>title</td>
          <td style="text-align:center">String</td>
          <td style="text-align:center"></td>
          <td>DatePicker</td>
        </tr>
        <tr>
          <td>required</td>
          <td style="text-align:center">Boolean</td>
          <td style="text-align:center"></td>
          <td>DatePicker</td>
        </tr>
        <tr>
          <td>placeholder</td>
          <td style="text-align:center">String</td>
          <td style="text-align:center"></td>
          <td>DatePicker</td>
        </tr>
        <tr>
          <td>render</td>
          <td style="text-align:center">React.ReactElement or Function</td>
          <td style="text-align:center"></td>
          <td>DatePicker</td>
        </tr>
        <tr>
          <td>inputMode</td>
          <td style="text-align:center">String</td>
          <td style="text-align:center"></td>
          <td>DatePicker</td>
        </tr>
        <tr>
          <td>scrollSensitive</td>
          <td style="text-align:center">Boolean</td>
          <td style="text-align:center">true</td>
          <td>DatePicker</td>
        </tr>
        <tr>
          <td>hideOnScroll</td>
          <td style="text-align:center">Boolean</td>
          <td style="text-align:center">false</td>
          <td>DatePicker</td>
        </tr>
        <tr>
          <td>calendarPosition</td>
          <td style="text-align:center">String</td>
          <td style="text-align:center">&quot;bottom-left&quot;</td>
          <td>DatePicker</td>
        </tr>
        <tr>
          <td>editable</td>
          <td style="text-align:center">Boolean</td>
          <td style="text-align:center">true</td>
          <td>DatePicker</td>
        </tr>
        <tr>
          <td>onlyShowInRangeDates</td>
          <td style="text-align:center">Boolean</td>
          <td style="text-align:center">true</td>
          <td>DatePicker</td>
        </tr>
        <tr>
          <td>fixMainPosition</td>
          <td style="text-align:center">Boolean</td>
          <td style="text-align:center">false</td>
          <td>DatePicker</td>
        </tr>
        <tr>
          <td>fixRelativePosition</td>
          <td style="text-align:center">Boolean</td>
          <td style="text-align:center">false</td>
          <td>DatePicker</td>
        </tr>
        <tr>
          <td>offsetY</td>
          <td style="text-align:center">Number</td>
          <td style="text-align:center">0</td>
          <td>DatePicker</td>
        </tr>
        <tr>
          <td>offsetX</td>
          <td style="text-align:center">Number</td>
          <td style="text-align:center">0</td>
          <td>DatePicker</td>
        </tr>
        <tr>
          <td>mobileLabels</td>
          <td style="text-align:center">Object</td>
          <td style="text-align:center"></td>
          <td>DatePicker</td>
        </tr>
        <tr>
          <td>portal</td>
          <td style="text-align:center">Boolean</td>
          <td style="text-align:center"></td>
          <td>DatePicker</td>
        </tr>
        <tr>
          <td>portalTarget</td>
          <td style="text-align:center">HTMLElement</td>
          <td style="text-align:center"></td>
          <td>DatePicker</td>
        </tr>
        <tr>
          <td>onOpenPickNewDate</td>
          <td style="text-align:center">Boolean</td>
          <td style="text-align:center">true</td>
          <td>DatePicker</td>
        </tr>
        <tr>
          <td>mobileButtons</td>
          <td style="text-align:center"> HTMLButtonElement[]</td>
          <td style="text-align:center">[]</td>
          <td>DatePicker</td>
        </tr>
      </tbody>
    </table>

# Calendars & Locales

Click [here](https://shahabyazdi.github.io/react-multi-date-picker/calendars) to see the descriptions.

<table>
  <tbody>
    <tr>
      <th colspan="2" rowspan="2">Calendars</th>
      <th>Gregorian</th>
      <th>Persian (Solar Hijri)</th>
      <th>Jalali</th>
      <th>Arabic (Lunar Hijri)</th>
      <th>Indian</th>
    </tr>
    <tr>
      <td>/calendars/gregorian</td>
      <td>/calendars/persian</td>
      <td>/calendars/jalali</td>
      <td>/calendars/arabic</td>
      <td>/calendars/indian</td>
    </tr>
    <tr>
      <th rowspan="4">Locales</th>
      <th>English</th>
      <td>/locales/gregorian_en</td>
      <td>/locales/persian_en</td>
      <td>/locales/persian_en</td>
      <td>/locales/arabic_en</td>
      <td>/locales/indian_en</td>
    </tr>
    <tr>
      <th>Farsi</th>
      <td>/locales/gregorian_fa</td>
      <td>/locales/persian_fa</td>
      <td>/locales/persian_fa</td>
      <td>/locales/arabic_fa</td>
      <td>/locales/indian_fa</td>
    </tr>
    <tr>
      <th>Arabic</th>
      <td>/locales/gregorian_ar</td>
      <td>/locales/persian_ar</td>
      <td>/locales/persian_ar</td>
      <td>/locales/arabic_ar</td>
      <td>/locales/indian_ar</td>
    </tr>
    <tr>
      <th>Hindi</th>
      <td>/locales/gregorian_hi</td>
      <td>/locales/persian_hi</td>
      <td>/locales/persian_hi</td>
      <td>/locales/arabic_hi</td>
      <td>/locales/indian_hi</td>
    </tr>
  </tbody>
</table>

<br/>

Of course, you can customize the names of the months and days of the week
in both the calendar & input by using the `months` and `weekDays` Props.

Also, you can create a custom Calendar and Locale:

- [Creating a custom Calendar](https://shahabyazdi.github.io/react-multi-date-picker/calendars/#custom-calendar)
- [Creating a custom Locale](https://shahabyazdi.github.io/react-multi-date-picker/locales/#custom-locale)
