UNPKG

ngx-autosize

Version:

Directive that automatically adjusts textarea height to fit content

1 lines 16.9 kB
{"version":3,"file":"ngx-autosize.mjs","sources":["../../../projects/ngx-autosize/src/lib/window-ref.service.ts","../../../projects/ngx-autosize/src/lib/autosize.directive.ts","../../../projects/ngx-autosize/src/lib/autosize.module.ts","../../../projects/ngx-autosize/src/public-api.ts","../../../projects/ngx-autosize/src/ngx-autosize.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class WindowRef {\n get nativeWindow(): any {\n return window;\n }\n}\n","import {\n ElementRef,\n HostListener,\n Directive,\n Input,\n NgZone, OnDestroy, OnChanges, AfterContentChecked, Output, EventEmitter, SimpleChanges\n} from '@angular/core';\nimport {WindowRef} from './window-ref.service';\n\nconst MAX_LOOKUP_RETRIES = 3;\n\n@Directive({\n selector: '[autosize]'\n})\n\nexport class AutosizeDirective implements OnDestroy, OnChanges, AfterContentChecked {\n @Input()\n set minRows(value: number) {\n this._minRows = +value;\n if (this.textAreaEl) {\n this.textAreaEl.rows = this._minRows;\n }\n };\n @Input('autosize')\n set _autosize(autosize: boolean | string) {\n this.autosize = typeof autosize === 'boolean'\n ? autosize\n : true;\n };\n private _minRows!: number;\n\n @Input() maxRows!: number;\n @Input() onlyGrow = false;\n @Input() useImportant = false;\n\n @Output() resized = new EventEmitter<number>();\n\n private autosize = true;\n private retries = 0;\n private textAreaEl: any;\n\n private _oldContent!: string;\n private _oldWidth!: number;\n\n private _windowResizeHandler!: (...args: Array<any>) => any;\n private _destroyed = false;\n\n @HostListener('input', ['$event.target'])\n onInput(textArea: HTMLTextAreaElement): void {\n this.adjust();\n }\n\n constructor(\n public element: ElementRef,\n private _window: WindowRef,\n private _zone: NgZone\n ) {\n if (this.element.nativeElement.tagName !== 'TEXTAREA') {\n this._findNestedTextArea();\n\n } else {\n this.textAreaEl = this.element.nativeElement;\n this.textAreaEl.style['overflow-y'] = 'hidden';\n this._onTextAreaFound();\n }\n }\n\n ngOnDestroy() {\n this._destroyed = true;\n if (this._windowResizeHandler) {\n this._window.nativeWindow.removeEventListener('resize', this._windowResizeHandler, false);\n }\n }\n\n ngAfterContentChecked() {\n this.adjust();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n this.adjust(true);\n }\n\n _findNestedTextArea() {\n this.textAreaEl = this.element.nativeElement.querySelector('TEXTAREA');\n\n if (!this.textAreaEl && this.element.nativeElement.shadowRoot) {\n this.textAreaEl = this.element.nativeElement.shadowRoot.querySelector('TEXTAREA');\n }\n\n if (!this.textAreaEl) {\n if (this.retries >= MAX_LOOKUP_RETRIES) {\n console.warn('ngx-autosize: textarea not found');\n\n } else {\n this.retries++;\n setTimeout(() => {\n this._findNestedTextArea();\n }, 100);\n }\n return;\n }\n\n this.textAreaEl.style['overflow-y'] = 'hidden';\n this._onTextAreaFound();\n\n }\n\n _onTextAreaFound() {\n this._addWindowResizeHandler();\n setTimeout(() => {\n this.adjust();\n });\n }\n\n _addWindowResizeHandler() {\n this._windowResizeHandler = debounce(() => {\n this._zone.run(() => {\n this.adjust();\n });\n }, 200);\n\n this._zone.runOutsideAngular(() => {\n this._window.nativeWindow.addEventListener('resize', this._windowResizeHandler, false);\n });\n }\n\n adjust(inputsChanged = false): void {\n if (this.autosize && !this._destroyed && this.textAreaEl && this.textAreaEl.parentNode) {\n\n const currentText = this.textAreaEl.value;\n\n if (\n inputsChanged === false &&\n currentText === this._oldContent &&\n this.textAreaEl.offsetWidth === this._oldWidth\n ) {\n return;\n }\n\n this._oldContent = currentText;\n this._oldWidth = this.textAreaEl.offsetWidth;\n\n const clone = this.textAreaEl.cloneNode(true);\n const parent = this.textAreaEl.parentNode;\n clone.style.width = this.textAreaEl.offsetWidth + 'px';\n clone.style.visibility = 'hidden';\n clone.style.position = 'absolute';\n clone.textContent = currentText;\n\n parent.appendChild(clone);\n\n clone.style['overflow-y'] = 'hidden';\n clone.style.height = 'auto';\n\n let height = clone.scrollHeight;\n\n // add into height top and bottom borders' width\n let computedStyle = this._window.nativeWindow.getComputedStyle(clone, null);\n height += parseInt(computedStyle.getPropertyValue('border-top-width'));\n height += parseInt(computedStyle.getPropertyValue('border-bottom-width'));\n\n if (computedStyle.getPropertyValue('box-sizing') === 'content-box') {\n height -= parseInt(computedStyle.getPropertyValue('padding-top'));\n height -= parseInt(computedStyle.getPropertyValue('padding-bottom'));\n }\n\n const oldHeight = this.textAreaEl.offsetHeight;\n const willGrow = height > oldHeight;\n\n if (this.onlyGrow === false || willGrow) {\n const lineHeight = this._getLineHeight();\n const rowsCount = height / lineHeight;\n\n if (this._minRows && this._minRows >= rowsCount) {\n height = this._minRows * lineHeight;\n\n } else if (this.maxRows && this.maxRows <= rowsCount) {\n // never shrink the textarea if onlyGrow is true\n const maxHeight = this.maxRows * lineHeight;\n height = this.onlyGrow ? Math.max(maxHeight, oldHeight): maxHeight;\n this.textAreaEl.style['overflow-y'] = 'auto';\n\n } else {\n this.textAreaEl.style['overflow-y'] = 'hidden';\n }\n\n const heightStyle = height + 'px';\n const important = this.useImportant ? 'important' : '';\n\n this.textAreaEl.style.setProperty('height', heightStyle, important);\n\n this.resized.emit(height);\n }\n\n parent.removeChild(clone);\n }\n }\n\n private _getLineHeight() {\n let lineHeight = parseInt(this.textAreaEl.style.lineHeight, 10);\n if (isNaN(lineHeight) && this._window.nativeWindow.getComputedStyle) {\n const styles = this._window.nativeWindow.getComputedStyle(this.textAreaEl);\n lineHeight = parseInt(styles.lineHeight, 10);\n }\n\n if (isNaN(lineHeight)) {\n const fontSize = this._window.nativeWindow.getComputedStyle(this.textAreaEl, null).getPropertyValue('font-size');\n lineHeight = Math.floor(parseInt(fontSize.replace('px', ''), 10) * 1.5);\n }\n\n return lineHeight;\n }\n}\n\nfunction debounce<Params extends Array<any>>(func: (...args: Params) => any, timeout: number): (...args: Params) => void {\n let timer: number;\n return (...args: Params) => {\n clearTimeout(timer)\n timer = setTimeout(() => {\n func(...args)\n }, timeout)\n }\n}\n\n// function Debounce(func: any, wait: number, immediate = false) {\n// let timeout: number | undefined;\n// return () => {\n// const context = this;\n// const args = arguments;\n// const later = function () {\n// timeout = undefined;\n// if (!immediate) {\n// func.apply(this, args);\n// }\n// };\n// const callNow = immediate && !timeout;\n// clearTimeout(timeout);\n// timeout = setTimeout(later, wait);\n// if (callNow) {\n// func.apply(this, args);\n// }\n// };\n// }\n","import {NgModule} from '@angular/core';\nimport {AutosizeDirective} from './autosize.directive';\nimport {WindowRef} from './window-ref.service';\n\n@NgModule({\n declarations: [AutosizeDirective],\n imports: [],\n providers: [\n WindowRef\n ],\n exports: [AutosizeDirective]\n})\nexport class AutosizeModule {\n}\n","/*\n * Public API Surface of ngx-autosize\n */\n\nexport * from './lib/autosize.directive';\nexport * from './lib/autosize.module';\nexport * from './lib/window-ref.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.WindowRef"],"mappings":"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"}