UNPKG

ngx-mat-timepicker

Version:

ngx-mat-timepicker is an Angular material 9+ extension to add time pickers!

291 lines (202 loc) 16.3 kB
# ngx-mat-timepicker [![npm][badge-npm-version]][url-npm] [![npm][badge-npm-downloads]][url-npm] [![MIT licensed][badge-licence]][url-licence] [![Build state][badge-ci-state]][url-ci-state] [![Size][badge-bundle]][url-bundle] A simple time picker module using Angular Material: it provides an Android style dialog for time selection and a handy input for time selection in Material style. ## VERY IMPORTANT READ THIS I'm moving this to the top because it appears that people don't get to reading it in the **contribute** section. FOR THIS LIBRARY **PLEASE USE ISSUES ONLY FOR BUG REPORTING**. DON'T OPEN ISSUES SUCH AS "I need upgrade for Angular 1745646456" especially if Angular 1745646456 was released a few days ago. I **guarantee** that I manage the updates **AS SOON AS POSSIBLE**. But as you understand this is not a paying job, so you can't get Angular 1745646456 the day it gets released. **ISSUES NOT RESPECTING THIS WILL BE DELETED IMMEDIATELY WITHOUT ANY RESPONSE**. Thank you. ### Why this project? The original was nice, but for some reason it didn't adapt to your Material theme. So an extra config was necessary to have a nice integration in your app. This project **automatically adapts** to your Material theme, even if a custom one (so, for example, if you have a dark theme, you'll have a dark dialog!). By default it will use the primary color. You can choose the color scheme among the three **ThemePalette** items, natively provided by Material: `primary`, `accent`, `warn`. Also a few components were unnecessary and not in material style, so I got rid of them and integrated Material components, such as `mat-select` and others. **Other general improvements** * Improved clock hand alignments * Changed clock hand appearance for minutes which aren't multiple of 5 (as in Android timepicker) * Improved appearance of focused inputs, the toggle and increase/decrease arrows in timepicker-field * Improved header content disposition when 24h format is enabled * Used material buttons for dialog actions (CANCEL/OK) * Added leading zero for the hours in the dialog header (as in Android timepicker) * More consistent naming * Removed useless exports from NgxMatTimepickerModule ### Compatibility * v9 < Angular/Material < v17 **IMPORTANT** Remember to include a Material Theme in your project, example: ```scss @use "@angular/material/prebuilt-themes/indigo-pink.css"; ``` or ```scss @use "@angular/material" as mat; @include mat.all-component-themes($my-theme); ``` **IMPORTANT ABOUT MATERIAL V15** This library uses the new set of Material components, so it doesn't support the **legacy** theming. Support for legacy components has been considered, but won't be developed. If you still need the legacy version you can contact me and we'll see what can be done, but a real effort will be put through only for a huge amount of requests. Refer to the [Angular Material](https://material.angular.io) website for theming options. ## Table of contents * [Getting started](#getting-started) * [Internationalization](#internationalization) * [Documentation](#documentation) * [NgxMatTimepicker](#ngxMatTimepicker) * [NgxMatTimepickerComponent](#ngxMatTimepickercomponent) * [NgxMatTimepickerFieldComponent](#ngxMatTimepickerfieldcomponent) * [NgxMatTimepickerToggleComponent](#ngxMatTimepickertogglecomponent) * [NgxMatTimepickerToggleIconDirective](#ngxMatTimepickertoggleicondirective) * [Development](#development) * [Tests](#tests) * [License](#license) ## Getting started Install timepicker through npm: ```bash npm i --save ngx-mat-timepicker ``` Next import the timepicker module into your app's module: ```typescript import {NgModule} from '@angular/core'; import {NgxMatTimepickerModule} from 'ngx-mat-timepicker'; @NgModule({ imports: [NgxMatTimepickerModule] }) export class MyModule { } ``` Finally connect the timepicker to an input via a template property: ```html <input [ngxMatTimepicker]="picker"> <ngx-mat-timepicker #picker></ngx-mat-timepicker> ``` The timepicker opens once you click on the input ## Internationalization Timepicker supports locales in format `BCP 47`. It has `en-US` locale by default. To override default locale: ```typescript import {NgModule} from '@angular/core'; import {NgxMatTimepickerModule} from 'ngx-mat-timepicker'; @NgModule({ imports: [NgxMatTimepickerModule.setLocale('en-GB')] }) export class MyModule { } ``` ## Documentation #### API reference for Angular Material Timepicker ```typescript import {NgxMatTimepickerModule} from 'ngx-mat-timepicker'; ``` #### NgxMatTimepicker Directive responsible for managing the timepicker popup and setting value to input Selector: `ngxMatTimepicker` **Properties** | Name | Type | Description | |--------------------|---------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------| | | | | | ngxMatTimepicker | NgxMatTimepickerComponent | The timepicker that this input is associated with. | | color | ThemePalette | The material palette to use. | | disabled | boolean | Weather the timepicker popup should be disabled. | | value | string | Set a default value and time for a timepicker. The format of the time is in 12 hours notation `11:00 PM` or in 24 hours notation `23:00`. A Date string won't work. | | format | number | `12` or `24` . 12h/24h view for hour selection clock . `12` (AM/PM) format by default. | | min | string \| DateTime | Set min time for timepicker (`11:15 pm` ) | | max | string \| DateTime | Set max time for timepicker (`11:15 pm` ) | | disableClick | boolean | Set `true` to disable opening timepicker by clicking on the input | | dottedMinutesInGap | boolean | Set `true` (or just have the attr, since it's coherced) to have dots where minutes are not printed | #### NgxMatTimepickerLocaleService (⭐NEW FROM v 13.2.0!!!⭐) This service allows to **change the locale anytime**. You can inject this in your component or extend and provide your version, in order to provide your current locale to all the pickers! At this time is **semi-static**, which means you can't change the locale for pickers that are already opened. But **new pickers will always get the updated locale**. #### NgxMatTimepickerComponent Component responsible for visualisation the timepicker Selector: `ngx-mat-timepicker` **Properties** | Name | Type | Description | |---------------------|------------------------|--------------------------------------------------------------------------------------------------------------------------------------------| | cancelBtnTmpl | TemplateRef<Node> | Set if you want to change cancel button to your custom one. | | @Input() | confirmBtnTmpl | TemplateRef<Node> | Set if you want to change confirm button to your custom one. | | defaultTime | string | Set default time for a timepicker. `12:00 AM` by default | | disableAnimation | boolean | Set `true` to prevent opening and closing timepicker animation. Uses `false` by default | | editableHintTmpl | TemplateRef<Node> | Set if you want to change dial hint to your custom one. Works only if `enableKeyboardInput = true` | | enableKeyboardInput | boolean | To disable or enable changing time through a keyboard on the timepicker dial without interaction with a clock face. Set `false` by default | | hoursOnly | boolean | Set `true` to prevent switching to minutes automatically once hour is selected. Uses `false` by default | | isEsc | boolean | Disable or enable closing timepicker by ESC. | | minutesGap | number | To define a gap between minutes. Set `1` by default | | preventOverlayClick | boolean | Set `true` to prevent closing the timepicker by overlay click. Uses `false` by default | | timepickerClass | string | To provide a custom css class for the timepicker | | timeSet: | EventEmitter\<string\> | Emits time when that was set. | | opened: | EventEmitter\<null\> | Emits after timepicker was opened. | | closed | EventEmitter\<null\> | Emits after timepicker was closed. | | hourSelected | EventEmitter\<number\> | Emits after hour was selected. | | timeChanged | EventEmitter\<string\> | Emits once time was changed. | #### NgxMatTimepickerFieldComponent The timepicker as a control. Selector: `ngx-mat-timepicker-field` **Properties** | Name | Type | Description | |----------------|----------------------------------|-----------------------------------------------------------------------------| | disabled: | boolean | Whether the timepicker is disabled | | floatLabel | 'never' \| 'always' \| 'auto' | Whether the labels of the fields should float, default to never | | toggleIcon | TemplateRef\<HTMLObjectElement\> | Provide custom `svg` icon for toggle button | | buttonAlign | 'right' \| 'left' | Positioning toggle button (`right` by default) | | clockTheme | NgxMatTimepickerTheme | Custom css properties which will override timepicker clock | | controlOnly | boolean | Hide or display toggle button with the timepicker clock | | format | number | `12` or `24` . Set format for timepicker. `12` (AM/PM) format by default. | | cancelBtnTmpl | TemplateRef\<Node\> | Set if you want to change cancel button for timepicker to your custom one. | | confirmBtnTmpl | TemplateRef\<Node\> | Set if you want to change confirm button for timepicker to your custom one. | | min | string \| DateTime | Set min time for timepicker (`11:15 pm` ) | | max | string \| DateTime | Set max time for timepicker (`11:15 pm` ) | | timeChanged | EventEmitter\<string\> | Emit a new time once it is changed. | #### NgxMatTimepickerToggleComponent Component responsible for opening the timepicker. Selector: `ngx-mat-timepicker-toggle` **Properties** | Name | Type | Description | |----------|---------------------------|-------------------------------------------------| | for | NgxMatTimepickerComponent | Timepicker instance that the button will toggle | | disabled | boolean | Whether the toggle button is disabled | #### NgxMatTimepickerToggleIconDirective Can be used to override the icon of a `NgxMatTimepickerToggleComponent`. Selector: `[ngxMatTimepickerToggleIcon]` **Properties** | Name | Type | Description | |-----------------------|-----------------------|--------------------------------------------------------| | ngxMatTimepickerTheme | NgxMatTimepickerTheme | Custom css properties which will override the defaults | ### Demo <a href="https://tonysamperi.github.io/ngx-mat-timepicker/">Demo</a> ```terminal $ npm install $ npm run start //run example ``` Run `npm test` to run tests once or `npm run test:watch` to continually run tests. ## Special thanks Jetbrains is now supporting this library with an open-source license, which will allow a better code! 🎉 ![jetbrains-logo](https://user-images.githubusercontent.com/5957244/150580991-863d6fba-1090-4924-b26c-be19c6310f24.svg) ## License This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details ### Thanks to [LayZeeDK](https://github.com/LayZeeDK) - For his great work on the unit tests and upgrades for v15 "legacy" [Agranom](https://github.com/Agranom) for setting up the original repo. [badge-bundle]: https://img.shields.io/bundlephobia/minzip/ngx-mat-timepicker [badge-ci-state]: https://github.com/tonysamperi/ngx-mat-timepicker/actions/workflows/main.yml/badge.svg [badge-licence]: https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square [badge-npm-downloads]: https://img.shields.io/npm/dm/ngx-mat-timepicker.svg?style=flat-square [badge-npm-version]: https://img.shields.io/npm/v/ngx-mat-timepicker.svg?style=flat-square [badge-openbase]: https://badges.openbase.com/js/rating/ngx-mat-timepicker.svg?token=imNtfVxrKTW3J1VSOlxCqRcyvTG7POhNoOkaljG1DeA= [initial-author]: https://github.com/TonySamperi [url-bundle]: https://img.shields.io/bundlephobia/minzip/ngx-mat-timepicker [url-ci-state]: https://github.com/tonysamperi/ngx-mat-timepicker/actions [url-licence]: https://github.com/tonysamperi/ngx-mat-timepicker/blob/master/LICENSE [url-npm]: https://www.npmjs.com/package/ngx-mat-timepicker [url-openbase]: https://openbase.com/js/ngx-mat-timepicker