npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

react-native-calendars-datepicker

v1.1.4

Published

Customizable date picker for React Native that supports Hijri calendar

Readme

Note:

This fork to enhance react-native-ui-datepicker to support Hijri calendar with the help of @calidy/dayjs-calendarsystems calendar systems package which extends Day.js library to allow the use of different non-gregorian calendar systems with many thanks for their great effort.

Intro

DateTimePicker component for React Native that allows you to create a customizable datetime picker. The component uses extensive set of props that allows you to customizing the calendar based on your own UI design. Please visit demo.

Features

  • 📅 Supports different selection modes: single, range, and multiple days.
  • 🌿 Unstyled by default, every component is minimally styled and fully customizable.
  • 🛠️ Extensive set of props for fine-tuned calendar customization.
  • 🎨 Fully compatible with NativeWind.
  • 🌎 Easily localizable into any language.
  • 🕗 Handles different time zones seamlessly.
  • ⚙️ Customizable components allow extending rendered elements.
  • ⚡ Fast & lightweight, only re-renders the elements that actually change.

Installation

To use this fork of the library

npm install react-native-calendars-datepicker

Or

yarn add react-native-calendars-datepicker

Basic Usage

  1. Import the component and default styles or classNames from react-native-calendars-datepicker.
  2. Use the calendar prop to change between islamic and gregory which is the default in case no calendar passed.
  3. Choose a selection mode using the mode prop. The available modes are: single, range, and multiple.
  4. Use the onChange prop to handle date changes.
import { useState } from  'react';
import DateTimePicker, { DateType, useDefaultStyles } from 'react-native-calendars-datepicker';

export function Calendar() {
  const defaultStyles = useDefaultStyles();
  const [selected, setSelected] = useState<DateType>();

  return (
    <DateTimePicker
      calendar="islamic"
      mode="single"
      date={selected}
      onChange={({ date }) =>  setSelected(date)}
      styles={defaultStyles}
    />
  );
}

Calendar Base Props

| Name | Type | Description | | ------------------ | --------------------------------- | -------------------------------------------------- | | mode | "single" | "range" | "multiple" | Defines the DatePicker mode. | | calendar | "gregory" | "jalali"| "islamic" | Defines the calendar type of DatePicker. | | minDate | DateType | Defines the minimum selectable date in the DatePicker. | | maxDate | DateType | Defines the maximum selectable date in the DatePicker. | | enabledDates | DateType[] | (date: DateType) => boolean | Defines an array of enabled dates or a function that returns true for enabled dates. It takes precedence over disabledDates. | | disabledDates | DateType[] | (date: DateType) => boolean | Defines an array of disabled dates or a function that returns true for disabled dates. | | firstDayOfWeek | number | Defines the first day of the week: 0-6 (0 = Sunday, 6 = Saturday). | | initialView | "day" | "month" | "year" | "time" | Defines the initial view of the DatePicker | | month | number | Defines the currently selected month. | | year | number | Defines the currently selected year. | | onMonthChange | (month: number) => void | Callback function triggered when the current month changes. | | onYearChange | (year: number) => void | Callback function triggered when the current year changes. |

Example

export function Calendar() {
  let today = new Date();
  const [selected, setSelected] = useState<DateType>();

  return (
    <DateTimePicker
      mode="single"
      calendar="islamic" // default is gregory
      date={selected}
      onChange={({ date }) =>  setSelected(date)}
      minDate={today} // Set the minimum selectable date to today
      enabledDates={(date) => dayjs(date).day() === 1} // Enable only Mondays (takes precedence over disabledDates)
      disabledDates={(date) => [0, 6].includes(dayjs(date).day())} // Disable weekends
    />
  );
}

Single Mode props

| Name | Type | Description | | ----------------------------------------- | ------------------ | ---------------------------------------------------------------- | | date | DateType | Specifies the currently selected date. | | onChange | ({date}) => void | Callback function triggered when the date change. | | timePicker | boolean | Whether to enable the time picker. | | timePickerOptions.renderBesideSelectors | boolean | whether to render the picker beside month & year selectors or justified withen row. | | use12Hours | boolean | Whether to use a 12-hour format (AM/PM) in the time picker. |

