@eui/components 19.1.1 → 19.1.2-snapshot-1741266669094
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/dependencies.html +2 -2
- package/docs/js/search/search_index.js +2 -2
- package/eui-input-number/eui-input-number.component.d.ts +18 -2
- package/eui-input-number/eui-input-number.component.d.ts.map +1 -1
- package/eui-input-number/eui-number-control.directive.d.ts +1 -1
- package/eui-input-number/eui-number-control.directive.d.ts.map +1 -1
- package/eui-textarea/eui-textarea.component.d.ts.map +1 -1
- package/fesm2022/eui-components-eui-input-number.mjs +118 -35
- package/fesm2022/eui-components-eui-input-number.mjs.map +1 -1
- package/fesm2022/eui-components-eui-textarea.mjs +2 -2
- package/fesm2022/eui-components-eui-textarea.mjs.map +1 -1
- package/package.json +4 -4
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"eui-components-eui-input-number.mjs","sources":["../../eui-input-number/eui-input-number.component.ts","../../eui-input-number/eui-number-control.directive.ts","../../eui-input-number/eui-input-number.module.ts","../../eui-input-number/eui-components-eui-input-number.ts"],"sourcesContent":["import {\n Optional,\n LOCALE_ID,\n Inject,\n Component,\n DoCheck,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Renderer2,\n SimpleChanges,\n Injector,\n numberAttribute,\n PLATFORM_ID,\n booleanAttribute,\n} from '@angular/core';\nimport { LocaleService, LocaleState } from '@eui/core';\nimport { coerceBooleanProperty, coerceNumberProperty, BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport { type CleaveOptions } from 'cleave.js/options';\nimport Cleave from 'cleave.js';\nimport { CleaveEventOnChange } from './models/cleave-event-onchange.model';\nimport { InputDirective } from '@eui/components/shared';\nimport { DOCUMENT, isPlatformBrowser, isPlatformServer } from '@angular/common';\nimport { EuiClearableDirective, EuiLoadingDirective } from '@eui/components/directives';\nimport { NgControl } from '@angular/forms';\n\nexport interface CleaveInstance extends Cleave {\n initSwapHiddenInput?: () => void;\n initNumeralFormatter?: () => void;\n initTimeFormatter?: () => void;\n initDateFormatter?: () => void;\n initPhoneFormatter?: () => void;\n updateCreditCardPropsByValue?: () => void;\n updateValueState?: () => void;\n callOnValueChanged?: () => void;\n onChange?: (event?: Event) => void;\n onCut?: (event?: Event) => void;\n onFocus?: (event?: Event) => void;\n onCopy?: (event?: Event) => void;\n onKeyDown?: (event?: Event) => void;\n onChangeListener?: (event?: Event) => void;\n onKeyDownListener?: (event?: Event) => void;\n onFocusListener?: (event?: Event) => void;\n onCutListener?: (event?: Event) => void;\n onCopyListener?: (event?: Event) => void;\n}\n\n/**\n * Get the decimal separator based on the locale\n *\n * @param locale value of the locale based on ISO 639-1\n */\nfunction getDecimal(locale: string): string {\n return new Intl.NumberFormat(locale).format(1.1).charAt(1);\n}\n\n/**\n * Get the group separator based on the locale\n *\n * @param locale value of the locale based on ISO 639-1\n */\nfunction getGroup(locale: string): string {\n return new Intl.NumberFormat(locale).format(1000).charAt(1);\n}\n\n/**\n * Input number component that allows the user to enter a number. It supports number\n * formatting and validation. It uses Cleave.js to format the number. It depends on\n * the {@link LocaleService} to get the current locale and format the number accordingly.\n *\n * It supports the following attributes:\n * - {@link min}: The minimum number can be entered. Blocks user's input if not in range.\n * - {@link max}: The maximum number can be entered. Blocks user's input if not in range.\n * - {@link leadingZero}: Adds leading zero to a number. Formatting will not work.\n * - {@link isInvalid}: Sets the invalid state of the input element.\n * - {@link fractionDigits}: Determines how many digits to show after the decimal point.\n * - {@link digits}: Determines how many digits to show before the decimal point.\n * - {@link fillFraction}: Fills the decimal part with zeros in case it's less than the fractionDigits.\n * - {@link roundUp}: Rounds a number with more than two decimals UP.\n * - {@link noFormat}: Disables the number formatting. It will be treated as a plain number.\n * - {@link value}: The value of the input element.\n * - {@link placeholder}: The placeholder value of the input element.\n * - {@link euiClearable}: Adds a clear button to the input element.\n * - {@link euiLoading}: Adds a loading spinner to the input element.\n * - {@link readonly}: Disables the input element.\n * - {@link disabled}: Disables the input element.\n * - {@link euiDanger}: Sets the invalid state of the input element.\n * - {@link euiSuccess}: Sets the success state of the input element.\n * - {@link euiWarning}: Sets the warning state of the input element.\n * - {@link euiInfo}: Sets the info state of the input element.\n * - {@link euiPrimary}: Sets the primary state of the input element.\n * - {@link euiSecondary}: Sets the secondary state of the input element.\n *\n * @example\n * ```html\n * <input euiInputNumber\n * min=\"0\"\n * max=\"100\"\n * leadingZero=\"3\"\n * value=\"100.00\"\n * placeholder=\"100.00\" />\n * ```\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'input[euiInputNumber]',\n styleUrls: ['./styles/_index.scss'],\n template: '',\n standalone: true,\n hostDirectives: [\n {\n directive: EuiClearableDirective,\n inputs: ['euiClearable', 'readonly', 'disabled'],\n },\n {\n directive: EuiLoadingDirective,\n inputs: ['euiLoading', 'readonly'],\n },\n ],\n host: {\n '(blur)': 'onTouched()',\n },\n})\nexport class EuiInputNumberComponent extends InputDirective implements OnInit, OnDestroy, DoCheck, OnChanges {\n /**\n * The minimum number can be entered. Blocks user's input if not in range.\n */\n // TODO: transform to signal attribute\n @Input({ transform: numberAttribute }) min!: number;\n /**\n * The maximum number can be entered. Blocks user's input if not in range.\n */\n // TODO: transform to signal attribute\n @Input({ transform: numberAttribute }) max!: number;\n /**\n * Adds leading zero to a number. Formatting will not work.\n * e.g. with leadingZero=3 input number 5 => 005\n */\n // TODO: transform to signal attribute\n @Input({ transform: numberAttribute }) leadingZero = 0;\n @Input()\n public get isInvalid(): boolean {\n return this._isInvalid || null;\n }\n\n public set isInvalid(state: BooleanInput) {\n this.setInvalid(state);\n }\n\n /**\n * CSS classes to be added to the host element.\n */\n @HostBinding('class')\n public get cssClasses(): string {\n return [super.getCssClasses('eui-input-number'), this._isInvalid ? 'eui-input-number--invalid' : ''].join(' ').trim();\n }\n\n /**\n * determines how many digits to show after the decimal point\n */\n // TODO: transform to signal attribute\n @Input()\n get fractionDigits(): number {\n return this._fractionDigits;\n }\n set fractionDigits(value: NumberInput) {\n this._fractionDigits = coerceNumberProperty(value);\n }\n /**\n * determines how many digits to show before the decimal point\n */\n // TODO: transform to signal attribute\n @Input({ transform: numberAttribute }) digits!: number;\n /**\n * fills the decimal part with zeros in case it's less than the fractionDigits\n */\n // TODO: transform to signal attribute\n @Input({ transform: booleanAttribute }) fillFraction: boolean;\n /**\n * rounds a number with more than two decimals UP\n */\n // TODO: transform to signal attribute\n @Input({ transform: numberAttribute }) roundUp!: number;\n protected _isInvalid: boolean;\n /**\n * Disables the number formatting. It will be treated as a plain number.\n * Will do a thousand grouping of number.\n */\n // TODO: transform to signal attribute\n @Input({ transform: booleanAttribute }) noFormat: boolean;\n @HostBinding('attr.type') protected type = 'eui-number';\n /**\n * The value of the input element.\n */\n @Input() value: string;\n public onChangeCallback: <T>(_: T) => void;\n /**\n * holds instance of cleave.js\n */\n cleaveInstance: CleaveInstance;\n\n /**\n * holds instance of cleave options for the Cleave instance\n */\n private options: CleaveOptions;\n private _fractionDigits = 0;\n\n constructor(\n protected _elementRef: ElementRef,\n protected _renderer: Renderer2,\n @Optional() private localeService: LocaleService,\n @Inject(LOCALE_ID) private locale_id: string,\n injector: Injector,\n @Inject(DOCUMENT) private document: Document,\n @Inject(PLATFORM_ID) private platformId: unknown,\n ) {\n super(_elementRef, _renderer, injector);\n\n // set default options\n this.options = {\n numeral: true,\n delimiter: getGroup(locale_id || 'en'),\n numeralDecimalMark: getDecimal(locale_id || 'en'),\n numeralDecimalScale: this.fractionDigits,\n numeralIntegerScale: this.digits,\n };\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n\n this.control = this.injector.get(NgControl, undefined, { optional: true });\n\n // instantiate cleave\n if (!this.control) {\n this.initCleave();\n }\n\n // subscribe to localization service and listen for locale change. De-construction of locale should happen here!\n this.localeService?.getState().subscribe((state: LocaleState) => {\n this.options = this.getCleaveOptsBasedOnLocale(state?.id);\n\n // update the options on the cleave instance\n this.updateOptions(true);\n });\n\n this._renderer.setProperty(this._elementRef.nativeElement, 'rootClassName', 'eui-input-number');\n }\n\n ngDoCheck(): void {\n if (!this.control) {\n this.control = this.injector.get(NgControl, undefined, { optional: true });\n }\n this.isInvalid = this.control ? this.control.invalid && this.control.touched : this._isInvalid;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (Object.hasOwn(changes, 'value')) {\n this._elementRef.nativeElement.value = this.value;\n if (this.cleaveInstance) {\n this.cleaveInstance.setRawValue(this.value);\n }\n }\n if (Object.hasOwn(changes, 'fractionDigits')) {\n this.options = { ...this.options, numeralDecimalScale: this.fractionDigits };\n this.updateOptions();\n }\n if (Object.hasOwn(changes, 'noFormat')) {\n this.options = { ...this.options, numeralThousandsGroupStyle: this.noFormat ? 'none' : 'thousand' };\n this.updateOptions();\n }\n if (Object.hasOwn(changes, 'fillFraction') && this.cleaveInstance) {\n this.applyFractionFill(this.cleaveInstance.getRawValue());\n }\n if (Object.hasOwn(changes, 'digits')) {\n this.options = { ...this.options, numeralIntegerScale: this.digits };\n this.updateOptions();\n }\n if (Object.hasOwn(changes, 'min')) {\n this.min = changes['min'].currentValue;\n if (changes['min'].currentValue >= 0) {\n if (this.cleaveInstance) {\n // take care of the sign symbol\n this.cleaveInstance.setRawValue(Math.abs(Number(this.cleaveInstance.getRawValue())).toString());\n }\n }\n }\n if (Object.hasOwn(changes, 'max')) {\n this.max = changes['max'].currentValue;\n // check if current value is in range\n if (this.cleaveInstance) {\n const number = Number(this.cleaveInstance.getRawValue());\n if (number > this.max) {\n this.cleaveInstance.setRawValue(this.max.toString());\n }\n }\n }\n if (Object.hasOwn(changes, 'roundUp')) {\n if (changes['roundUp'].currentValue > 0) {\n if (this.cleaveInstance) {\n let number = Number.parseFloat(this.cleaveInstance.getRawValue());\n number = this.decimalAdjust(number, this.roundUp * -1);\n this.cleaveInstance.setRawValue(number.toString());\n }\n }\n }\n if(Object.hasOwn(changes, 'placeholder')) {\n // parse number\n const number = this.parseNumber(changes['placeholder'].currentValue?.toString() || undefined);\n // set placeholder in case none is provided\n this.setPlaceholderAttribute(isNaN(number) ? changes['placeholder'].currentValue : number);\n }\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n // destroy cleave instance\n if (this.cleaveInstance) {\n this.cleaveInstance.destroy();\n }\n }\n\n onChange: <T>(_: T) => void = <T>(_: T): void => {\n if (this.control && (_ !== null || _ !== undefined)) {\n // parse number\n // const value = Number(_);\n // run on next MicroTask to avoid NG0100 error TODO: deeper investigation\n // Promise.resolve().then(() => this.control.viewToModelUpdate(value));\n // in case control is FormControl\n // this.control?.control.setValue(isNaN(value) ? null : value, { emitEvent: false, emitModelToViewChange: false });\n }\n };\n onTouched: () => void = (): void => {\n this.control?.control.markAsTouched();\n };\n\n @HostListener('paste', ['$event'])\n onPaste(event: ClipboardEvent): void {\n // get the value from clipboard\n const value = (event.clipboardData || window['clipboardData']).getData('text');\n // in case round UP is enabled\n if (this.roundUp > 0) {\n const div = this.document.createElement('input');\n // create a clone of cleaveInstance\n const cloneInstance: CleaveInstance = new Cleave(div, { ...this.options, numeralDecimalScale: 8 });\n cloneInstance.setRawValue(value.toString());\n let number = Number.parseFloat(cloneInstance.getRawValue());\n number = this.decimalAdjust(number, this.roundUp * -1);\n if (!Number.isNaN(number)) {\n this.cleaveInstance.setRawValue(number.toString());\n // TODO: investigate in the future how can this be avoided\n setTimeout(() => {\n // this.writeValue(number.toString());\n }, 0);\n }\n }\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeyDown(e: KeyboardEvent): void {\n // check if it's a single symbol and not Special like (Ctrl, backspace etc)\n if (e?.key?.length <= 1 && !e.ctrlKey && !e.altKey && !e.metaKey) {\n // stop event propagation if key pressed is not a number or locale character or minus sign\n if (\n Number.isNaN(Number.parseInt(e.key, 10)) &&\n this.isMinusAllowed(e.key) &&\n e.key !== getDecimal(this.localeService?.currentLocale || this.locale_id)\n ) {\n e.stopPropagation();\n e.preventDefault();\n // stop event propagation if key pressed exceeds the min/max value range\n } else if (!Number.isNaN(Number.parseInt(e.key, 10)) && this.isOutSideRange(e)) {\n e.stopPropagation();\n e.preventDefault();\n } else if (this.isOutSideRange(e)) {\n e.stopPropagation();\n e.preventDefault();\n }\n }\n\n // protect decimal symbol deletion in case fillFraction is on\n if (e.key === 'Delete' || e.key === 'Backspace') {\n const element = this._elementRef.nativeElement;\n // position of caret\n const pos = element.selectionStart;\n // get character about to be deleted\n const char = element.value.charAt(pos - 1);\n // in case the char is the decimal symbol prevent deletion and move caret in front\n if (this.fillFraction &&\n char === getDecimal(this.localeService?.currentLocale || this.locale_id)) {\n e.stopPropagation();\n e.preventDefault();\n element.setSelectionRange(pos - 1, pos - 1);\n } else if (this.isOutSideRange(e)) {\n // don't allow insertion that will put number out of range\n e.stopPropagation();\n e.preventDefault();\n }\n }\n }\n\n @HostListener('focusout')\n protected onFocusout(): void {\n // in case fillFraction feature is on and there's no integer part add leading 0\n if (this.fillFraction && this.cleaveInstance.getRawValue().match(/^\\.[0-9]+/g)) {\n this.cleaveInstance.setRawValue('0' + this.cleaveInstance.getRawValue());\n }\n\n // in case round UP is enabled\n if (this.roundUp > 0) {\n const number = Number.parseFloat(this.cleaveInstance.getRawValue());\n this.cleaveInstance.setRawValue(this.decimalAdjust(number, this.roundUp * -1).toString());\n }\n\n // in case min is set and value is less than min reset to the min value\n if (this.min !== null && this.min !== undefined && Number.parseFloat(this.cleaveInstance.getRawValue()) < this.min) {\n this.cleaveInstance.setRawValue(this.min.toString());\n }\n\n // in case max is set and value is greater than max reset to the max value\n if (this.max !== null && this.max !== undefined && Number.parseFloat(this.cleaveInstance.getRawValue()) > this.max) {\n this.cleaveInstance.setRawValue(this.max.toString());\n }\n }\n\n /**\n * @Override setInvalid setInvalidAttribute of InputDirective\n * Sets the invalid state of the input element.\n *\n * @param state\n */\n protected setInvalid(state?: BooleanInput): void {\n // in case it's controlled by NgControl override\n this._isInvalid = this.control ? this.control.invalid && this.control.touched : coerceBooleanProperty(state);\n\n // set BaseDirective Attribute\n this.euiDanger = this._isInvalid;\n }\n\n /**\n * @Override setPlaceholder setPlaceholderAttribute of InputDirective\n * Updates the placeholder value based on current number format and given value.\n * If value passed contains characters it doesn't format placeholder.\n * */\n protected setPlaceholderAttribute(value: string | number): void {\n // if value is a number, format the value based on current number format\n if (typeof value === 'number' && !isNaN(value) && isPlatformBrowser(this.platformId)) {\n const div = this.document.createElement('input');\n // create a clone of cleaveInstance\n const cloneInstance: CleaveInstance = new Cleave(div, this.options);\n // BEWARE: by the time your setRawValue cleave options have changed thus number formatting\n cloneInstance.setRawValue(value.toString());\n // set the value with current format as placeholder\n super.setPlaceholderAttribute(cloneInstance.getFormattedValue());\n } else if (typeof value === 'string') {\n super.setPlaceholderAttribute(value.toString());\n } else if (isNaN(value)) {\n value = this._elementRef.nativeElement.placeholder;\n super.setPlaceholderAttribute(value.toString());\n }\n }\n\n /**\n * instantiate Cleave.js\n */\n private initCleave<T, P>(onChangeCallback?: (obj: T) => P): void {\n if(isPlatformServer(this.platformId)) {\n // in case it's not a browser environment\n return;\n }\n // change the cleave prototype function to intercept onCut callback\n // and allow based on the event bubbling and disabled state\n // TIP: change behavior of onCut to stop in case bubble is canceled\n // TODO: See relevant issue https://github.com/nosir/cleave.js/issues/675\n const _onCut = Cleave.prototype['onCut'];\n Cleave.prototype['onCut'] = function (e: Event): void {\n /* eslint-enable no-invalid-this */\n // Check if the event is composed and stopPropagation hasn't been called\n if (!e.composed && !e.defaultPrevented && !this.element.disabled) {\n _onCut.call(this, e);\n }\n /* eslint-disable no-invalid-this */\n };\n\n // in case options is undefined\n const opts: CleaveOptions = { ...this.options };\n\n // set the onValue change listener to keep the value at readOnly element in sync\n opts.onValueChanged = onChangeCallback || this.onValueChanged.bind(this);\n\n // in case round UP is enabled\n if (this.roundUp > 0) {\n const number = Number.parseFloat(this._elementRef.nativeElement.value);\n this._elementRef.nativeElement.value = this.decimalAdjust(number, this.roundUp * -1);\n }\n\n // create the Cleave instance with the new or updated options\n this.cleaveInstance = new Cleave(this._elementRef.nativeElement, opts);\n }\n\n /**\n * Updates the cleave options by destroying the current instance and creating another one while keeping the previous\n * value.\n */\n private updateOptions(localeUpdated = false): void {\n if (this.cleaveInstance) {\n // the value before destroying cleave instance\n const previousValue = this.cleaveInstance.getRawValue();\n\n // update the Cleave instance with the new or updated options\n this.cleaveInstance.properties = {\n ...this.cleaveInstance.properties,\n ...this.options,\n initValue: previousValue,\n };\n\n // init number formatter with updated options\n this.cleaveInstance.initNumeralFormatter();\n\n // In case previous settings where numeralDecimalMark='.' with value 1000.99, and they changed to\n // numeralDecimalMark=','; set initValue to 1000.99 or even 1000,99 will not be reflected and cleave will\n // remove the decimal part. Set of the value after initialization causes reformat of number and works.\n this.cleaveInstance.setRawValue(previousValue);\n\n // parse number\n const number = this.parseNumber(this._elementRef.nativeElement.placeholder || undefined, localeUpdated);\n // set placeholder in case none is provided\n this.setPlaceholderAttribute(number);\n }\n }\n\n /**\n * Callback function of the Cleave instance that is invoked when value is changed.\n *\n * @param event type of CleaveEventOnChange\n */\n private onValueChanged(event: CleaveEventOnChange): void {\n const { target } = event;\n\n if (this.fillFraction) {\n this.applyFractionFill(target.rawValue);\n }\n this.onChange(Number.parseFloat(target.rawValue));\n // fill leading zero\n if (this.leadingZero) {\n const size = this.leadingZero > this.digits && this.digits > 0 ? this.digits : this.leadingZero;\n this._elementRef.nativeElement.value = this.padZero(event.target.rawValue, size);\n }\n }\n\n /**\n * responsible to extract all locale information needed to build CleaveOptions related to number format.\n *\n * @param id The id of the locale\n */\n private getCleaveOptsBasedOnLocale(id: string): CleaveOptions {\n if (!id || id === '') {\n throw new Error('Locale id cannot be empty or undefined');\n }\n const opts: CleaveOptions = {\n numeral: true,\n delimiter: getGroup(id),\n numeralDecimalMark: getDecimal(id),\n numeralDecimalScale: this.fractionDigits,\n numeralIntegerScale: this.digits,\n numeralThousandsGroupStyle: this.noFormat ? 'none' : 'thousand', // TODO: implement based on locale\n };\n\n return { ...this.options, ...opts };\n }\n\n /**\n * Applies the fill of decimal part with zeros in case decimal part of given number has\n * size less than the max fraction digits.\n *\n * @param number\n * @param cleaveInstance\n * @private\n */\n private applyFractionFill(number: string, cleaveInstance: CleaveInstance = this.cleaveInstance): void {\n // if fill fraction is enabled and there's cleave instance\n if (this.fillFraction) {\n if (this.cleaveInstance) {\n number = number?.toString();\n if (number === '' || !number) {\n return;\n }\n const hasDecimal = number.split('.').length > 1;\n // in case there's already decimal point in number\n if (hasDecimal) {\n const decimalSize = number.split('.')[1].length;\n // if size of decimal part of number is less than the max fraction digits\n if (decimalSize < this._fractionDigits) {\n number = number + new Array(this._fractionDigits - decimalSize).fill(0).join('');\n const pos = this._elementRef.nativeElement.selectionStart;\n cleaveInstance.setRawValue(number);\n this._elementRef.nativeElement.setSelectionRange(pos, pos);\n }\n // in case there's not, force it by filling it as much zero as the fraction digits\n } else if (this.fractionDigits > 0) {\n number = `${number}.${new Array(this._fractionDigits).fill(0).join('')}`;\n const pos = this._elementRef.nativeElement.selectionStart;\n cleaveInstance.setRawValue(number);\n this._elementRef.nativeElement.setSelectionRange(pos, pos);\n }\n }\n }\n }\n\n /**\n * Parses a given formatted number and returns it as a number.\n *\n * @param value The formatted number you want to parse e.g. 111,888.22\n * @param userPrevLocaleState Use previous locale state to parse the value. By default, is false\n * @private\n */\n private parseNumber(value: string, userPrevLocaleState = false): number {\n // locale state\n const locale = userPrevLocaleState ? this.localeService?.previousLocale : this.localeService?.currentLocale || this.locale_id || 'en';\n // get decimal and group symbols\n const decimalSymbol = getDecimal(locale);\n const groupSymbol = getGroup(locale);\n // replace symbols to parse number\n const parsedNumber = value?.split(groupSymbol).join('').split(decimalSymbol).join('.');\n return Number.parseFloat(parsedNumber);\n }\n\n /**\n * Pad leading zero to the number\n *\n * @param num The number to add leading zero to\n * @param size Number of number's leading zero\n * @private\n */\n private padZero(num: string, size: number): string {\n num = num.toString();\n // get integer and decimal part\n // eslint-disable-next-line prefer-const\n let [integer, decimal] = num.split('.');\n while (integer.length < size) {\n integer = '0' + integer;\n }\n return decimal ? `${integer}.${decimal}` : integer;\n }\n\n /**\n * checks whether the min symbol is allowed. It is allowed when minus symbol\n * provided and min input is undefined or min provided and is negative.\n *\n * @param key The key string coming from an event\n */\n private isMinusAllowed(key: string): boolean {\n return !this.min || this.min < 0 ? key !== '-' : true;\n }\n\n /**\n * check whether the key entered is inside the min and\n * max range. Returns true if it's out of range.\n *\n * @param e A keyboard event\n */\n private isOutSideRange(e: KeyboardEvent): boolean {\n if (!this.cleaveInstance) {\n return false;\n }\n // get caret position\n const pos = e.target['selectionStart'];\n // get caret position (in case there's text selected)\n const endPos = e.target['selectionEnd'];\n // get current value (formatted)\n let value = e.target['value'];\n // remove key from value\n if (e.key === 'Delete' || e.key === 'Backspace') {\n // check if there's selection of text to be removed\n if (pos !== endPos) {\n value = e.target['value'].substring(0, pos) + e.target['value'].substring(endPos, e.target['value'].length);\n } else {\n value = e.target['value'].substring(0, pos - 1) + e.target['value'].substring(endPos, e.target['value'].length);\n }\n } else {\n // add key to the value\n value = [value.slice(0, pos), e.key, value.slice(endPos)].join('');\n }\n\n // create a Cleave instance to extract the number from formatted value\n const cleave: CleaveInstance = new Cleave(this.document.createElement('input'), { ...this.options });\n cleave.setRawValue(value);\n const number = Number(cleave.getRawValue());\n // destroy cleave instance\n cleave.destroy();\n return !isNaN(number) &&\n this.min >= 0 ? (this.isDefined(this.max) && this.max < number) : (this.min > number || this.max < number) &&\n this.max <= 0 ? (this.isDefined(this.min) && this.min > number) : (this.min > number || this.max < number);\n }\n\n /**\n * Decimal adjustment of a number.\n *\n * @param value The number.\n * @param exp The exponent (the 10 logarithm of the adjustment base).\n * @returns The adjusted value.\n */\n private decimalAdjust(value: number, exp: number): number {\n // If the exp is undefined or zero...\n if (typeof exp === 'undefined' || +exp === 0) {\n return Math.round(value);\n }\n value = +value;\n exp = +exp;\n // If the value is not a number or the exp is not an integer...\n if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {\n return NaN;\n }\n // Shift\n let cleaned = value.toString().split('e');\n value = Math.round(+(cleaned[0] + 'e' + (cleaned[1] ? +cleaned[1] - exp : -exp)));\n // Shift back\n cleaned = value.toString().split('e');\n return +(cleaned[0] + 'e' + (cleaned[1] ? +cleaned[1] + exp : exp));\n }\n\n /**\n * Checks whether a value is defined or not\n *\n * @param value\n */\n private isDefined(value: number): boolean {\n return value !== undefined && value !== null;\n }\n}\n","import { Directive, ElementRef, forwardRef, Inject, OnInit, Optional, PLATFORM_ID } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CleaveInstance, EuiInputNumberComponent } from './eui-input-number.component';\nimport Cleave from 'cleave.js';\nimport { DOCUMENT, isPlatformServer } from '@angular/common';\n\n/**\n * @description\n * Directive for the {@link EuiInputNumberComponent}. This directive is used to\n * handle the value changes of the input element and update the value of the\n * directive and the form control. It also implements the ControlValueAccessor\n * interface to allow the directive to be used with reactive forms.\n *\n * @example\n * ```html\n * <input euiInputNumber formControlName=\"number\" />\n * ```\n */\n@Directive({\n selector: 'input[euiInputNumber][formControl],input[euiInputNumber][formControlName],input[euiInputNumber][ngModel]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EuiInputNumberDirective),\n multi: true,\n },\n ],\n standalone: true,\n})\nexport class EuiInputNumberDirective implements ControlValueAccessor, OnInit {\n /**\n * holds a copy of the value\n */\n private value: number;\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private onChange: (t: any) => void;\n\n constructor(\n private elementRef: ElementRef,\n @Optional() private euiNumberComponent: EuiInputNumberComponent,\n @Inject(DOCUMENT) private document: Document,\n @Inject(PLATFORM_ID) private platformId: unknown,\n ) {}\n\n ngOnInit(): void {\n this.euiNumberComponent['initCleave'](this.valueChanges.bind(this));\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n writeValue(obj: any): void {\n if (isPlatformServer(this.platformId)) {\n return;\n }\n const cleave: CleaveInstance = new Cleave(this.document.createElement('input'), { ...this.euiNumberComponent['options'] });\n cleave.setRawValue(obj);\n if (this.euiNumberComponent.fillFraction && obj !== '' && obj) {\n this.euiNumberComponent['applyFractionFill'](obj, cleave);\n }\n let valueOfElement: string;\n // fill leading zero\n if (this.euiNumberComponent.leadingZero) {\n const size =\n this.euiNumberComponent.leadingZero > this.euiNumberComponent.digits && this.euiNumberComponent.digits > 0\n ? this.euiNumberComponent.digits\n : this.euiNumberComponent.leadingZero;\n valueOfElement = this.euiNumberComponent['padZero'](cleave.getFormattedValue(), size);\n } else {\n valueOfElement = cleave.getFormattedValue();\n }\n this.elementRef.nativeElement.value = valueOfElement;\n this.value = Number.parseFloat(cleave.getRawValue());\n cleave.destroy();\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n registerOnChange(fn: any): void {\n this.onChange = (t): void => {\n this.value = t;\n fn(t);\n };\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /**\n * Set the disabled state of the input element.\n *\n * @param isDisabled\n */\n setDisabledState(isDisabled: boolean): void {\n this.euiNumberComponent.disabled = isDisabled;\n }\n\n private onTouched(): void {\n // this.euiNumberComponent.isInvalid = this.control.invalid;\n }\n\n /**\n * Handle the value changes of the input element and update the value of the\n * directive and the form control.\n *\n * @param event\n */\n private valueChanges(event): void {\n const { target } = event;\n\n this.euiNumberComponent['onValueChanged'](event);\n const numberCoerce = Number.parseFloat(target.rawValue);\n if (this.value !== numberCoerce && this.onChange) {\n this.onChange(isNaN(numberCoerce) ? null : numberCoerce);\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EuiInputNumberComponent } from './eui-input-number.component';\nimport { EuiInputNumberDirective } from './eui-number-control.directive';\n\n/**\n * @description\n * Module for the {@link EuiInputNumberComponent} and {@link EuiInputNumberDirective}.\n *\n * @example\n * ```typescript\n * import { EuiInputNumberModule } from '@eui/components/eui-input-number';\n *\n * @NgModule({\n * imports: [EuiInputNumberModule]\n * })\n * export class AppModule {}\n * ```\n * @deprecated Use {@link `EuiInputNumberComponent`} and or {@link `EuiInputNumberDirective`} instead.\n */\n@NgModule({\n imports: [CommonModule, EuiInputNumberComponent, EuiInputNumberDirective],\n exports: [EuiInputNumberComponent, EuiInputNumberDirective],\n})\nexport class EuiInputNumberModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.EuiInputNumberComponent"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"eui-components-eui-input-number.mjs","sources":["../../eui-input-number/eui-input-number.component.ts","../../eui-input-number/eui-number-control.directive.ts","../../eui-input-number/eui-input-number.module.ts","../../eui-input-number/eui-components-eui-input-number.ts"],"sourcesContent":["import {\n booleanAttribute,\n Component,\n DoCheck,\n ElementRef,\n HostBinding,\n HostListener,\n Inject,\n Injector,\n Input,\n LOCALE_ID,\n numberAttribute,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n PLATFORM_ID,\n Renderer2,\n SimpleChanges,\n} from '@angular/core';\nimport { LocaleService, LocaleState } from '@eui/core';\nimport { BooleanInput, coerceBooleanProperty, coerceNumberProperty, NumberInput } from '@angular/cdk/coercion';\nimport { type CleaveOptions } from 'cleave.js/options';\nimport Cleave from 'cleave.js';\nimport { CleaveEventOnChange } from './models/cleave-event-onchange.model';\nimport { InputDirective } from '@eui/components/shared';\nimport { DOCUMENT, isPlatformBrowser, isPlatformServer } from '@angular/common';\nimport { EuiClearableDirective, EuiLoadingDirective } from '@eui/components/directives';\nimport { NgControl } from '@angular/forms';\n\nexport interface CleaveInstance extends Cleave {\n initSwapHiddenInput?: () => void;\n initNumeralFormatter?: () => void;\n initTimeFormatter?: () => void;\n initDateFormatter?: () => void;\n initPhoneFormatter?: () => void;\n updateCreditCardPropsByValue?: () => void;\n updateValueState?: () => void;\n callOnValueChanged?: () => void;\n onChange?: (event?: Event) => void;\n onCut?: (event?: Event) => void;\n onFocus?: (event?: Event) => void;\n onCopy?: (event?: Event) => void;\n onKeyDown?: (event?: Event) => void;\n onChangeListener?: (event?: Event) => void;\n onKeyDownListener?: (event?: Event) => void;\n onFocusListener?: (event?: Event) => void;\n onCutListener?: (event?: Event) => void;\n onCopyListener?: (event?: Event) => void;\n}\n\n/**\n * Get the decimal separator based on the locale\n *\n * @param locale value of the locale based on ISO 639-1\n */\nfunction getDecimal(locale: string): string {\n return new Intl.NumberFormat(locale).format(1.1).charAt(1);\n}\n\n/**\n * Get the group separator based on the locale\n *\n * @param locale value of the locale based on ISO 639-1\n */\nfunction getGroup(locale: string): string {\n return new Intl.NumberFormat(locale).format(1000).charAt(1);\n}\n\n/**\n * Input number component that allows the user to enter a number. It supports number\n * formatting and validation. It uses Cleave.js to format the number. It depends on\n * the {@link LocaleService} to get the current locale and format the number accordingly.\n *\n * It supports the following attributes:\n * - {@link min}: The minimum number can be entered. Blocks user's input if not in range.\n * - {@link max}: The maximum number can be entered. Blocks user's input if not in range.\n * - {@link leadingZero}: Adds leading zero to a number. Formatting will not work.\n * - {@link isInvalid}: Sets the invalid state of the input element.\n * - {@link fractionDigits}: Determines how many digits to show after the decimal point.\n * - {@link digits}: Determines how many digits to show before the decimal point.\n * - {@link fillFraction}: Fills the decimal part with zeros in case it's less than the fractionDigits.\n * - {@link roundUp}: Rounds a number with more than two decimals UP.\n * - {@link noFormat}: Disables the number formatting. It will be treated as a plain number.\n * - {@link value}: The value of the input element.\n * - {@link placeholder}: The placeholder value of the input element.\n * - {@link euiClearable}: Adds a clear button to the input element.\n * - {@link euiLoading}: Adds a loading spinner to the input element.\n * - {@link readonly}: Disables the input element.\n * - {@link disabled}: Disables the input element.\n * - {@link euiDanger}: Sets the invalid state of the input element.\n * - {@link euiSuccess}: Sets the success state of the input element.\n * - {@link euiWarning}: Sets the warning state of the input element.\n * - {@link euiInfo}: Sets the info state of the input element.\n * - {@link euiPrimary}: Sets the primary state of the input element.\n * - {@link euiSecondary}: Sets the secondary state of the input element.\n *\n * @example\n * ```html\n * <input euiInputNumber\n * min=\"0\"\n * max=\"100\"\n * leadingZero=\"3\"\n * value=\"100.00\"\n * placeholder=\"100.00\" />\n * ```\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'input[euiInputNumber]',\n styleUrls: ['./styles/_index.scss'],\n template: '',\n standalone: true,\n hostDirectives: [\n {\n directive: EuiClearableDirective,\n inputs: ['euiClearable', 'readonly', 'disabled'],\n },\n {\n directive: EuiLoadingDirective,\n inputs: ['euiLoading', 'readonly'],\n },\n ],\n host: {\n '(blur)': 'onTouched()',\n },\n})\nexport class EuiInputNumberComponent extends InputDirective implements OnInit, OnDestroy, DoCheck, OnChanges {\n /**\n * The minimum number can be entered. Blocks user's input if not in range.\n */\n // TODO: transform to signal attribute\n @Input({ transform: numberAttribute }) min!: number;\n /**\n * The maximum number can be entered. Blocks user's input if not in range.\n */\n // TODO: transform to signal attribute\n @Input({ transform: numberAttribute }) max!: number;\n /**\n * Adds leading zero to a number. Formatting will not work.\n * e.g. with leadingZero=3 input number 5 => 005\n */\n // TODO: transform to signal attribute\n @Input({ transform: numberAttribute }) leadingZero = 0;\n @Input()\n public get isInvalid(): boolean {\n return this._isInvalid || null;\n }\n\n public set isInvalid(state: BooleanInput) {\n this.setInvalid(state);\n }\n\n /**\n * CSS classes to be added to the host element.\n */\n @HostBinding('class')\n public get cssClasses(): string {\n return [super.getCssClasses('eui-input-number'), this._isInvalid ? 'eui-input-number--invalid' : ''].join(' ').trim();\n }\n\n /**\n * determines how many digits to show after the decimal point\n */\n // TODO: transform to signal attribute\n @Input()\n get fractionDigits(): number {\n return this._fractionDigits;\n }\n set fractionDigits(value: NumberInput) {\n this._fractionDigits = coerceNumberProperty(value);\n }\n /**\n * determines how many digits to show before the decimal point\n */\n // TODO: transform to signal attribute\n @Input({ transform: numberAttribute }) digits!: number;\n /**\n * fills the decimal part with zeros in case it's less than the fractionDigits\n */\n // TODO: transform to signal attribute\n @Input({ transform: booleanAttribute }) fillFraction: boolean;\n /**\n * rounds a number with more than two decimals UP\n */\n // TODO: transform to signal attribute\n @Input({ transform: numberAttribute }) roundUp!: number;\n protected _isInvalid: boolean;\n /**\n * Disables the number formatting. It will be treated as a plain number.\n * Will do a thousand grouping of number.\n */\n // TODO: transform to signal attribute\n @Input({ transform: booleanAttribute }) noFormat: boolean;\n @HostBinding('attr.type') protected type = 'eui-number';\n /**\n * The value of the input element.\n */\n @Input() value: string;\n public onChangeCallback: <T>(_: T) => void;\n /**\n * holds instance of cleave.js\n */\n cleaveInstance: CleaveInstance;\n\n /**\n * holds instance of cleave options for the Cleave instance\n */\n private options: CleaveOptions;\n private _fractionDigits = 0;\n\n constructor(\n protected _elementRef: ElementRef,\n protected _renderer: Renderer2,\n @Optional() private localeService: LocaleService,\n @Inject(LOCALE_ID) private locale_id: string,\n injector: Injector,\n @Inject(DOCUMENT) private document: Document,\n @Inject(PLATFORM_ID) private platformId: unknown,\n ) {\n super(_elementRef, _renderer, injector);\n\n // set default options\n this.options = {\n numeral: true,\n delimiter: getGroup(locale_id || 'en'),\n numeralDecimalMark: getDecimal(locale_id || 'en'),\n numeralDecimalScale: this.fractionDigits,\n numeralIntegerScale: this.digits,\n };\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n\n this.control = this.injector.get(NgControl, undefined, { optional: true });\n\n // instantiate cleave\n if (!this.control) {\n this.initCleave();\n }\n\n // subscribe to localization service and listen for locale change. De-construction of locale should happen here!\n this.localeService?.getState().subscribe((state: LocaleState) => {\n this.options = this.getCleaveOptsBasedOnLocale(state?.id);\n\n // update the options on the cleave instance\n this.updateOptions(true);\n });\n\n this._renderer.setProperty(this._elementRef.nativeElement, 'rootClassName', 'eui-input-number');\n }\n\n ngDoCheck(): void {\n if (!this.control) {\n this.control = this.injector.get(NgControl, undefined, { optional: true });\n }\n this.isInvalid = this.control ? this.control.invalid && this.control.touched : this._isInvalid;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (Object.hasOwn(changes, 'value')) {\n this._elementRef.nativeElement.value = this.value;\n if (this.cleaveInstance) {\n this.cleaveInstance.setRawValue(this.value);\n }\n }\n if (Object.hasOwn(changes, 'fractionDigits')) {\n this.options = { ...this.options, numeralDecimalScale: this.fractionDigits };\n this.updateOptions();\n }\n if (Object.hasOwn(changes, 'noFormat')) {\n this.options = { ...this.options, numeralThousandsGroupStyle: this.noFormat ? 'none' : 'thousand' };\n this.updateOptions();\n }\n if (Object.hasOwn(changes, 'fillFraction') && this.cleaveInstance) {\n this.applyFractionFill(this.cleaveInstance.getRawValue());\n }\n if (Object.hasOwn(changes, 'digits')) {\n this.options = { ...this.options, numeralIntegerScale: this.digits };\n this.updateOptions();\n }\n if (Object.hasOwn(changes, 'min')) {\n this.min = changes['min'].currentValue;\n if (changes['min'].currentValue >= 0) {\n if (this.cleaveInstance) {\n // take care of the sign symbol\n this.cleaveInstance.setRawValue(Math.abs(Number(this.cleaveInstance.getRawValue())).toString());\n }\n }\n }\n if (Object.hasOwn(changes, 'max')) {\n this.max = changes['max'].currentValue;\n // check if current value is in range\n if (this.cleaveInstance) {\n const number = Number(this.cleaveInstance.getRawValue());\n if (number > this.max) {\n this.cleaveInstance.setRawValue(this.max.toString());\n }\n }\n }\n if (Object.hasOwn(changes, 'roundUp')) {\n if (changes['roundUp'].currentValue > 0) {\n if (this.cleaveInstance) {\n let number = this.parseNumber(this.cleaveInstance.getRawValue(), false, false);\n number = this.decimalAdjust(number, this.roundUp);\n this.cleaveInstance.setRawValue(number.toString());\n }\n }\n }\n if (Object.hasOwn(changes, 'placeholder')) {\n // parse number\n const number = this.parseNumber(changes['placeholder'].currentValue?.toString() || undefined);\n // set placeholder in case none is provided\n this.setPlaceholderAttribute(!this.isItaNumber(number.toString()) ? changes['placeholder'].currentValue : number);\n }\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n // destroy cleave instance\n if (this.cleaveInstance) {\n this.cleaveInstance.destroy();\n }\n }\n\n onChange: <T>(_: T) => void = <T>(_: T): void => {\n if (this.control && (_ !== null || _ !== undefined)) {\n // parse number\n // const value = Number(_);\n // run on next MicroTask to avoid NG0100 error TODO: deeper investigation\n // Promise.resolve().then(() => this.control.viewToModelUpdate(value));\n // in case control is FormControl\n // this.control?.control.setValue(isNaN(value) ? null : value, { emitEvent: false, emitModelToViewChange: false });\n }\n };\n onTouched: () => void = (): void => {\n this.control?.control.markAsTouched();\n };\n\n @HostListener('paste', ['$event'])\n onPaste(event: ClipboardEvent): void {\n // get the value from clipboard\n const value = (event.clipboardData || window['clipboardData']).getData('text');\n // in case round UP is enabled\n if (this.roundUp > 0) {\n const div = this.document.createElement('input');\n // create a clone of cleaveInstance\n const cloneInstance: CleaveInstance = new Cleave(div, { ...this.options, numeralDecimalScale: 8 });\n cloneInstance.setRawValue(value.toString());\n let number = this.parseNumber(cloneInstance.getRawValue(), false, false);\n number = this.decimalAdjust(number, this.roundUp);\n if (this.isItaNumber(number.toString())) {\n // TODO: investigate in the future how can this be avoided\n setTimeout(() => {\n this.cleaveInstance.setRawValue(number.toString());\n // this.writeValue(number.toString());\n }, 0);\n }\n }\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeyDown(e: KeyboardEvent): void {\n // check if it's a single symbol and not Special like (Ctrl, backspace etc.)\n if (e?.key?.length <= 1 && !e.ctrlKey && !e.altKey && !e.metaKey) {\n // stop event propagation if key pressed is not a number or locale character or minus sign\n if (\n Number.isNaN(Number.parseInt(e.key, 10)) &&\n this.isMinusAllowed(e.key) &&\n e.key !== getDecimal(this.localeService?.currentLocale || this.locale_id)\n ) {\n e.stopPropagation();\n e.preventDefault();\n // stop event propagation if key pressed exceeds the min/max value range\n } else if (!Number.isNaN(Number.parseInt(e.key, 10)) && this.isOutSideRange(e)) {\n e.stopPropagation();\n e.preventDefault();\n } else if (this.isOutSideRange(e)) {\n e.stopPropagation();\n e.preventDefault();\n }\n }\n\n // protect decimal symbol deletion in case fillFraction is on\n if (e.key === 'Delete' || e.key === 'Backspace') {\n const element = this._elementRef.nativeElement;\n // position of caret\n const pos = element.selectionStart;\n // get character about to be deleted\n const char = element.value.charAt(pos - 1);\n // in case the char is the decimal symbol prevent deletion and move caret in front\n if (this.fillFraction &&\n char === getDecimal(this.localeService?.currentLocale || this.locale_id)) {\n e.stopPropagation();\n e.preventDefault();\n element.setSelectionRange(pos - 1, pos - 1);\n } else if (this.isOutSideRange(e)) {\n // don't allow insertion that will put number out of range\n e.stopPropagation();\n e.preventDefault();\n }\n }\n }\n\n @HostListener('focusout')\n protected onFocusout(): void {\n // in case fillFraction feature is on and there's no integer part add leading 0\n if (this.fillFraction && this.cleaveInstance.getRawValue().match(/^\\.[0-9]+/g)) {\n this.cleaveInstance.setRawValue('0' + this.cleaveInstance.getRawValue());\n }\n\n // in case round UP is enabled\n if (this.roundUp > 0) {\n const number = this.parseNumber(this.cleaveInstance.getRawValue(), false, false);\n this.cleaveInstance.setRawValue(this.decimalAdjust(number, this.roundUp).toString());\n }\n\n // in case min is set and value is less than min reset to the min value\n if (this.min !== null && this.min !== undefined && Number.parseFloat(this.cleaveInstance.getRawValue()) < this.min) {\n this.cleaveInstance.setRawValue(this.min.toString());\n }\n\n // in case max is set and value is greater than max reset to the max value\n if (this.max !== null && this.max !== undefined && Number.parseFloat(this.cleaveInstance.getRawValue()) > this.max) {\n this.cleaveInstance.setRawValue(this.max.toString());\n }\n }\n\n /**\n * @Override setInvalid setInvalidAttribute of InputDirective\n * Sets the invalid state of the input element.\n *\n * @param state\n */\n protected setInvalid(state?: BooleanInput): void {\n // in case it's controlled by NgControl override\n this._isInvalid = this.control ? this.control.invalid && this.control.touched : coerceBooleanProperty(state);\n\n // set BaseDirective Attribute\n this.euiDanger = this._isInvalid;\n }\n\n /**\n * @Override setPlaceholder setPlaceholderAttribute of InputDirective\n * Updates the placeholder value based on current number format and given value.\n * If value passed contains characters it doesn't format placeholder.\n * */\n protected setPlaceholderAttribute(value: string | number): void {\n // if value is a number, format the value based on current number format\n if (typeof value === 'number' && !isNaN(value) && isPlatformBrowser(this.platformId)) {\n const div = this.document.createElement('input');\n // create a clone of cleaveInstance\n const cloneInstance: CleaveInstance = new Cleave(div, this.options);\n // BEWARE: by the time your setRawValue cleave options have changed thus number formatting\n cloneInstance.setRawValue(value.toString());\n // set the value with current format as placeholder\n super.setPlaceholderAttribute(cloneInstance.getFormattedValue());\n } else if (typeof value === 'string') {\n super.setPlaceholderAttribute(value.toString());\n } else if (isNaN(value)) {\n value = this._elementRef.nativeElement.placeholder;\n super.setPlaceholderAttribute(value.toString());\n }\n }\n\n /**\n * instantiate Cleave.js\n */\n private initCleave<T, P>(onChangeCallback?: (obj: T) => P): void {\n if(isPlatformServer(this.platformId)) {\n // in case it's not a browser environment\n return;\n }\n // change the cleave prototype function to intercept onCut callback\n // and allow based on the event bubbling and disabled state\n // TIP: change behavior of onCut to stop in case bubble is canceled\n // TODO: See relevant issue https://github.com/nosir/cleave.js/issues/675\n const _onCut = Cleave.prototype['onCut'];\n Cleave.prototype['onCut'] = function (e: Event): void {\n /* eslint-enable no-invalid-this */\n // Check if the event is composed and stopPropagation hasn't been called\n if (!e.composed && !e.defaultPrevented && !this.element.disabled) {\n _onCut.call(this, e);\n }\n /* eslint-disable no-invalid-this */\n };\n\n // in case options is undefined\n const opts: CleaveOptions = { ...this.options };\n\n // set the onValue change listener to keep the value at readOnly element in sync\n opts.onValueChanged = onChangeCallback || this.onValueChanged.bind(this);\n\n // in case round UP is enabled\n if (this.roundUp > 0) {\n const number = this.parseNumber(this._elementRef.nativeElement.value);\n this._elementRef.nativeElement.value = this.decimalAdjust(number, this.roundUp);\n }\n\n // create the Cleave instance with the new or updated options\n this.cleaveInstance = new Cleave(this._elementRef.nativeElement, opts);\n }\n\n /**\n * Updates the cleave options by destroying the current instance and creating another one while keeping the previous\n * value.\n */\n private updateOptions(localeUpdated = false): void {\n if (this.cleaveInstance) {\n // the value before destroying cleave instance\n const previousValue = this.cleaveInstance.getRawValue();\n\n // update the Cleave instance with the new or updated options\n this.cleaveInstance.properties = {\n ...this.cleaveInstance.properties,\n ...this.options,\n initValue: previousValue,\n };\n\n // init number formatter with updated options\n this.cleaveInstance.initNumeralFormatter();\n\n // In case previous settings where numeralDecimalMark='.' with value 1000.99, and they changed to\n // numeralDecimalMark=','; set initValue to 1000.99 or even 1000,99 will not be reflected and cleave will\n // remove the decimal part. Set of the value after initialization causes reformat of number and works.\n this.cleaveInstance.setRawValue(previousValue);\n\n // parse number\n const number = this.parseNumber(this._elementRef.nativeElement.placeholder || undefined, localeUpdated);\n // set placeholder in case none is provided\n this.setPlaceholderAttribute(number);\n }\n }\n\n /**\n * Callback function of the Cleave instance that is invoked when value is changed.\n *\n * @param event type of CleaveEventOnChange\n */\n private onValueChanged(event: CleaveEventOnChange): void {\n const { target } = event;\n\n if (this.fillFraction) {\n this.applyFractionFill(target.rawValue);\n }\n this.onChange(this.parseNumber(target.rawValue, false, false));\n // fill leading zero\n if (this.leadingZero) {\n const size = this.leadingZero > this.digits && this.digits > 0 ? this.digits : this.leadingZero;\n this._elementRef.nativeElement.value = this.padZero(event.target.rawValue, size);\n }\n }\n\n /**\n * responsible to extract all locale information needed to build CleaveOptions related to number format.\n *\n * @param id The id of the locale\n */\n private getCleaveOptsBasedOnLocale(id: string): CleaveOptions {\n if (!id || id === '') {\n throw new Error('Locale id cannot be empty or undefined');\n }\n const opts: CleaveOptions = {\n numeral: true,\n delimiter: getGroup(id),\n numeralDecimalMark: getDecimal(id),\n numeralDecimalScale: this.fractionDigits,\n numeralIntegerScale: this.digits,\n numeralThousandsGroupStyle: this.noFormat ? 'none' : 'thousand', // TODO: implement based on locale\n };\n\n return { ...this.options, ...opts };\n }\n\n /**\n * Applies the fill of decimal part with zeros in case decimal part of given number has\n * size less than the max fraction digits.\n *\n * @param number\n * @param cleaveInstance\n * @private\n */\n private applyFractionFill(number: string, cleaveInstance: CleaveInstance = this.cleaveInstance): void {\n // if fill fraction is enabled and there's cleave instance\n if (this.fillFraction) {\n if (this.cleaveInstance) {\n number = number?.toString();\n if (number === '' || !number) {\n return;\n }\n const hasDecimal = number.split('.').length > 1;\n // in case there's already decimal point in number\n if (hasDecimal) {\n const decimalSize = number.split('.')[1].length;\n // if size of decimal part of number is less than the max fraction digits\n if (decimalSize < this._fractionDigits) {\n number = number + new Array(this._fractionDigits - decimalSize).fill(0).join('');\n const pos = this._elementRef.nativeElement.selectionStart;\n cleaveInstance.setRawValue(number);\n this._elementRef.nativeElement.setSelectionRange(pos, pos);\n }\n // in case there's not, force it by filling it as much zero as the fraction digits\n } else if (this.fractionDigits > 0) {\n number = `${number}.${new Array(this._fractionDigits).fill(0).join('')}`;\n const pos = this._elementRef.nativeElement.selectionStart;\n cleaveInstance.setRawValue(number);\n this._elementRef.nativeElement.setSelectionRange(pos, pos);\n }\n }\n }\n }\n\n /**\n * Parses a given formatted number and returns it as a number.\n *\n * @param value The formatted number you want to parse e.g. 111,888.22\n * @param userPrevLocaleState Use previous locale state to parse the value. By default, is false\n * @param replaceSymbol Replace the decimal symbol with a dot. By default, is false\n * @private\n */\n private parseNumber(value: string, userPrevLocaleState = false, replaceSymbol = true): number | string {\n // locale state\n const locale = userPrevLocaleState ? this.localeService?.previousLocale : this.localeService?.currentLocale || this.locale_id || 'en';\n // get decimal and group symbols\n const decimalSymbol = getDecimal(locale);\n const groupSymbol = getGroup(locale);\n // replace symbols to parse number\n const parsedNumber = value?.split(groupSymbol).join('').split(decimalSymbol).join('.');\n return this.parseBigNumber(replaceSymbol ? parsedNumber : value);\n }\n\n /**\n * Pad leading zero to the number\n *\n * @param num The number to add leading zero to\n * @param size Number of number's leading zero\n * @private\n */\n private padZero(num: string, size: number): string {\n num = num.toString();\n // get integer and decimal part\n // eslint-disable-next-line prefer-const\n let [integer, decimal] = num.split('.');\n while (integer.length < size) {\n integer = '0' + integer;\n }\n return decimal ? `${integer}.${decimal}` : integer;\n }\n\n /**\n * checks whether the min symbol is allowed. It is allowed when minus symbol\n * provided and min input is undefined or min provided and is negative.\n *\n * @param key The key string coming from an event\n */\n private isMinusAllowed(key: string): boolean {\n return !this.min || this.min < 0 ? key !== '-' : true;\n }\n\n /**\n * check whether the key entered is inside the min and\n * max range. Returns true if it's out of range.\n *\n * @param e A keyboard event\n */\n private isOutSideRange(e: KeyboardEvent): boolean {\n if (!this.cleaveInstance) {\n return false;\n }\n // get caret position\n const pos = e.target['selectionStart'];\n // get caret position (in case there's text selected)\n const endPos = e.target['selectionEnd'];\n // get current value (formatted)\n let value = e.target['value'];\n // remove key from value\n if (e.key === 'Delete' || e.key === 'Backspace') {\n // check if there's selection of text to be removed\n if (pos !== endPos) {\n value = e.target['value'].substring(0, pos) + e.target['value'].substring(endPos, e.target['value'].length);\n } else {\n value = e.target['value'].substring(0, pos - 1) + e.target['value'].substring(endPos, e.target['value'].length);\n }\n } else {\n // add key to the value\n value = [value.slice(0, pos), e.key, value.slice(endPos)].join('');\n }\n\n // create a Cleave instance to extract the number from formatted value\n const cleave: CleaveInstance = new Cleave(this.document.createElement('input'), { ...this.options });\n cleave.setRawValue(value);\n const number = Number(cleave.getRawValue());\n // destroy cleave instance\n cleave.destroy();\n return !isNaN(number) &&\n this.min >= 0 ? (this.isDefined(this.max) && this.max < number) : (this.min > number || this.max < number) &&\n this.max <= 0 ? (this.isDefined(this.min) && this.min > number) : (this.min > number || this.max < number);\n }\n\n /**\n * Decimal adjustment of a number.\n *\n * @param value The number or string representation of a number.\n * @param exp The exponent (the 10 logarithm of the adjustment base).\n * @returns The adjusted value.\n */\n private decimalAdjust(value: number | string, exp: number): string {\n // Ensure exp is a number\n exp = +Number(exp);\n\n // Convert input to string if it's a number\n const valueStr = typeof value === 'number' ? value.toString() : String(value);\n\n // Handle empty or invalid inputs\n if (!valueStr || isNaN(Number(valueStr))) {\n return '';\n }\n\n try {\n // Check if the value is negative\n const isNegative = valueStr.startsWith('-');\n // Get the absolute value string\n const absoluteValueStr = isNegative ? valueStr.substring(1) : valueStr;\n\n // Split the number into integer and decimal parts\n const parts = absoluteValueStr.split('.');\n let integerPart = parts[0] || '0'; // Default to '0' if empty\n let decimalPart = parts.length > 1 ? parts[1] : '';\n\n // If there's no decimal part and exp > 0, we should add zeros\n if (decimalPart === '' && exp > 0) {\n decimalPart = '0'.repeat(exp);\n }\n\n // Pad decimal part with zeros if needed\n if (decimalPart.length < exp) {\n decimalPart = decimalPart.padEnd(exp, '0');\n }\n\n // Determine if we need to round up\n let roundUp = false;\n if (decimalPart.length > exp) {\n const nextDigit = parseInt(decimalPart.charAt(exp), 10);\n roundUp = nextDigit >= 5;\n }\n\n // Trim the decimal part to the required precision\n decimalPart = decimalPart.substring(0, exp);\n\n // Handle rounding\n if (roundUp) {\n if (exp === 0) {\n // If exp is 0, we need to round the integer part\n integerPart = (BigInt(integerPart) + 1n).toString();\n } else {\n // Create a number from the decimal part\n let decimalNum = parseInt(decimalPart, 10);\n\n // Add 1 to the decimal part\n decimalNum += 1;\n\n // Check if we need to carry over to the integer part\n if (decimalNum.toString().length > exp) {\n integerPart = (BigInt(integerPart) + 1n).toString();\n decimalNum = 0;\n }\n\n // Convert back to string and pad with leading zeros if needed\n decimalPart = decimalNum.toString().padStart(exp, '0');\n }\n }\n\n // Combine the parts\n let result: string;\n if (exp > 0) {\n // Remove trailing zeros if they're not significant\n let trimmedDecimalPart = decimalPart;\n while (trimmedDecimalPart.length > 0 && trimmedDecimalPart.charAt(trimmedDecimalPart.length - 1) === '0') {\n trimmedDecimalPart = trimmedDecimalPart.substring(0, trimmedDecimalPart.length - 1);\n }\n\n result = trimmedDecimalPart.length > 0 ? `${integerPart}.${trimmedDecimalPart}` : integerPart;\n } else {\n result = integerPart;\n }\n\n // Restore the negative sign if needed\n return isNegative ? '-' + result : result;\n } catch (error) {\n console.error('Error in decimalAdjust:', error);\n // If there's an error, return a formatted original value or '0'\n return valueStr || '0';\n }\n }\n\n /**\n * Checks whether a value is defined or not\n *\n * @param value\n */\n private isDefined(value: number): boolean {\n return value !== undefined && value !== null;\n }\n\n /**\n * Check if the value is a valid number. Take into account the Big numbers\n * more than 16 digits. Check if string contains only digits and dots.\n * The number value must not be formatted.\n * @param value the value to check\n * @private\n */\n private isItaNumber(value: string): boolean {\n const length = value?.split('.')[0].length\n return length > 15 ? /^\\d+(\\.\\d+)?$/.test(value) : !isNaN(Number(value));\n }\n\n /**\n * Parse the value to a number. For large numbers, the value is a string.\n * The number value must not be formatted.\n * @param value the value to parse\n * @private\n */\n private parseBigNumber(value: string): number | string {\n // for large numbers, the value is a string\n const length = value?.split('.')[0].length\n return length > 15 ? value : Number.parseFloat(value);\n }\n}\n","import { Directive, ElementRef, forwardRef, Inject, OnInit, Optional, PLATFORM_ID } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CleaveInstance, EuiInputNumberComponent } from './eui-input-number.component';\nimport Cleave from 'cleave.js';\nimport { DOCUMENT, isPlatformServer } from '@angular/common';\n\n/**\n * @description\n * Directive for the {@link EuiInputNumberComponent}. This directive is used to\n * handle the value changes of the input element and update the value of the\n * directive and the form control. It also implements the ControlValueAccessor\n * interface to allow the directive to be used with reactive forms.\n *\n * @example\n * ```html\n * <input euiInputNumber formControlName=\"number\" />\n * ```\n */\n@Directive({\n selector: 'input[euiInputNumber][formControl],input[euiInputNumber][formControlName],input[euiInputNumber][ngModel]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EuiInputNumberDirective),\n multi: true,\n },\n ],\n standalone: true,\n})\nexport class EuiInputNumberDirective implements ControlValueAccessor, OnInit {\n /**\n * holds a copy of the value\n */\n private value: number;\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private onChange: (t: any) => void;\n\n constructor(\n private elementRef: ElementRef,\n @Optional() private euiNumberComponent: EuiInputNumberComponent,\n @Inject(DOCUMENT) private document: Document,\n @Inject(PLATFORM_ID) private platformId: unknown,\n ) {}\n\n ngOnInit(): void {\n this.euiNumberComponent['initCleave'](this.valueChanges.bind(this));\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n writeValue(obj: any): void {\n if (isPlatformServer(this.platformId)) {\n return;\n }\n const cleave: CleaveInstance = new Cleave(this.document.createElement('input'), { ...this.euiNumberComponent['options'] });\n cleave.setRawValue(obj);\n if (this.euiNumberComponent.fillFraction && obj !== '' && obj) {\n this.euiNumberComponent['applyFractionFill'](obj, cleave);\n }\n let valueOfElement: string;\n // fill leading zero\n if (this.euiNumberComponent.leadingZero) {\n const size =\n this.euiNumberComponent.leadingZero > this.euiNumberComponent.digits && this.euiNumberComponent.digits > 0\n ? this.euiNumberComponent.digits\n : this.euiNumberComponent.leadingZero;\n valueOfElement = this.euiNumberComponent['padZero'](cleave.getFormattedValue(), size);\n } else {\n valueOfElement = cleave.getFormattedValue();\n }\n this.elementRef.nativeElement.value = valueOfElement;\n this.value = Number.parseFloat(cleave.getRawValue());\n cleave.destroy();\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n registerOnChange(fn: any): void {\n this.onChange = (t): void => {\n this.value = t;\n fn(t);\n };\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /**\n * Set the disabled state of the input element.\n *\n * @param isDisabled\n */\n setDisabledState(isDisabled: boolean): void {\n this.euiNumberComponent.disabled = isDisabled;\n }\n\n private onTouched(): void {\n // this.euiNumberComponent.isInvalid = this.control.invalid;\n }\n\n /**\n * Handle the value changes of the input element and update the value of the\n * directive and the form control. For large numbers, the value is a string.\n *\n * @param event\n */\n private valueChanges(event): void {\n const { target } = event;\n\n this.euiNumberComponent['onValueChanged'](event);\n // for large numbers, the value is a string\n const length = target.rawValue.split('.')[0].length\n const numberCoerce = length > 15 ? target.rawValue : Number.parseFloat(target.rawValue);\n if (this.value !== numberCoerce && this.onChange) {\n this.onChange(length > 15 ? target.rawValue : (isNaN(numberCoerce) ? null : numberCoerce));\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EuiInputNumberComponent } from './eui-input-number.component';\nimport { EuiInputNumberDirective } from './eui-number-control.directive';\n\n/**\n * @description\n * Module for the {@link EuiInputNumberComponent} and {@link EuiInputNumberDirective}.\n *\n * @example\n * ```typescript\n * import { EuiInputNumberModule } from '@eui/components/eui-input-number';\n *\n * @NgModule({\n * imports: [EuiInputNumberModule]\n * })\n * export class AppModule {}\n * ```\n * @deprecated Use {@link `EuiInputNumberComponent`} and or {@link `EuiInputNumberDirective`} instead.\n */\n@NgModule({\n imports: [CommonModule, EuiInputNumberComponent, EuiInputNumberDirective],\n exports: [EuiInputNumberComponent, EuiInputNumberDirective],\n})\nexport class EuiInputNumberModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.EuiInputNumberComponent"],"mappings":"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"}
|
@@ -98,7 +98,7 @@ class EuiTextareaComponent {
|
|
98
98
|
*/
|
99
99
|
onInputChange(value) {
|
100
100
|
// signal rows update
|
101
|
-
this.rows.set(this.hostEl
|
101
|
+
this.rows.set(this.hostEl?.value.split('\n').length);
|
102
102
|
this.onChange(value);
|
103
103
|
}
|
104
104
|
/**
|
@@ -219,7 +219,7 @@ class EuiTextareaComponent {
|
|
219
219
|
}
|
220
220
|
this._renderer.setProperty(this._elementRef.nativeElement, 'value', obj || null);
|
221
221
|
// signal rows update
|
222
|
-
this.rows.set(this.hostEl
|
222
|
+
this.rows.set(this.hostEl?.value.split('\n').length);
|
223
223
|
}
|
224
224
|
/**
|
225
225
|
* @description
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"eui-components-eui-textarea.mjs","sources":["../../eui-textarea/eui-textarea.component.ts","../../eui-textarea/auto-resize.directive.ts","../../eui-textarea/eui-textarea.module.ts","../../eui-textarea/eui-components-eui-textarea.ts"],"sourcesContent":["import {\n Component,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n OnInit,\n Renderer2,\n SimpleChanges,\n ViewEncapsulation,\n OnDestroy,\n DoCheck,\n Injector,\n forwardRef,\n booleanAttribute,\n signal,\n Output,\n EventEmitter,\n effect,\n} from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ControlValueAccessor,\n NgControl,\n FormControl,\n FormControlDirective,\n FormGroupDirective,\n FormControlName,\n} from '@angular/forms';\nimport { BaseStatesDirective } from '@eui/components/shared';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n/**\n * @fileoverview Enhanced textarea component for Angular forms with readonly state, form control integration, and state management.\n *\n * A form control component that provides an enhanced textarea with additional features.\n * Supports readonly state visualization, form control integration, and state management.\n *\n * @component\n * @selector textarea[euiTextArea]\n *\n * @example\n * ```html\n * <textarea euiTextArea\n * [(ngModel)]=\"value\"\n * [readonly]=\"isReadonly\"\n * [disabled]=\"isDisabled\"\n * [isInvalid]=\"hasError\" />\n * ```\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'textarea[euiTextArea]',\n styleUrls: ['./styles/_index.scss'],\n template: '<ng-content></ng-content>',\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EuiTextareaComponent), multi: true }],\n hostDirectives: [\n {\n directive: BaseStatesDirective,\n inputs: ['euiDisabled', 'euiDanger'],\n },\n ],\n})\nexport class EuiTextareaComponent implements OnInit, OnDestroy, DoCheck, OnChanges, ControlValueAccessor {\n /**\n * Static counter used to generate unique IDs for textarea instances\n * @static\n */\n static idCounter = 0;\n\n /**\n * Event emitter that fires when the number of text rows in the textarea changes\n */\n @Output() rowsChange = new EventEmitter<number>();\n\n @HostBinding('class')\n public get class(): string {\n return [this.isInvalid ? 'eui-textarea--invalid' : '', this.baseStatesDirective.getCssClasses('eui-textarea')].join(' ').trim();\n }\n\n /**\n * The disabled state of the textarea\n * @description When set to true, prevents user interaction with the textarea.\n * This can be controlled either directly or through form control binding.\n */\n @HostBinding('attr.disabled')\n @Input()\n public get disabled(): boolean | null {\n return this._disabled ? true : null;\n }\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public set disabled(state: any) {\n // in case it's controlled by NgControl override\n this._disabled = coerceBooleanProperty(state);\n // set BaseDirective Attribute\n this.baseStatesDirective.euiDisabled = this._disabled;\n }\n /**\n * The readonly state of the textarea\n * @description When true, displays the textarea content in a read-only format\n * with special styling.\n */\n @HostBinding('attr.readonly')\n @Input()\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public get readonly(): any {\n return this._readonly || undefined;\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public set readonly(state: any) {\n this._readonly = coerceBooleanProperty(state);\n }\n /**\n * Unique identifier for the textarea\n * @default eui-textarea_{increment}\n */\n @HostBinding('attr.id')\n @Input()\n id = `eui-textarea_${EuiTextareaComponent.idCounter++}`;\n\n /**\n * Flag indicating if the textarea is in an invalid state\n * @description When true, applies error styling to the textarea.\n * This can be set manually or automatically through form validation.\n */\n @Input({ transform: booleanAttribute }) isInvalid: boolean;\n /**\n * @description\n * Data attribute for end-to-end testing\n * @default eui-textarea\n */\n @HostBinding('attr.data-e2e') @Input() e2eAttr = 'eui-textarea';\n protected _readonly: boolean;\n\n protected hostEl: HTMLTextAreaElement;\n\n protected hostParentEl: HTMLElement;\n protected hostWrapperEl: HTMLDivElement;\n protected valueContainerEl: HTMLDivElement;\n private _disabled: boolean;\n private destroy$: Subject<boolean> = new Subject<boolean>();\n private control: FormControl | NgControl;\n private rows = signal(0);\n\n constructor(\n private injector: Injector,\n private _elementRef: ElementRef,\n private _renderer: Renderer2,\n private baseStatesDirective: BaseStatesDirective,\n ) {\n effect(() => {\n this.rowsChange.emit(this.rows());\n });\n }\n\n /**\n * Handles input changes in the textarea\n * @param {string} value - The new value of the textarea\n * @description Updates the number of rows and triggers change detection\n */\n @HostListener('input', ['$event.target.value'])\n public onInputChange(value: string): void {\n // signal rows update\n this.rows.set(this.hostEl.value.split('\\n').length)\n this.onChange(value);\n }\n\n /**\n * Handles blur events on the textarea\n * @param {string} value - The current value of the textarea\n * @description Marks the control as touched and triggers validation\n */\n @HostListener('blur', ['$event.target.value'])\n public onBlur(value: string): void {\n this.onTouched(value);\n }\n\n /**\n * @description\n * Lifecycle hook that initializes the component. Sets up DOM elements,\n * initializes form control integration, and establishes state management\n */\n ngOnInit(): void {\n this.hostEl = this._elementRef.nativeElement;\n this.hostParentEl = this.hostEl.parentElement;\n this.hostWrapperEl = this.createHostWrapperContainer();\n this.valueContainerEl = this.createValueContainer();\n\n this.handleMarkup();\n // extract the FormControl or NgControl\n this.control = (this.injector as Injector).get(NgControl, null, { optional: true });\n if (this.control instanceof FormControlName) {\n this.control = (this.injector as Injector).get(FormGroupDirective).getControl(this.control);\n } else if (this.control instanceof FormControlDirective) {\n this.control = this.control.form as FormControl;\n }\n // sets invalid state if control is present\n if (this.control instanceof FormControl || this.control instanceof NgControl) {\n this.disabled = this.control.disabled;\n this.isInvalid = this.control.dirty && this.control.touched && this.control.invalid;\n if (this.control instanceof FormControl) {\n this.control.statusChanges.pipe(takeUntil(this.destroy$)).subscribe((status) => {\n this.isInvalid = status === 'INVALID';\n this.disabled = status === 'DISABLED';\n this.baseStatesDirective.euiDanger = this.isInvalid;\n });\n }\n }\n }\n\n /**\n * @description\n * Lifecycle hook that checks for changes in form control state\n * Updates invalid state based on form control validation\n */\n ngDoCheck(): void {\n if (this.control instanceof NgControl || this.control instanceof FormControl) {\n // TODO: Delete when https://github.com/angular/angular/issues/30275 is resolved\n this.isInvalid = this.control.invalid && this.control.touched;\n this.baseStatesDirective.euiDanger = this.isInvalid;\n }\n }\n\n /**\n * @description\n * Lifecycle hook that handles changes to component inputs\n * @param {SimpleChanges} changes - Object containing changed properties\n */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['readonly']) {\n const readonly = changes['readonly'].currentValue;\n\n if (this.hostWrapperEl && this.valueContainerEl) {\n this.hostWrapperEl.classList.toggle('eui-textarea__wrapper--readonly', !!readonly);\n }\n if (this.hostEl && this.valueContainerEl) {\n this.hostEl.classList.toggle('eui-textarea--readonly', !!readonly);\n this.valueContainerEl.innerText = this.hostEl.value;\n }\n }\n if (changes['euiDisabled']) {\n if (this.control instanceof FormControl) {\n // eslint-disable-next-line\n changes['euiDisabled'].currentValue ? this.control.disable() : this.control.enable();\n } else {\n this.setDisabledState(changes['euiDisabled'].currentValue);\n }\n }\n if(changes['isInvalid']) {\n this.baseStatesDirective.euiDanger = changes['isInvalid'].currentValue;\n }\n }\n\n /**\n * @description\n * Lifecycle hook that cleans up component resources\n * Completes observables and removes generated DOM elements\n */\n ngOnDestroy(): void {\n this.destroy$.complete();\n this.destroy$.unsubscribe();\n // cleanup DOM leftovers\n if (this.valueContainerEl) {\n try {\n this._renderer.removeChild(this.hostEl.parentElement, this.valueContainerEl);\n } catch (e) {\n console.error(e);\n }\n }\n if (this.hostWrapperEl) {\n try {\n this._renderer.removeChild(this.hostParentEl, this.hostWrapperEl);\n } catch (e) {\n console.error(e);\n }\n }\n }\n\n /**\n * @description\n * ControlValueAccessor implementation for writing values\n * @param {unknown} obj - The value to write to the textarea\n */\n writeValue(obj: unknown): void {\n if (this.valueContainerEl) {\n this._renderer.setProperty(this.valueContainerEl, 'innerText', obj || null);\n }\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', obj || null);\n // signal rows update\n this.rows.set(this.hostEl.value.split('\\n').length)\n }\n\n /**\n * @description\n * Registers the callback function for change events\n * @param {Function} fn - The callback function\n */\n registerOnChange(fn: () => void): void {\n this.onChange = fn;\n }\n\n /**\n * @description\n * Registers the callback function for touched events\n * @param {Function} fn - The callback function\n */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /**\n * @description\n * Sets the disabled state of the textarea\n * @param {boolean} isDisabled - The disabled state to set\n */\n setDisabledState(isDisabled: boolean): void {\n if (this.hostEl) {\n this._renderer.setProperty(this.hostEl, 'disabled', isDisabled);\n }\n }\n\n protected onChange(_: unknown): void {\n this.writeValue(_);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected onTouched(_: unknown): void {\n if (this.control) {\n this.isInvalid = this.control.invalid;\n }\n }\n\n /**\n * @description\n * Creates the container for the textarea element\n * @returns {HTMLDivElement} The created wrapper container element\n * @private\n */\n private createHostWrapperContainer(): HTMLDivElement {\n const wrapper = this._renderer.createElement('div');\n this._renderer.addClass(wrapper, 'eui-textarea__wrapper');\n if (this.readonly) {\n this._renderer.addClass(wrapper, 'eui-textarea__wrapper--readonly');\n this._renderer.addClass(this.hostEl, 'eui-textarea--readonly');\n } else {\n this._renderer.removeClass(wrapper, 'eui-textarea__wrapper--readonly');\n this._renderer.removeClass(this.hostEl, 'eui-textarea--readonly');\n }\n\n return wrapper;\n }\n\n /**\n * @description\n * Creates the container for displaying readonly values\n * @returns {HTMLDivElement} The created value container element\n * @private\n */\n private createValueContainer(): HTMLDivElement {\n const valueContainer = this._renderer.createElement('div');\n this._renderer.addClass(valueContainer, 'eui-textarea__value-container');\n this._renderer.setProperty(valueContainer, 'innerText', this.hostEl.value);\n return valueContainer;\n }\n\n /**\n * @description\n * Handles the DOM manipulation for the textarea structure\n * Wraps the textarea in necessary containers and adds\n * the readonly value display element\n *\n * @private\n */\n private handleMarkup(): void {\n if (this.hostParentEl != null) {\n this.hostParentEl.replaceChild(this.hostWrapperEl, this.hostEl);\n this.hostWrapperEl.appendChild(this.hostEl);\n this.hostWrapperEl.appendChild(this.valueContainerEl);\n }\n }\n}\n","/* eslint-disable @angular-eslint/directive-selector */\nimport {\n Directive,\n OnInit,\n OnDestroy,\n Input,\n ElementRef,\n HostListener,\n AfterViewInit,\n Optional,\n Renderer2,\n OnChanges,\n booleanAttribute,\n numberAttribute,\n SimpleChanges,\n} from '@angular/core';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { fromEvent, Subject } from 'rxjs';\nimport { debounceTime, startWith, takeUntil } from 'rxjs/operators';\nimport { NgControl } from '@angular/forms';\n\n/**\n * A directive that automatically adjusts the height of a textarea based on its content.\n *\n * @directive\n * @selector textarea[autoResize]\n * @description\n * The AutoResizeDirective automatically adjusts the height of a textarea element as the user types,\n * ensuring that all content is visible without requiring manual resizing or scrolling.\n * It supports minimum and maximum row constraints and can be enabled/disabled dynamically.\n *\n * @example\n * ```html\n * <textarea autoResize [minRows]=\"2\" [maxRows]=\"5\"></textarea>\n * ```\n */\n@Directive({\n selector: 'textarea[autoResize]',\n standalone: true,\n})\nexport class AutoResizeDirective implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n /**\n * @description\n * Controls whether the auto-resize functionality is enabled.\n * When true, the textarea will automatically adjust its height based on content.\n * When false, the textarea will behave normally.\n *\n * @default true\n */\n @Input({ transform: booleanAttribute }) autoResize = true;\n\n /**\n * @description\n * Sets the minimum number of rows for the textarea.\n * This value determines the initial height of the textarea.\n *\n * @param minRows - The minimum number of rows to display\n */\n @Input()\n set minRows(minRows: number | string) {\n this.defaultRows = coerceNumberProperty(minRows);\n }\n /**\n * @description\n * Sets the maximum number of rows for the textarea.\n * When set to a value greater than 0, the textarea will not grow beyond this number of rows\n * and will show scrollbars if necessary.\n * When set to 0, there is no maximum limit.\n *\n * @default 0\n */\n @Input({ transform: numberAttribute }) maxRows = 0;\n\n private defaultRows = 1;\n private destroy$: Subject<boolean> = new Subject<boolean>();\n private observer: MutationObserver;\n\n constructor(\n protected el: ElementRef,\n protected renderer: Renderer2,\n @Optional() protected control: NgControl,\n ) {}\n\n /**\n * Event handler for input events on the textarea.\n * Triggers the resize calculation when the content changes.\n *\n * @internal\n */\n @HostListener('input', ['$event.target'])\n onInput(): void {\n this.resize();\n }\n\n /**\n * Initializes the directive by setting up window resize event handling\n * and mutation observer for readonly attribute changes.\n *\n * @internal\n */\n ngOnInit(): void {\n fromEvent(window, 'resize')\n .pipe(takeUntil(this.destroy$), debounceTime(300))\n .subscribe(() => this.resize());\n\n // Create an observer instance linked to the callback function\n this.observer = new MutationObserver(this.readonlyMutationObserver.bind(this));\n\n // Start observing the target node for configured mutations\n this.observer.observe(this.el.nativeElement, { attributes: true });\n }\n\n /**\n * Handles changes to the directive's inputs, particularly the autoResize property.\n * Updates the textarea's appearance and behavior accordingly.\n *\n * @param changes - Angular SimpleChanges object containing changed properties\n * @internal\n */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['autoResize']) {\n const enable = changes['autoResize'].currentValue || this.autoResize;\n this.renderer.setProperty(this.el.nativeElement, 'rows', this.defaultRows);\n this.renderer.setStyle(this.el.nativeElement, 'overflow', enable ? 'hidden' : '');\n this.renderer.setStyle(this.el.nativeElement, 'resize', enable ? 'none' : '');\n if (enable) {\n this.resize();\n }\n }\n }\n\n /**\n * Performs initial resize after view initialization and sets up form control value change handling if applicable.\n *\n * @internal\n */\n ngAfterViewInit(): void {\n if (this.autoResize) {\n if (this.control) {\n this.handleFormControlChanges();\n } else {\n this.resize();\n }\n }\n }\n\n /**\n * Cleans up subscriptions and disconnects observers when the directive is destroyed.\n *\n * @internal\n */\n ngOnDestroy(): void {\n this.destroy$.complete();\n this.destroy$.unsubscribe();\n this.observer.disconnect();\n }\n\n /**\n * Calculates and sets the appropriate height for the textarea based on its content.\n * This method creates a temporary clone of the textarea to measure the required height,\n * taking into account minRows and maxRows constraints.\n *\n * The calculation process:\n * 1. Creates a hidden clone of the textarea\n * 2. Sets the clone's width to match the original\n * 3. Measures the required height based on content\n * 4. Applies maxRows constraint if specified\n * 5. Updates the original textarea's height\n *\n * @public\n */\n public resize(): void {\n if (this.autoResize) {\n // clone element\n const clone = this.el.nativeElement.cloneNode(true);\n const parent = this.el.nativeElement.parentNode;\n clone.style.width = this.el.nativeElement.offsetWidth + 'px';\n clone.style.visibility = 'hidden';\n clone.style.position = 'absolute';\n clone.textContent = this.el.nativeElement.value;\n parent.appendChild(clone);\n clone.style['overflow-y'] = 'hidden';\n clone.style.height = 'auto';\n const cloneHeight = clone.scrollHeight;\n\n this.renderer.setStyle(clone, 'height', cloneHeight);\n // calculate height\n const { offsetHeight } = clone;\n let { scrollHeight } = clone;\n // Enforce maxRows limit if set\n if (this.maxRows > 0) {\n const lineHeight = parseInt(getComputedStyle(clone).lineHeight, 10);\n const maxHeight = lineHeight * this.maxRows;\n scrollHeight = Math.min(scrollHeight, maxHeight);\n if(scrollHeight >= maxHeight) {\n this.renderer.removeStyle(this.el.nativeElement, 'overflow'); // Restore overflow behavior\n } else {\n this.renderer.setStyle(this.el.nativeElement, 'overflow', 'hidden'); // Hide scrollbars during adjustment\n }\n }\n let height = offsetHeight > scrollHeight ? offsetHeight : scrollHeight;\n height = height <= 0 ? 'auto' : `${height}px`;\n // remove clone\n parent.removeChild(clone);\n // set height\n this.renderer.setStyle(this.el.nativeElement, 'height', height);\n }\n }\n\n /**\n * Sets up subscription to form control value changes to trigger resize when the value\n * is changed programmatically through the form control.\n *\n * @protected\n */\n protected handleFormControlChanges(): void {\n // in case value changed manually through control, call resize()\n // startWith is being used to cause resize to be called in case of late subscription after value has changed\n this.control.valueChanges.pipe(takeUntil(this.destroy$), startWith('')).subscribe(() => this.resize());\n }\n\n /**\n * Mutation observer callback that handles changes to the readonly attribute\n * and triggers resize when necessary.\n *\n * @param mutationsList - List of mutations that occurred\n * @private\n */\n private readonlyMutationObserver(mutationsList: MutationRecord[]): void {\n // Use traditional 'for loops' for IE 11\n for (const mutation of mutationsList) {\n if (mutation.type === 'attributes' && mutation.attributeName === 'readonly') {\n this.resize();\n }\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EuiTextareaComponent } from './eui-textarea.component';\nimport { AutoResizeDirective } from './auto-resize.directive';\n\n/**\n * @description\n * A module that provides textarea functionality with auto-resizing capabilities.\n * This module encapsulates the EuiTextareaComponent and AutoResizeDirective to provide\n * a cohesive textarea solution for Angular applications.\n *\n * @usageNotes\n * To use this module, import it into your feature module:\n * ```typescript\n * import { EuiTextAreaModule } from './path-to-module/eui-textarea.module';\n *\n * @NgModule({\n * imports: [EuiTextAreaModule]\n * })\n * export class YourFeatureModule { }\n * ```\n *\n * @publicApi\n */\n@NgModule({\n imports: [CommonModule, EuiTextareaComponent, AutoResizeDirective],\n exports: [EuiTextareaComponent, AutoResizeDirective],\n})\nexport class EuiTextAreaModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"eui-components-eui-textarea.mjs","sources":["../../eui-textarea/eui-textarea.component.ts","../../eui-textarea/auto-resize.directive.ts","../../eui-textarea/eui-textarea.module.ts","../../eui-textarea/eui-components-eui-textarea.ts"],"sourcesContent":["import {\n Component,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n OnInit,\n Renderer2,\n SimpleChanges,\n ViewEncapsulation,\n OnDestroy,\n DoCheck,\n Injector,\n forwardRef,\n booleanAttribute,\n signal,\n Output,\n EventEmitter,\n effect,\n} from '@angular/core';\nimport {\n NG_VALUE_ACCESSOR,\n ControlValueAccessor,\n NgControl,\n FormControl,\n FormControlDirective,\n FormGroupDirective,\n FormControlName,\n} from '@angular/forms';\nimport { BaseStatesDirective } from '@eui/components/shared';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n/**\n * @fileoverview Enhanced textarea component for Angular forms with readonly state, form control integration, and state management.\n *\n * A form control component that provides an enhanced textarea with additional features.\n * Supports readonly state visualization, form control integration, and state management.\n *\n * @component\n * @selector textarea[euiTextArea]\n *\n * @example\n * ```html\n * <textarea euiTextArea\n * [(ngModel)]=\"value\"\n * [readonly]=\"isReadonly\"\n * [disabled]=\"isDisabled\"\n * [isInvalid]=\"hasError\" />\n * ```\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'textarea[euiTextArea]',\n styleUrls: ['./styles/_index.scss'],\n template: '<ng-content></ng-content>',\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EuiTextareaComponent), multi: true }],\n hostDirectives: [\n {\n directive: BaseStatesDirective,\n inputs: ['euiDisabled', 'euiDanger'],\n },\n ],\n})\nexport class EuiTextareaComponent implements OnInit, OnDestroy, DoCheck, OnChanges, ControlValueAccessor {\n /**\n * Static counter used to generate unique IDs for textarea instances\n * @static\n */\n static idCounter = 0;\n\n /**\n * Event emitter that fires when the number of text rows in the textarea changes\n */\n @Output() rowsChange = new EventEmitter<number>();\n\n @HostBinding('class')\n public get class(): string {\n return [this.isInvalid ? 'eui-textarea--invalid' : '', this.baseStatesDirective.getCssClasses('eui-textarea')].join(' ').trim();\n }\n\n /**\n * The disabled state of the textarea\n * @description When set to true, prevents user interaction with the textarea.\n * This can be controlled either directly or through form control binding.\n */\n @HostBinding('attr.disabled')\n @Input()\n public get disabled(): boolean | null {\n return this._disabled ? true : null;\n }\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public set disabled(state: any) {\n // in case it's controlled by NgControl override\n this._disabled = coerceBooleanProperty(state);\n // set BaseDirective Attribute\n this.baseStatesDirective.euiDisabled = this._disabled;\n }\n /**\n * The readonly state of the textarea\n * @description When true, displays the textarea content in a read-only format\n * with special styling.\n */\n @HostBinding('attr.readonly')\n @Input()\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public get readonly(): any {\n return this._readonly || undefined;\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public set readonly(state: any) {\n this._readonly = coerceBooleanProperty(state);\n }\n /**\n * Unique identifier for the textarea\n * @default eui-textarea_{increment}\n */\n @HostBinding('attr.id')\n @Input()\n id = `eui-textarea_${EuiTextareaComponent.idCounter++}`;\n\n /**\n * Flag indicating if the textarea is in an invalid state\n * @description When true, applies error styling to the textarea.\n * This can be set manually or automatically through form validation.\n */\n @Input({ transform: booleanAttribute }) isInvalid: boolean;\n /**\n * @description\n * Data attribute for end-to-end testing\n * @default eui-textarea\n */\n @HostBinding('attr.data-e2e') @Input() e2eAttr = 'eui-textarea';\n protected _readonly: boolean;\n\n protected hostEl: HTMLTextAreaElement;\n\n protected hostParentEl: HTMLElement;\n protected hostWrapperEl: HTMLDivElement;\n protected valueContainerEl: HTMLDivElement;\n private _disabled: boolean;\n private destroy$: Subject<boolean> = new Subject<boolean>();\n private control: FormControl | NgControl;\n private rows = signal(0);\n\n constructor(\n private injector: Injector,\n private _elementRef: ElementRef,\n private _renderer: Renderer2,\n private baseStatesDirective: BaseStatesDirective,\n ) {\n effect(() => {\n this.rowsChange.emit(this.rows());\n });\n }\n\n /**\n * Handles input changes in the textarea\n * @param {string} value - The new value of the textarea\n * @description Updates the number of rows and triggers change detection\n */\n @HostListener('input', ['$event.target.value'])\n public onInputChange(value: string): void {\n // signal rows update\n this.rows.set(this.hostEl?.value.split('\\n').length)\n this.onChange(value);\n }\n\n /**\n * Handles blur events on the textarea\n * @param {string} value - The current value of the textarea\n * @description Marks the control as touched and triggers validation\n */\n @HostListener('blur', ['$event.target.value'])\n public onBlur(value: string): void {\n this.onTouched(value);\n }\n\n /**\n * @description\n * Lifecycle hook that initializes the component. Sets up DOM elements,\n * initializes form control integration, and establishes state management\n */\n ngOnInit(): void {\n this.hostEl = this._elementRef.nativeElement;\n this.hostParentEl = this.hostEl.parentElement;\n this.hostWrapperEl = this.createHostWrapperContainer();\n this.valueContainerEl = this.createValueContainer();\n\n this.handleMarkup();\n // extract the FormControl or NgControl\n this.control = (this.injector as Injector).get(NgControl, null, { optional: true });\n if (this.control instanceof FormControlName) {\n this.control = (this.injector as Injector).get(FormGroupDirective).getControl(this.control);\n } else if (this.control instanceof FormControlDirective) {\n this.control = this.control.form as FormControl;\n }\n // sets invalid state if control is present\n if (this.control instanceof FormControl || this.control instanceof NgControl) {\n this.disabled = this.control.disabled;\n this.isInvalid = this.control.dirty && this.control.touched && this.control.invalid;\n if (this.control instanceof FormControl) {\n this.control.statusChanges.pipe(takeUntil(this.destroy$)).subscribe((status) => {\n this.isInvalid = status === 'INVALID';\n this.disabled = status === 'DISABLED';\n this.baseStatesDirective.euiDanger = this.isInvalid;\n });\n }\n }\n }\n\n /**\n * @description\n * Lifecycle hook that checks for changes in form control state\n * Updates invalid state based on form control validation\n */\n ngDoCheck(): void {\n if (this.control instanceof NgControl || this.control instanceof FormControl) {\n // TODO: Delete when https://github.com/angular/angular/issues/30275 is resolved\n this.isInvalid = this.control.invalid && this.control.touched;\n this.baseStatesDirective.euiDanger = this.isInvalid;\n }\n }\n\n /**\n * @description\n * Lifecycle hook that handles changes to component inputs\n * @param {SimpleChanges} changes - Object containing changed properties\n */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['readonly']) {\n const readonly = changes['readonly'].currentValue;\n\n if (this.hostWrapperEl && this.valueContainerEl) {\n this.hostWrapperEl.classList.toggle('eui-textarea__wrapper--readonly', !!readonly);\n }\n if (this.hostEl && this.valueContainerEl) {\n this.hostEl.classList.toggle('eui-textarea--readonly', !!readonly);\n this.valueContainerEl.innerText = this.hostEl.value;\n }\n }\n if (changes['euiDisabled']) {\n if (this.control instanceof FormControl) {\n // eslint-disable-next-line\n changes['euiDisabled'].currentValue ? this.control.disable() : this.control.enable();\n } else {\n this.setDisabledState(changes['euiDisabled'].currentValue);\n }\n }\n if(changes['isInvalid']) {\n this.baseStatesDirective.euiDanger = changes['isInvalid'].currentValue;\n }\n }\n\n /**\n * @description\n * Lifecycle hook that cleans up component resources\n * Completes observables and removes generated DOM elements\n */\n ngOnDestroy(): void {\n this.destroy$.complete();\n this.destroy$.unsubscribe();\n // cleanup DOM leftovers\n if (this.valueContainerEl) {\n try {\n this._renderer.removeChild(this.hostEl.parentElement, this.valueContainerEl);\n } catch (e) {\n console.error(e);\n }\n }\n if (this.hostWrapperEl) {\n try {\n this._renderer.removeChild(this.hostParentEl, this.hostWrapperEl);\n } catch (e) {\n console.error(e);\n }\n }\n }\n\n /**\n * @description\n * ControlValueAccessor implementation for writing values\n * @param {unknown} obj - The value to write to the textarea\n */\n writeValue(obj: unknown): void {\n if (this.valueContainerEl) {\n this._renderer.setProperty(this.valueContainerEl, 'innerText', obj || null);\n }\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', obj || null);\n // signal rows update\n this.rows.set(this.hostEl?.value.split('\\n').length)\n }\n\n /**\n * @description\n * Registers the callback function for change events\n * @param {Function} fn - The callback function\n */\n registerOnChange(fn: () => void): void {\n this.onChange = fn;\n }\n\n /**\n * @description\n * Registers the callback function for touched events\n * @param {Function} fn - The callback function\n */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /**\n * @description\n * Sets the disabled state of the textarea\n * @param {boolean} isDisabled - The disabled state to set\n */\n setDisabledState(isDisabled: boolean): void {\n if (this.hostEl) {\n this._renderer.setProperty(this.hostEl, 'disabled', isDisabled);\n }\n }\n\n protected onChange(_: unknown): void {\n this.writeValue(_);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n protected onTouched(_: unknown): void {\n if (this.control) {\n this.isInvalid = this.control.invalid;\n }\n }\n\n /**\n * @description\n * Creates the container for the textarea element\n * @returns {HTMLDivElement} The created wrapper container element\n * @private\n */\n private createHostWrapperContainer(): HTMLDivElement {\n const wrapper = this._renderer.createElement('div');\n this._renderer.addClass(wrapper, 'eui-textarea__wrapper');\n if (this.readonly) {\n this._renderer.addClass(wrapper, 'eui-textarea__wrapper--readonly');\n this._renderer.addClass(this.hostEl, 'eui-textarea--readonly');\n } else {\n this._renderer.removeClass(wrapper, 'eui-textarea__wrapper--readonly');\n this._renderer.removeClass(this.hostEl, 'eui-textarea--readonly');\n }\n\n return wrapper;\n }\n\n /**\n * @description\n * Creates the container for displaying readonly values\n * @returns {HTMLDivElement} The created value container element\n * @private\n */\n private createValueContainer(): HTMLDivElement {\n const valueContainer = this._renderer.createElement('div');\n this._renderer.addClass(valueContainer, 'eui-textarea__value-container');\n this._renderer.setProperty(valueContainer, 'innerText', this.hostEl.value);\n return valueContainer;\n }\n\n /**\n * @description\n * Handles the DOM manipulation for the textarea structure\n * Wraps the textarea in necessary containers and adds\n * the readonly value display element\n *\n * @private\n */\n private handleMarkup(): void {\n if (this.hostParentEl != null) {\n this.hostParentEl.replaceChild(this.hostWrapperEl, this.hostEl);\n this.hostWrapperEl.appendChild(this.hostEl);\n this.hostWrapperEl.appendChild(this.valueContainerEl);\n }\n }\n}\n","/* eslint-disable @angular-eslint/directive-selector */\nimport {\n Directive,\n OnInit,\n OnDestroy,\n Input,\n ElementRef,\n HostListener,\n AfterViewInit,\n Optional,\n Renderer2,\n OnChanges,\n booleanAttribute,\n numberAttribute,\n SimpleChanges,\n} from '@angular/core';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { fromEvent, Subject } from 'rxjs';\nimport { debounceTime, startWith, takeUntil } from 'rxjs/operators';\nimport { NgControl } from '@angular/forms';\n\n/**\n * A directive that automatically adjusts the height of a textarea based on its content.\n *\n * @directive\n * @selector textarea[autoResize]\n * @description\n * The AutoResizeDirective automatically adjusts the height of a textarea element as the user types,\n * ensuring that all content is visible without requiring manual resizing or scrolling.\n * It supports minimum and maximum row constraints and can be enabled/disabled dynamically.\n *\n * @example\n * ```html\n * <textarea autoResize [minRows]=\"2\" [maxRows]=\"5\"></textarea>\n * ```\n */\n@Directive({\n selector: 'textarea[autoResize]',\n standalone: true,\n})\nexport class AutoResizeDirective implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n /**\n * @description\n * Controls whether the auto-resize functionality is enabled.\n * When true, the textarea will automatically adjust its height based on content.\n * When false, the textarea will behave normally.\n *\n * @default true\n */\n @Input({ transform: booleanAttribute }) autoResize = true;\n\n /**\n * @description\n * Sets the minimum number of rows for the textarea.\n * This value determines the initial height of the textarea.\n *\n * @param minRows - The minimum number of rows to display\n */\n @Input()\n set minRows(minRows: number | string) {\n this.defaultRows = coerceNumberProperty(minRows);\n }\n /**\n * @description\n * Sets the maximum number of rows for the textarea.\n * When set to a value greater than 0, the textarea will not grow beyond this number of rows\n * and will show scrollbars if necessary.\n * When set to 0, there is no maximum limit.\n *\n * @default 0\n */\n @Input({ transform: numberAttribute }) maxRows = 0;\n\n private defaultRows = 1;\n private destroy$: Subject<boolean> = new Subject<boolean>();\n private observer: MutationObserver;\n\n constructor(\n protected el: ElementRef,\n protected renderer: Renderer2,\n @Optional() protected control: NgControl,\n ) {}\n\n /**\n * Event handler for input events on the textarea.\n * Triggers the resize calculation when the content changes.\n *\n * @internal\n */\n @HostListener('input', ['$event.target'])\n onInput(): void {\n this.resize();\n }\n\n /**\n * Initializes the directive by setting up window resize event handling\n * and mutation observer for readonly attribute changes.\n *\n * @internal\n */\n ngOnInit(): void {\n fromEvent(window, 'resize')\n .pipe(takeUntil(this.destroy$), debounceTime(300))\n .subscribe(() => this.resize());\n\n // Create an observer instance linked to the callback function\n this.observer = new MutationObserver(this.readonlyMutationObserver.bind(this));\n\n // Start observing the target node for configured mutations\n this.observer.observe(this.el.nativeElement, { attributes: true });\n }\n\n /**\n * Handles changes to the directive's inputs, particularly the autoResize property.\n * Updates the textarea's appearance and behavior accordingly.\n *\n * @param changes - Angular SimpleChanges object containing changed properties\n * @internal\n */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['autoResize']) {\n const enable = changes['autoResize'].currentValue || this.autoResize;\n this.renderer.setProperty(this.el.nativeElement, 'rows', this.defaultRows);\n this.renderer.setStyle(this.el.nativeElement, 'overflow', enable ? 'hidden' : '');\n this.renderer.setStyle(this.el.nativeElement, 'resize', enable ? 'none' : '');\n if (enable) {\n this.resize();\n }\n }\n }\n\n /**\n * Performs initial resize after view initialization and sets up form control value change handling if applicable.\n *\n * @internal\n */\n ngAfterViewInit(): void {\n if (this.autoResize) {\n if (this.control) {\n this.handleFormControlChanges();\n } else {\n this.resize();\n }\n }\n }\n\n /**\n * Cleans up subscriptions and disconnects observers when the directive is destroyed.\n *\n * @internal\n */\n ngOnDestroy(): void {\n this.destroy$.complete();\n this.destroy$.unsubscribe();\n this.observer.disconnect();\n }\n\n /**\n * Calculates and sets the appropriate height for the textarea based on its content.\n * This method creates a temporary clone of the textarea to measure the required height,\n * taking into account minRows and maxRows constraints.\n *\n * The calculation process:\n * 1. Creates a hidden clone of the textarea\n * 2. Sets the clone's width to match the original\n * 3. Measures the required height based on content\n * 4. Applies maxRows constraint if specified\n * 5. Updates the original textarea's height\n *\n * @public\n */\n public resize(): void {\n if (this.autoResize) {\n // clone element\n const clone = this.el.nativeElement.cloneNode(true);\n const parent = this.el.nativeElement.parentNode;\n clone.style.width = this.el.nativeElement.offsetWidth + 'px';\n clone.style.visibility = 'hidden';\n clone.style.position = 'absolute';\n clone.textContent = this.el.nativeElement.value;\n parent.appendChild(clone);\n clone.style['overflow-y'] = 'hidden';\n clone.style.height = 'auto';\n const cloneHeight = clone.scrollHeight;\n\n this.renderer.setStyle(clone, 'height', cloneHeight);\n // calculate height\n const { offsetHeight } = clone;\n let { scrollHeight } = clone;\n // Enforce maxRows limit if set\n if (this.maxRows > 0) {\n const lineHeight = parseInt(getComputedStyle(clone).lineHeight, 10);\n const maxHeight = lineHeight * this.maxRows;\n scrollHeight = Math.min(scrollHeight, maxHeight);\n if(scrollHeight >= maxHeight) {\n this.renderer.removeStyle(this.el.nativeElement, 'overflow'); // Restore overflow behavior\n } else {\n this.renderer.setStyle(this.el.nativeElement, 'overflow', 'hidden'); // Hide scrollbars during adjustment\n }\n }\n let height = offsetHeight > scrollHeight ? offsetHeight : scrollHeight;\n height = height <= 0 ? 'auto' : `${height}px`;\n // remove clone\n parent.removeChild(clone);\n // set height\n this.renderer.setStyle(this.el.nativeElement, 'height', height);\n }\n }\n\n /**\n * Sets up subscription to form control value changes to trigger resize when the value\n * is changed programmatically through the form control.\n *\n * @protected\n */\n protected handleFormControlChanges(): void {\n // in case value changed manually through control, call resize()\n // startWith is being used to cause resize to be called in case of late subscription after value has changed\n this.control.valueChanges.pipe(takeUntil(this.destroy$), startWith('')).subscribe(() => this.resize());\n }\n\n /**\n * Mutation observer callback that handles changes to the readonly attribute\n * and triggers resize when necessary.\n *\n * @param mutationsList - List of mutations that occurred\n * @private\n */\n private readonlyMutationObserver(mutationsList: MutationRecord[]): void {\n // Use traditional 'for loops' for IE 11\n for (const mutation of mutationsList) {\n if (mutation.type === 'attributes' && mutation.attributeName === 'readonly') {\n this.resize();\n }\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EuiTextareaComponent } from './eui-textarea.component';\nimport { AutoResizeDirective } from './auto-resize.directive';\n\n/**\n * @description\n * A module that provides textarea functionality with auto-resizing capabilities.\n * This module encapsulates the EuiTextareaComponent and AutoResizeDirective to provide\n * a cohesive textarea solution for Angular applications.\n *\n * @usageNotes\n * To use this module, import it into your feature module:\n * ```typescript\n * import { EuiTextAreaModule } from './path-to-module/eui-textarea.module';\n *\n * @NgModule({\n * imports: [EuiTextAreaModule]\n * })\n * export class YourFeatureModule { }\n * ```\n *\n * @publicApi\n */\n@NgModule({\n imports: [CommonModule, EuiTextareaComponent, AutoResizeDirective],\n exports: [EuiTextareaComponent, AutoResizeDirective],\n})\nexport class EuiTextAreaModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "@eui/components",
|
3
|
-
"version": "19.1.
|
4
|
-
"tag": "
|
3
|
+
"version": "19.1.2-snapshot-1741266669094",
|
4
|
+
"tag": "snapshot",
|
5
5
|
"description": "eUI components package",
|
6
6
|
"homepage": "https://eui.ecdevops.eu",
|
7
7
|
"author": "ec.europa.eui@gmail.com",
|
@@ -10,8 +10,8 @@
|
|
10
10
|
"url": "https://citnet.tech.ec.europa.eu/CITnet/stash/projects/CSDR/repos/eui/browse/packages/components"
|
11
11
|
},
|
12
12
|
"peerDependencies": {
|
13
|
-
"@eui/core": "19.1.
|
14
|
-
"@eui/base": "19.1.
|
13
|
+
"@eui/core": "19.1.2-snapshot-1741266669094",
|
14
|
+
"@eui/base": "19.1.2-snapshot-1741266669094",
|
15
15
|
"@angular/common": "^18.0.0 || ^19.0.0",
|
16
16
|
"@angular/core": "^18.0.0 || ^19.0.0",
|
17
17
|
"@angular/forms": "^18.0.0 || ^19.0.0",
|