UNPKG

vue-accessible-datepicker

Version:

⚠️**WARNING: vue-accessible-datepicker is at pre-alpha stage of development so there may be bugs and various changes made.** ⚠️

230 lines (171 loc) 7.99 kB
# Vue Accessible Datepicker ⚠️**WARNING: vue-accessible-datepicker is at pre-alpha stage of development so there may be bugs and various changes made.** ⚠️ **Submit issues and feature requests [here](https://github.com/hex-digital/vue-accessible-datepicker/issues)**. --- ## **Table of Contents** - [About](#about) - [Installation](#installation) - [Usage](#usage) - [Props](#props) - [Events](#Events) - [Roadmap](#roadmap) - [Development](#development) - [License](#license) --- ### **About** VueAccessibleDatepicker is a fully customisable, AA accessible datepicker built in Vue, for Vue projects. ![Screenshot of datepicker](/docs/img/calendar-bare-bones-screenshot.jpg) **_WCAG 2.1 AA Accessible_** - **work in progress - currently in pre-alpha stages.** If you're curious, here's some information on how to meet WCAG 2.1 AA Accessibility: https://www.w3.org/WAI/WCAG21/quickref/?versions=2.1&currentsidebar=%23col_customize&showtechniques=144%2C145&levels=a%2Caaa#hiddensc To find all of the functionality that a date-picker should have, VueAccessibleDatepicker is based off of [this date picker](https://www.w3.org/TR/wai-aria-practices/examples/dialog-modal/datepicker-dialog.html) from [W3's website](https://www.w3.org/TR/wai-aria-practices/). --- ### **Installation** ``` bash npm install vue-accessible-datepicker ``` or if you prefer yarn ``` bash yarn add vue-accessible-datepicker ``` --- ### **Usage** #### **Global** You may install the date-picker globally: ``` js import Vue from 'vue'; import VueAccessibleDatepicker from 'vue-accessible-datepicker'; Vue.use(VueAccessibleDatepicker); ``` This will make **&lt;vue-accessible-datepicker&gt;** available to all components within your Vue app. #### **Local** Include the datepicker directly into your component using import: ``` js import VueAccessibleDatepicker from 'vue-accessible-datepicker'; export default { ... components: { VueAccessibleDatepicker, } ... }; ``` --- #### **Props** | Prop | Type | Default | Description | |-------------------- |-------- |---------------------- |---------------------------------------------------------------------------------------------------------| | calendarIcon | String | Default Icon | Icon for the button to open the date-picker. A default icon appears if none is provided. | | customClasses | Object | {} | Provide classes to override the default styles. See [customClasses](#customClasses) for more info. | | dateFormat | String | "MM/DD/YYYY" | The format of the date to use for the input and calendar. See [dateFormat](#dateFormat) for more info. | | initialValue | String | null | Provide an initial value to the input if needed. | | inputPlaceholder | String | null | Placeholder for the input. | | label | String | "Date (mm/dd/yyyy):" | "(mm/dd/yyyy)" changes depending on the dateFormat prop. | | minDate | Date | null | Every date before the minDate is disabled. | | maxDate | Date | null | Every date after the maxDate is disabled. | | navigateMonthIcons | Object | {} | Provide custom icons for the previous and next navigation arrows. See [navigateMonthIcons](#navigateMonthIcons) for more info | | required | Boolean | false | Boolean for if the input is required for the form it is used in. | | name | String | null | Name for the input field | ##### `customClasses` Provide custom classes in an object via the prop `customClasses`. The aim of this prop is to make the calendar as customisable as possible. Available classes: - Classes for the wrapper container with input and button: - `wrapper` - `inputContainer` - `inputWrapper` - `inputLabel` - `inputError` - `input` - `toggleButton` - `toggleButtonIcon` - Classes for the datepicker: - `datepickerWrapper` - `datepickerHeaderWrapper` - `datepickerChangeMonthButton` - for both next and previous buttons. - `datepickerChangeMonthButtonDisabled` - Disabled state of `datepickerChangeMonthButton` element. - `datepickerBackArrow` - for the icon itself. - `datepickerHeader` - `datepickerNextArrow` - for the icon itself. - `datepickerContent` - the wrapper for the table element itself. Houses the calendar. - `datepickerWeekdaysWrapper` - On the `<thead>` element. Wraps the header part with the list of weekdays. - `datepickerWeekdaysRowWrapper` - On the `<tr>` element. Wraps the list of weekdays. - `datepickerWeekday` - On each `<th>` element (each weekday). - `datepickerWeeks` - On the `<tbody>` element. - `datepickerWeek` - On the `<tr>` element, wraps each week. - `datepickerDay` - On the `<td>` element, wraps each day button. - `datepickerDayButtonSelected` - Selected state of `datepickerDay` `td` element. - `datepickerDayButtonDisabled` - Disabled state of `datepickerDay` `td` element. - `datepickerDayButton` - On the `<button>` in each `td`. - `datepickerFillerDate` - On each blank `<td>` to make each month start on the correct day of the week. - `datepickerFooter` - Footer wrapper with the close button. - `datepickerFooterButton` **Code example:** ```html <vue-accessible-datepicker :custom-classes="{ wrapper: 'custom-datepicker-wrapper-class', datepickerChangeMonthButton: 'custom-datepicker-change-month-class', toggleButtonIcon: 'toggle-me-class', }" /> ``` ##### `dateFormat` The formatting is taken from [MomentJS](https://momentjs.com). See the docs here https://momentjs.com/docs/#/displaying/format/. The formats accepted are: - `MM/DD/YYYY` - `MM-DD-YYYY` - `DD/MM/YYYY` - `DD-MM-YYYY` - `YYYY/MM/DD` - `YYYY-MM-DD` If `dateFormat` is not provided, it defaults to `MM/DD/YYYY`. If you type a different format of date than the `dateFormat` specified, there will be an error in the console. **Code example:** ```html <vue-accessible-datepicker date-format="DD-MM-YYYY" /> ``` --- ##### `navigateMonthIcons` Provide src of img or svgs through the `navigateMonthIcons` prop as an object with `next` and `previous` as the keys. **Code example:** ```html <vue-accessible-datepicker :navigate-month-icons="{ next: '/img/next-arrow.svg', previous: '/img/previous-arrow.svg', }" /> ``` --- ### **Events** - Input - On blur - the component emits "input-blur" with the value of the input. - Input - On focus - the component emits "input-focus" with the value of the input. - Input - On change - the component emits "input-change" with the value of the input. - Date selected via date-picker - component emits "date-selected" with the selected date. --- ### **Slot** There is a single slot with the classname of `v-datepicker__input-error` for any form error messages you want to inject and style. --- ### **Example** ```html <vue-accessible-datepicker name="start-date" required date-format="DD-MM-YYYY" :custom-classes="{ wrapper: 'v-wrapper', input: 'v-input' }" /> ``` ### **Roadmap** - Tests ### **Development** `yarn install` `yarn dev` ## **License** This project is licensed under MIT - see [LICENSE.md](https://github.com/hex-digital/vue-accessible-datepicker/blob/master/LICENSE) for details. --- © 2019 Hex Digital. [hexdigital.com](https://hexdigital.com/)