Range Mode props

| Name | Type | Description | | ----------- | -------------------------------- | -----------------------------------------------------------| | startDate | DateType | Defines the start date for a range selection. | | endDate | DateType | Defines the end date for a range selection. | | onChange | ({startDate, endDate}) => void | Callback function triggered when the start and end change. | | min | number | Defines the minimum allowed nights. | | max | number | Defines the maximum allowed nights. |

Multiple Mode props

| Name | Type | Description | | ----------------- | ------------------- | ----------------------------------------------------------- | | dates | DateType[] | Defines the selected dates for multiple date selection. | | onChange | ({dates}) => void | Callback function triggered when the dates change. | | max | number | Defines the maximum allowed days to select. | | multiRangeMode | boolean | Whether to display selecting multiple dates in a range row. |

react-native-ui-datepicker-styles

Customization

| Name | Type | Description | | -------------------- | ----------------------------------- | --------------------------------------------------------- | | showOutsideDays | boolean | Whether to show the days of the previous and next months. | | navigationPosition | "around" | "right" | "left" | Defines the position of the navigation. | | containerHeight | number | Defines the height of the calendar days container. | | weekdaysHeight | number | Defines the height of the weekdays row. | | weekdaysFormat | "short" | "full" | "min" | Defines the format for displaying weekdays. | | monthsFormat | "short" | "full" | Defines the format for displaying months. | | monthCaptionFormat | "short" | "full" | Defines the format for displaying the month caption. | | hideHeader | boolean | Whether to hide the calendar header. | | hideWeekdays | boolean | Whether to hide the weekdays row. | | disableMonthPicker | boolean | Whether to disable the month picker. | | disableYearPicker | boolean | Whether to disable the year picker. |

Styling

DateTimePicker comes with a minimal style, making it easy to extend and customize according to your needs.

| Name | Type | Description | | ----------------- | --------------- | --------------------------------------------------------------- | | style | ViewStyle | style for the calendar container. | | className | string | className for the calendar container. | | styles | Styles | Custom styles for specific components inside the calendar. | | classNames | ClassNames | Custom classNames for specific components inside the calendar. |

Custom Styles

Use the styles prop to apply custom styles instead of the default ones.

These styles are mapped to the values of the UI Theme enums.

import DateTimePicker, { useDefaultStyles } from 'react-native-calendars-datepicker';

export function Calendar() {
  const defaultStyles = useDefaultStyles();

  return (
    <DateTimePicker
      styles={{
        ...defaultStyles,
        today: { borderColor: 'blue', borderWidth: 1 }, // Add a border to today's date
        selected: { backgroundColor: 'blue' }, // Highlight the selected day
        selected_label: { color: 'white' }, // Highlight the selected day label
      }}
    />
  );
}

NativeWind (Tailwind CSS)

If you're using NativeWind in your project, apply Tailwind CSS class names to style the calendar. Use the classNames prop to apply custom class names instead of the default ones.

These class names are mapped to the values of the UI Theme enums.

import DateTimePicker, { useDefaultClassNames } from 'react-native-calendars-datepicker';

export function Calendar() {
  const defaultClassNames = useDefaultClassNames();

  return (
    <DateTimePicker
      classNames={{
        ...defaultClassNames,
        today: 'border-amber-500', // Add a border to today's date
        selected: 'bg-amber-500 border-amber-500', // Highlight the selected day
        selected_label: "text-white", // Highlight the selected day label
        day: `${defaultClassNames.day} hover:bg-amber-100`, // Change background color on hover
        disabled: 'opacity-50', // Make disabled dates appear more faded
      }}
    />
  );
}

Time Zones

Use the timeZone prop to set the time zone for the calendar.

| Name | Type | Description | | -------------- | ------------------ | ------------------------------------------ | | timeZone | string | Defines the timezone for the DatePicker. |

