@alexfriesen/ngx-mat-timepicker
Version:
ngx-mat-timepicker is an Angular material 17+ extension to add time pickers!
229 lines (162 loc) • 13.3 kB
Markdown
# /ngx-mat-timepicker
[![npm][badge-npm-version]][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.
<img width="371" alt="ngx-mat-datepicker preview" src="https://github.com/user-attachments/assets/53b98eb1-51a6-46b5-8dd1-a405ded668a0" />
## 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 '@alexfriesen/ngx-mat-timepicker';
({
imports: [NgxMatTimepickerModule],
})
export class MyModule {}
```
Finally connect the timepicker to an input via a template property:
```html
<input [ngxMatTimepicker]="picker" />
<ngx-mat-timepicker #picker />
```
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 '@alexfriesen/ngx-mat-timepicker';
({
imports: [NgxMatTimepickerModule.setLocale('en-GB')],
})
export class MyModule {}
```
## Theming
This Package relies on an existing Angular Material Theme:
```scss
'/material/prebuilt-themes/indigo-pink.css';
```
or
```scss
'/material' as mat;
mat.all-component-themes($my-theme);
```
## Documentation
#### API reference for Angular Material Timepicker
```typescript
import { NgxMatTimepickerModule } from '@alexfriesen/ngx-mat-timepicker';
```
#### NgxMatTimepicker
Directive responsible for managing the timepicker popup and setting value to input
Selector: `ngxMatTimepicker`
**Properties**
| Name | 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 or DateTime | Set min time for timepicker (`11:15 pm` ) |
| () max: string or DateTime | Set max time for timepicker (`11:15 pm` ) |
| () disableClick: boolean | Set `true` to disable opening timepicker by clicking on the input |
#### NgxMatTimepickerLocaleService
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 | Description |
| ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| () cancelBtnTmpl: TemplateRef<Node> | Set if you want to change cancel button to your custom one. |
| () confirmBtnTmpl: TemplateRef<Node> | Set if you want to change confirm button to your custom one. |
| () editableHintTmpl: TemplateRef<Node> | Set if you want to change dial hint to your custom one. Works only if `enableKeyboardInput = true` |
| () ESC: boolean | Disable or enable closing timepicker by ESC. |
| () 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 |
| () minutesGap: number | To define a gap between minutes. Set `1` by default |
| () defaultTime: string | Set default time for a timepicker. `12:00 AM` by default |
| () preventOverlayClick: boolean | Set `true` to prevent closing the timepicker by overlay click. Uses `false` by default |
| () disableAnimation: boolean | Set `true` to prevent opening and closing timepicker animation. Uses `false` by default |
| () hoursOnly: boolean | Set `true` to prevent switching to minutes automatically once hour is selected. Uses `false` by default |
| () theme: NgxMatTimepickerTheme | Custom css properties which will override the defaults |
| () 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 | Description |
| ----------------------------------------------------- | --------------------------------------------------------------------------- |
| () disabled: boolean | Whether the timepicker is disabled |
| () floatLabel: 'never' or 'always' or 'auto' | Whether the labels of the fields should float, default to never |
| () toggleIcon: TemplateRef\<HTMLObjectElement\> | Provide custom `svg` icon for toggle button |
| () buttonAlign: 'right' or '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 or DateTime | Set min time for timepicker (`11:15 pm` ) |
| () max: string or 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 | 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 | Description |
| ----------------------------------------------------- | ------------------------------------------------------ |
| () ngxMatTimepickerTheme: NgxMatTimepickerTheme | Custom css properties which will override the defaults |
### Demo
<a href="https://alexfriesen.github.io/ngx-mat-timepicker/">Demo</a>
```terminal
$ npm
$ npm start
```
Run `npm test` to run tests once.
## 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/@alexfriesen/ngx-mat-timepicker
[badge-ci-state]: https://github.com/alexfriesen/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/@alexfriesen/ngx-mat-timepicker.svg?style=flat-square
[badge-npm-version]: https://img.shields.io/npm/v/@alexfriesen/ngx-mat-timepicker.svg?style=flat-square
[url-bundle]: https://img.shields.io/bundlephobia/minzip/@alexfriesen/ngx-mat-timepicker
[url-ci-state]: https://github.com/alexfriesen/ngx-mat-timepicker/actions
[url-licence]: https://github.com/alexfriesen/ngx-mat-timepicker/blob/master/LICENSE
[url-npm]: https://www.npmjs.com/package/@alexfriesen/ngx-mat-timepicker