- Single date picker
- Range date picker
- Month picker
- Year picker
- Locale support
- Start week on Sunday or Monday
- Full style configuration for input and calendar
- Dark and light theme
- Accessibility
- Type definitions
# npm
npm install @softechub-ib/vue-datepicker
# yarn
yarn add @softechub-ib/vue-datepicker
# pnpm
pnpm add @softechub-ib/vue-datepicker
# bun
bun add @softechub-ib/vue-datepickerGlobal
import { createApp } from "vue";
import App from "./App.vue";
import VueDatePicker from "@softechub-ib/vue-datepicker";
import "@softechub-ib/vue-datepicker/dist/style.css";
const app = createApp(App);
app.component("VueDatePicker", VueDatePicker);
app.mount("#app");Local
<script setup>
import { ref } from "vue";
import VueDatePicker from "@softechub-ib/vue-datepicker";
import "@softechub-ib/vue-datepicker/dist/style.css";
const date = ref();
</script>
<template>
<VueDatePicker v-model="date" />
</template>Types
import type {
CalendarStylesProp, // calendar-styles
DateValue, // min, max, model-value (DateValue | DateValue[])
DayjsLocale, // locale
InputStylesProp, // input-styles
Size, // size
} from "@softechub-ib/vue-datepicker";| Prop | Required | Type | Default value |
|---|---|---|---|
| model-value | yes | string | number | Date | null | undefined | (string | number | Date | null | undefined)[] |
|
| range | no | boolean |
false |
| month-picker | no | boolean |
false |
| year-picker | no | boolean |
false |
| size | no | "small" | "medium" | "large" |
"medium" |
| name | no | string |
"datepicker-input" |
| placeholder | no | string |
undefined |
| locale | no | DayjsLocale (union type of key values from the link) | "en" |
| start-week-on-monday | no | boolean |
false |
| hide-today-mark | no | boolean |
false |
| clearable | no | boolean |
true |
| disabled | no | boolean |
false |
| error | no | boolean |
false |
| dark | no | boolean |
false |
| min | no | string | number | Date | null | undefined |
undefined |
| max | no | string | number | Date | null | undefined |
undefined |
| input-styles | no | InputStylesProp | defaultInputStyles |
| calendar-styles | no | CalendarStylesProp | defaultCalendarStyles |
InputStylesProp
Each prop of InputStylesProp can be changed, but it is optional. At the end, custom styles will be merged with defaultInputStyles.
type Unit = "%" | "px" | "em" | "rem";
type InputStylesProp = {
container?: {
border?: string;
hoverBorder?: string;
borderRadius?: `${number}${Unit}`;
backgroundColor?: string;
small?: {
paddingX?: `${number}${Unit}`;
paddingY?: `${number}${Unit}`;
calendarIcon?: {
size?: `${number}${Unit}`;
};
clearIcon?: {
size?: `${number}${Unit}`;
};
};
medium?: {
paddingX?: `${number}${Unit}`;
paddingY?: `${number}${Unit}`;
calendarIcon?: {
size?: `${number}${Unit}`;
};
clearIcon?: {
size?: `${number}${Unit}`;
};
};
large?: {
paddingX?: `${number}${Unit}`;
paddingY?: `${number}${Unit}`;
calendarIcon?: {
size?: `${number}${Unit}`;
};
clearIcon?: {
size?: `${number}${Unit}`;
};
};
disabled?: {
opacity?: `${number}`;
};
error?: {
borderColor?: string;
backgroundColor?: string;
};
};
selection?: {
calendarIcon?: {
color?: string;
marginRight?: `${number}${Unit}`;
};
clearIcon?: {
color?: string;
marginLeft?: `${number}${Unit}`;
};
};
input?: {
fontSize?: `${number}${Unit}`;
lineHeight?: `${number}${Unit}`;
color?: string;
};
calendarWrapper?: {
zIndex?: `${number}`;
};
};CalendarStylesProp
Each prop of CalendarStylesProp can be changed, but it is optional. At the end, custom styles will be merged with defaultCalendarStyles.
type Unit = "%" | "px" | "em" | "rem";
type CalendarStylesProp = {
container?: {
width?: `${number}px`;
paddingX?: `${number}${Unit}`;
paddingY?: `${number}${Unit}`;
border?: string;
borderRadius?: `${number}${Unit}`;
backgroundColor?: string;
boxShadow?: string;
};
header?: {
marginBottom?: `${number}${Unit}`;
};
headerButton?: {
padding?: `${number}${Unit}`;
color?: string;
border?: string;
borderRadius?: `${number}${Unit}`;
backgroundColor?: string;
hoverBackgroundColor?: string;
iconSize?: `${number}${Unit}`;
restricted?: {
opacity?: `${number}`;
};
};
headerDateItem?: {
fontSize?: `${number}${Unit}`;
fontWeight?: `${number}`;
lineHeight?: `${number}${Unit}`;
color?: string;
paddingX?: string;
paddingY?: string;
borderRadius?: `${number}${Unit}`;
hoverBackgroundColor?: string;
};
table?: {
fontSize?: `${number}${Unit}`;
gap?: `${number}${Unit}`;
};
tableHead?: {
fontWeight?: `${number}`;
};
tableHeadItem?: {
color?: string;
};
tableBody?: {
fontWeight?: `${number}`;
};
tableBodyRow?: {
days?: {
marginTop?: `${number}${Unit}`;
};
monthsYears?: {
marginBottom?: `${number}${Unit}`;
};
};
tableBodyItem?: {
borderRadius?: `${number}${Unit}`;
color?: string;
hoverBackgroundColor?: string;
offset?: {
color?: string;
hoverColor?: string;
opacity?: `${number}`;
};
current?: {
border?: string;
};
restricted?: {
color?: string;
opacity?: `${number}`;
};
selected?: {
color?: string;
backgroundColor?: string;
};
};
};calendarIcon(Input calendar icon)clearIcon(Input clear icon)leftHeaderButtonIcon(Calendar left header button icon)rightHeaderButtonIcon(Calendar right header button icon)
Maintaining an open-source project is a time-consuming job. Your support is very appreciated ❤️
Please ⭐️ this repository if you like the component.
You can also make a financial contribution via sponsoring this project or one time donation → become a sponsor.
Copyright © 2024-present softechub-ib