The time zone can be set using either an IANA time zone identifier or a UTC offset.

<DateTimePicker timeZone="UTC" /> // Use Coordinated Universal Time
<DateTimePicker timeZone="Asia/Tokyo" /> //  Use Japan Standard Time (JST)

Localization

DateTimePicker offers multiple options to customize the calendar for different languages.

| Name | Type | Description | | ------------ | ------------------------------------ | ------------------------------------------------------------ | | locale | string | Defines the locale of the DateTimePicker. Default is en | | numerals | Numerals | Specifies the numeral system to use (e.g., Arabic, Persian). |

Custom Components

Use the components prop to replace the default rendered elements with your own custom components.

| Name | Type | Description | | --------------- | ------------------------- | -------------------------------------------------------- | | components | CalendarComponents | Custom components to replace default calendar elements. |

Implementing a Custom Component

Pass the custom components to the components prop. Refer to the list below for available custom components.

import DateTimePicker, {
  CalendarDay,
  CalendarMonth,
  CalendarComponents,
} from 'react-native-calendars-datepicker';

const components: CalendarComponents = {
  Day: (day: CalendarDay) => <YourCustomDay day={day} />,
  Month: (month: CalendarMonth) => <YourCustomMonth month={month} />
  // etc
};

export function Calendar() {
  return (
      <DateTimePicker
        components={components}
      />
  );
}

List of Custom Components

| Name | Type | Description | | ---------- | -------------------------------------- | ------------------------------------------------------ | | Day | (day: CalendarDay) => ReactNode | The component containing the day in the days grid. | | Month | (month: CalendarMonth) => ReactNode | The component containing the month in the months grid. | | Year | (year: CalendarYear) => ReactNode | The component containing the year in the years grid. | | Weekday | (weekday: CalendarWeek) => ReactNode | The component containing the weekday in the header. | | IconPrev | ReactNode | The previous month/year button icon in the header. | | IconNext | ReactNode | The next month button/year icon in the header. |

Type Definitions

type DateType = string | number | Dayjs | Date | null | undefined;

type CalendarMode = 'single' | 'range' | 'multiple';

type NavigationPosition = 'around' | 'right' | 'left';

type WeekdayFormat = 'min' | 'short' | 'full';

type MonthFormat = 'short' | 'full';

type CalendarDay = {
  number: number;
  text: string;
  date: string;
  isDisabled: boolean;
  isCurrentMonth: boolean;
  dayOfMonth?: number;
  isToday: boolean;
  isSelected: boolean;
  inRange: boolean;
  leftCrop: boolean;
  rightCrop: boolean;
  isStartOfWeek: boolean;
  isEndOfWeek: boolean;
  isCrop: boolean;
  inMiddle: boolean;
  rangeStart: boolean;
  rangeEnd: boolean;
};

type CalendarWeek = {
  index: number;
  name: {
    full: string;
    short: string;
    min: string;
  };
};

type CalendarMonth = {
  index: number;
  name: {
    full: string;
    short: string;
  };
  isSelected: boolean;
};

type CalendarYear = {
  number: number;
  text: string;
  isSelected: boolean;
  isActivated: boolean;
};

List of Numeral Systems

| Name | Description | | ---------- | --------------------------------------------- | | latn | Western Latin. | | arab | Standard Arabic. | | arabext | Eastern Arabic-Indic (Persian). | | deva | Devanagari, used in Indian languages. | | beng | Bengali, used in Bengali and Assamese. | | guru | Gurmukhi, used in Punjab, India. | | gujr | Gujarati, used in Gujarat, India. | | orya | Odia, used in Odisha, India. | | tamldec | Tamil, used in Tamil-speaking regions. | | telu | Telugu, used in Andhra Pradesh and Telangana. | | knda | Kannada, used in Karnataka, India. | | mlym | Malayalam, used in Kerala, India. |

License

MIT. See the LICENSE file for more details.

Contributing

Contributions are welcome! Please feel free to submit a PR.