OMikkel / tailwind-datepicker-react

A tailwindcss/flowbite datepicker component built as a react component with types
https://omikkel.github.io/tailwind-datepicker-react/
MIT License
160 stars 70 forks source link
datepicker flowbite nextjs react tailwindcss

NPM Version NPM Minified Size GitHub deployments

Tailwind-datepicker-react

A Tailwindcss/Flowbite datepicker component built as a React component with types based on the original datepicker from Flowbite. This component can also be used as a plugin using the Flowbite React library.

Date logic from VanillaJS-datepicker.

Demo

thumbnail

Installation

  1. Install the package
npm install tailwind-datepicker-react
yarn add tailwind-datepicker-react
  1. Add the styles to your tailwind.config.js file
module.exports = {
    ...
    content: [
        ...
        "./node_modules/tailwind-datepicker-react/dist/**/*.js", // <--- Add this line
    ],

};
  1. Import the component and use it
import Datepicker from "tailwind-datepicker-react"

Usage

Basic

const options = {
    title: "Demo Title",
    autoHide: true,
    todayBtn: false,
    clearBtn: true,
    clearBtnText: "Clear",
    maxDate: new Date("2030-01-01"),
    minDate: new Date("1950-01-01"),
    theme: {
        background: "bg-gray-700 dark:bg-gray-800",
        todayBtn: "",
        clearBtn: "",
        icons: "",
        text: "",
        disabledText: "bg-red-500",
        input: "",
        inputIcon: "",
        selected: "",
    },
    icons: {
        // () => ReactElement | JSX.Element
        prev: () => <span>Previous</span>,
        next: () => <span>Next</span>,
    },
    datepickerClassNames: "top-12",
    defaultDate: new Date("2022-01-01"),
    language: "en",
    disabledDates: [],
    weekDays: ["Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"],
    inputNameProp: "date",
    inputIdProp: "date",
    inputPlaceholderProp: "Select Date",
    inputDateFormatProp: {
        day: "numeric",
        month: "long",
        year: "numeric"
    }
}

const DemoComponent = () => {
    const [show, setShow] = useState < boolean > false
    const handleChange = (selectedDate: Date) => {
        console.log(selectedDate)
    }
    const handleClose = (state: boolean) => {
        setShow(state)
    }

    return (
        <div>
            <Datepicker options={options} onChange={handleChange} show={show} setShow={handleClose} />
        </div>
    )
}

Advanced - Custom input field

const options = {
    title: "Demo Title",
    autoHide: true,
    todayBtn: false,
    clearBtn: true,
    clearBtnText: "Clear",
    maxDate: new Date("2030-01-01"),
    minDate: new Date("1950-01-01"),
    theme: {
        background: "bg-gray-700 dark:bg-gray-800",
        todayBtn: "",
        clearBtn: "",
        icons: "",
        text: "",
        disabledText: "bg-red-500",
        input: "",
        inputIcon: "",
        selected: "",
    },
    icons: {
        // () => ReactElement | JSX.Element
        prev: () => <span>Previous</span>,
        next: () => <span>Next</span>,
    },
    datepickerClassNames: "top-12",
    defaultDate: new Date("2022-01-01"),
    language: "en",
    disabledDates: [],
    weekDays: ["Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"],
    inputNameProp: "date",
    inputIdProp: "date",
    inputPlaceholderProp: "Select Date",
    inputDateFormatProp: {
        day: "numeric",
        month: "long",
        year: "numeric"
    }
}

const DemoComponent = () => {
    const [show, setShow] = useState < boolean > false
    const [selectedDate, setSelectedDate] = (useState < Date) | (null > null)
    const handleChange = (selectedDate: Date) => {
        setSelectedDate(selectedDate)
        console.log(selectedDate)
    }
    const handleClose = (state: boolean) => {
        setShow(state)
    }

    return (
        <div>
            <Datepicker options={options} onChange={handleChange} show={show} setShow={handleClose}>
                <div className="...">
                    <div className="...">
                        <CalendarIcon />
                    </div>
                    <input type="text" className="..." placeholder="Select Date" value={selectedDate} onFocus={() => setShow(true)} readOnly />
                </div>
            </Datepicker>
        </div>
    )
}

DatePicker Props

IOptions

ITheme

IIcons

License

This project is open-source under the MIT License.

Contributing

After clone, you can run (separated):