@sixbell-telco/sdk
Version:
A collection of reusable components designed for use in Sixbell Telco Angular projects
87 lines (82 loc) • 3.5 kB
JavaScript
import * as i0 from '@angular/core';
import { input, HostListener, Directive } from '@angular/core';
/**
* Directive that restricts input to numeric characters only.
*
* Use the `stOnlyNumbers` selector to enable numeric-only input restriction.
* For backward compatibility, the `stJustNumbers` selector is also supported but is deprecated.
*
* @example
* ```html
* <!-- Modern usage (recommended) -->
* <input stOnlyNumbers />
* <input [stOnlyNumbers]="true" />
* ```
*/
class OnlyNumbersDirective {
/**
* Enable numeric-only input restriction.
* @default false
*/
stOnlyNumbers = input(false);
/**
* @deprecated Use `stOnlyNumbers` input instead.
* This input is maintained for backward compatibility and will be removed in a future major version.
*/
justNumbers = input(false);
constructor() { }
blockPaste(event) {
if (!this.getEnabled())
return true;
const justNumbersReg = new RegExp('^[0-9]+$');
const clipboardData = event.clipboardData;
if (!clipboardData)
return true;
const pastedValue = clipboardData.getData('Text');
if (!justNumbersReg.test(pastedValue)) {
event.preventDefault();
return false;
}
return true;
}
onKeyPress(event) {
if (!this.getEnabled())
return true;
const key = event.key;
if (!/^[0-9]$/.test(key)) {
event.preventDefault();
return false;
}
return true;
}
/**
* Determines if the numeric-only restriction is enabled.
* Checks both the new and deprecated inputs for backward compatibility.
* @private
*/
getEnabled() {
// Check new input first, fallback to deprecated input for backward compatibility
return this.stOnlyNumbers() || this.justNumbers();
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.0", ngImport: i0, type: OnlyNumbersDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.0", type: OnlyNumbersDirective, isStandalone: true, selector: "[stOnlyNumbers], [stJustNumbers]", inputs: { stOnlyNumbers: { classPropertyName: "stOnlyNumbers", publicName: "stOnlyNumbers", isSignal: true, isRequired: false, transformFunction: null }, justNumbers: { classPropertyName: "justNumbers", publicName: "justNumbers", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "paste": "blockPaste($event)", "keypress": "onKeyPress($event)" } }, ngImport: i0 });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.0", ngImport: i0, type: OnlyNumbersDirective, decorators: [{
type: Directive,
args: [{
selector: '[stOnlyNumbers], [stJustNumbers]',
standalone: true,
}]
}], ctorParameters: () => [], propDecorators: { blockPaste: [{
type: HostListener,
args: ['paste', ['$event']]
}], onKeyPress: [{
type: HostListener,
args: ['keypress', ['$event']]
}] } });
// Export the new directive without deprecation
/**
* Generated bundle index. Do not edit.
*/
export { OnlyNumbersDirective as JustNumbersDirective, OnlyNumbersDirective };
//# sourceMappingURL=sixbell-telco-sdk-directives-only-numbers.mjs.map