# ng2-fittext
An Angular 2+ directive, written in pure TypeScript (without jQuery!), to automatically scale the font size of an element so that it fits within its parent container.
## Demo
Check out the live demo: [ng2-fittext Demo]([http://plnkr.co/edit/v0TQaYepV4E2Heur02j5?p=preview](https://stackblitz.com/edit/stackblitz-starters-7ghzat?file=src%2Fmain.ts))
## Installation
Install the library using npm:
```
$ npm install --save ng2-fittext
```
### Usage
1. Import the module in your Angular application:
```
import { Ng2FittextModule } from "ng2-fittext";
@NgModule({
imports: [Ng2FittextModule]
})
```
2. Use the directive in your components:
```
import { Component } from '@angular/core';
@Component({
selector: 'label',
template: `
Bla bla bla...
`
})
export class LabelComponent {}
```
### Examples
Fit to the parent element (works if you have a variable number of elements between your element and its parent):
```
import { Component } from '@angular/core';
@Component({
selector: 'label',
template: `
Bla bla bla...
`
})
export class LabelComponent {}
```
**NEW! Support for auto-resize input box:**
```
import { Component } from '@angular/core';
@Component({
selector: 'inputbox',
template: `
`
})
export class InputBoxComponent {}
```
**NEW! Support for maxFontSize:**
```
import { Component } from '@angular/core';
@Component({
selector: 'inputbox',
template: `
`
})
export class InputBoxComponent {}
```
Input Parameters:
| Parameter | Description | Values |
| ------------------------------- | --------------------------------------------------------------------------------------- | ----------------------------- |
| fittext | Directive selector | true/false |
| container | The container to fit (if not present it fits to the parent container by default) | ElementRef |
| activateOnResize | Enable/disable the autofit on window resize | true or false (default false) |
| activateOnInputEvents | Enable/disable the auto-fit in case of input box events (keydown, keyup etc..) | true or false (default false) |
| maxFontSize | Maximum font size | Number (default is 1000) |
| **!deprecated!** useMaxFontSize | Use max font size if is true | Deprecated! |
| minFontSize | Minimum font size | Number (default is 7) |
| modelToWatch | Pass model to watch; when this model changes, font size is automatically recalculated | Any type of model |
Output Parameters:
| Parameter | Description | Values |
| --------------- | ----------------- | ------ |
| fontSizeChanged | Current font size | string |
### Development
Want to contribute? Great!
Simply, clone the repository!
I created this library because I always spent too much time solving this problem and didn't find anything on the web (as of 13/03/2017) that does this without jQuery and is easily integrable in Angular 2+.
While it might not be the best implementation, it gets the job done.
### Todos
- Write tests
- Find a performant algorithm to find the font size that fits the container better
## License
MIT
**Lorenzo I.**