@unifylib/ui-lib 1.2.3 → 1.2.4
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/esm2022/lib/components/base-form-canvas/base-form-canvas.component.mjs +5 -3
- package/esm2022/lib/directives/phone-number-only.directive.mjs +73 -0
- package/fesm2022/iq-ui-lib.mjs +74 -2
- package/fesm2022/iq-ui-lib.mjs.map +1 -1
- package/fesm2022/unifylib-ui-lib.mjs +74 -2
- package/fesm2022/unifylib-ui-lib.mjs.map +1 -1
- package/lib/directives/phone-number-only.directive.d.ts +8 -0
- package/package.json +1 -1
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { Directive, HostListener, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class PhoneNumberOnlyDirective {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.phoneNumberOnly = false;
|
|
6
|
+
}
|
|
7
|
+
onKeyDown(event) {
|
|
8
|
+
if (!this.phoneNumberOnly)
|
|
9
|
+
return;
|
|
10
|
+
const key = event.key;
|
|
11
|
+
const input = event.target;
|
|
12
|
+
const cursor = input.selectionStart ?? 0;
|
|
13
|
+
const value = input.value;
|
|
14
|
+
// Allow control keys
|
|
15
|
+
if (event.ctrlKey || event.metaKey || event.altKey ||
|
|
16
|
+
['Backspace', 'Tab', 'ArrowLeft', 'ArrowRight', 'Delete', 'Home', 'End', 'Enter'].includes(key)) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
// Allow '+' only at the first position
|
|
20
|
+
if (key === '+') {
|
|
21
|
+
if (cursor !== 0 || value.includes('+')) {
|
|
22
|
+
event.preventDefault();
|
|
23
|
+
}
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
// Allow only digits
|
|
27
|
+
if (key >= '0' && key <= '9') {
|
|
28
|
+
// Check for max length 15 (if not already handled by maxLength attribute)
|
|
29
|
+
// Note: We should account for the selected text being replaced
|
|
30
|
+
const selectedText = value.substring(cursor, input.selectionEnd ?? cursor);
|
|
31
|
+
if (value.length - selectedText.length >= 15) {
|
|
32
|
+
event.preventDefault();
|
|
33
|
+
}
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
// Block everything else
|
|
37
|
+
event.preventDefault();
|
|
38
|
+
}
|
|
39
|
+
onPaste(event) {
|
|
40
|
+
if (!this.phoneNumberOnly)
|
|
41
|
+
return;
|
|
42
|
+
const pastedData = event.clipboardData?.getData('text') ?? '';
|
|
43
|
+
const input = event.target;
|
|
44
|
+
const value = input.value;
|
|
45
|
+
const cursor = input.selectionStart ?? 0;
|
|
46
|
+
const selectedText = value.substring(cursor, input.selectionEnd ?? cursor);
|
|
47
|
+
// Construct what the new value would be
|
|
48
|
+
const newValue = value.slice(0, cursor) + pastedData + value.slice(input.selectionEnd ?? cursor);
|
|
49
|
+
// Regex: starts with optional +, followed by only digits, max 15 characters total
|
|
50
|
+
const regex = /^\+?\d{0,15}$/;
|
|
51
|
+
if (!regex.test(newValue)) {
|
|
52
|
+
event.preventDefault();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PhoneNumberOnlyDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
56
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: PhoneNumberOnlyDirective, isStandalone: true, selector: "[phoneNumberOnly]", inputs: { phoneNumberOnly: "phoneNumberOnly" }, host: { listeners: { "keydown": "onKeyDown($event)", "paste": "onPaste($event)" } }, ngImport: i0 }); }
|
|
57
|
+
}
|
|
58
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PhoneNumberOnlyDirective, decorators: [{
|
|
59
|
+
type: Directive,
|
|
60
|
+
args: [{
|
|
61
|
+
selector: '[phoneNumberOnly]',
|
|
62
|
+
standalone: true
|
|
63
|
+
}]
|
|
64
|
+
}], propDecorators: { phoneNumberOnly: [{
|
|
65
|
+
type: Input
|
|
66
|
+
}], onKeyDown: [{
|
|
67
|
+
type: HostListener,
|
|
68
|
+
args: ['keydown', ['$event']]
|
|
69
|
+
}], onPaste: [{
|
|
70
|
+
type: HostListener,
|
|
71
|
+
args: ['paste', ['$event']]
|
|
72
|
+
}] } });
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvbmUtbnVtYmVyLW9ubHkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW52b2ljZXEvdWktbGliL3NyYy9saWIvZGlyZWN0aXZlcy9waG9uZS1udW1iZXItb25seS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU0vRCxNQUFNLE9BQU8sd0JBQXdCO0lBSnJDO1FBS1csb0JBQWUsR0FBRyxLQUFLLENBQUM7S0E0RGxDO0lBekRDLFNBQVMsQ0FBQyxLQUFvQjtRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWU7WUFBRSxPQUFPO1FBRWxDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFDdEIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQTBCLENBQUM7UUFDL0MsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUM7UUFDekMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUUxQixxQkFBcUI7UUFDckIsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU07WUFDOUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEcsT0FBTztRQUNULENBQUM7UUFFRCx1Q0FBdUM7UUFDdkMsSUFBSSxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDaEIsSUFBSSxNQUFNLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDeEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3pCLENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUVELG9CQUFvQjtRQUNwQixJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQzdCLDBFQUEwRTtZQUMxRSwrREFBK0Q7WUFDL0QsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFlBQVksSUFBSSxNQUFNLENBQUMsQ0FBQztZQUMzRSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQztnQkFDN0MsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3pCLENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUVELHdCQUF3QjtRQUN4QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUdELE9BQU8sQ0FBQyxLQUFxQjtRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWU7WUFBRSxPQUFPO1FBRWxDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM5RCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBMEIsQ0FBQztRQUMvQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQzFCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxZQUFZLElBQUksTUFBTSxDQUFDLENBQUM7UUFFM0Usd0NBQXdDO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLFVBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxZQUFZLElBQUksTUFBTSxDQUFDLENBQUM7UUFFakcsa0ZBQWtGO1FBQ2xGLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQztRQUU5QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzFCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQzsrR0E1RFUsd0JBQXdCO21HQUF4Qix3QkFBd0I7OzRGQUF4Qix3QkFBd0I7a0JBSnBDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzhCQUVVLGVBQWU7c0JBQXZCLEtBQUs7Z0JBR04sU0FBUztzQkFEUixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkF1Q25DLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEhvc3RMaXN0ZW5lciwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW3Bob25lTnVtYmVyT25seV0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWVcclxufSlcclxuZXhwb3J0IGNsYXNzIFBob25lTnVtYmVyT25seURpcmVjdGl2ZSB7XHJcbiAgQElucHV0KCkgcGhvbmVOdW1iZXJPbmx5ID0gZmFsc2U7XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxyXG4gIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKCF0aGlzLnBob25lTnVtYmVyT25seSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleTtcclxuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICBjb25zdCBjdXJzb3IgPSBpbnB1dC5zZWxlY3Rpb25TdGFydCA/PyAwO1xyXG4gICAgY29uc3QgdmFsdWUgPSBpbnB1dC52YWx1ZTtcclxuXHJcbiAgICAvLyBBbGxvdyBjb250cm9sIGtleXNcclxuICAgIGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuYWx0S2V5IHx8XHJcbiAgICAgICAgWydCYWNrc3BhY2UnLCAnVGFiJywgJ0Fycm93TGVmdCcsICdBcnJvd1JpZ2h0JywgJ0RlbGV0ZScsICdIb21lJywgJ0VuZCcsICdFbnRlciddLmluY2x1ZGVzKGtleSkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFsbG93ICcrJyBvbmx5IGF0IHRoZSBmaXJzdCBwb3NpdGlvblxyXG4gICAgaWYgKGtleSA9PT0gJysnKSB7XHJcbiAgICAgIGlmIChjdXJzb3IgIT09IDAgfHwgdmFsdWUuaW5jbHVkZXMoJysnKSkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFsbG93IG9ubHkgZGlnaXRzXHJcbiAgICBpZiAoa2V5ID49ICcwJyAmJiBrZXkgPD0gJzknKSB7XHJcbiAgICAgIC8vIENoZWNrIGZvciBtYXggbGVuZ3RoIDE1IChpZiBub3QgYWxyZWFkeSBoYW5kbGVkIGJ5IG1heExlbmd0aCBhdHRyaWJ1dGUpXHJcbiAgICAgIC8vIE5vdGU6IFdlIHNob3VsZCBhY2NvdW50IGZvciB0aGUgc2VsZWN0ZWQgdGV4dCBiZWluZyByZXBsYWNlZFxyXG4gICAgICBjb25zdCBzZWxlY3RlZFRleHQgPSB2YWx1ZS5zdWJzdHJpbmcoY3Vyc29yLCBpbnB1dC5zZWxlY3Rpb25FbmQgPz8gY3Vyc29yKTtcclxuICAgICAgaWYgKHZhbHVlLmxlbmd0aCAtIHNlbGVjdGVkVGV4dC5sZW5ndGggPj0gMTUpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBCbG9jayBldmVyeXRoaW5nIGVsc2VcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdwYXN0ZScsIFsnJGV2ZW50J10pXHJcbiAgb25QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpIHtcclxuICAgIGlmICghdGhpcy5waG9uZU51bWJlck9ubHkpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBwYXN0ZWREYXRhID0gZXZlbnQuY2xpcGJvYXJkRGF0YT8uZ2V0RGF0YSgndGV4dCcpID8/ICcnO1xyXG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgIGNvbnN0IHZhbHVlID0gaW5wdXQudmFsdWU7XHJcbiAgICBjb25zdCBjdXJzb3IgPSBpbnB1dC5zZWxlY3Rpb25TdGFydCA/PyAwO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRUZXh0ID0gdmFsdWUuc3Vic3RyaW5nKGN1cnNvciwgaW5wdXQuc2VsZWN0aW9uRW5kID8/IGN1cnNvcik7XHJcblxyXG4gICAgLy8gQ29uc3RydWN0IHdoYXQgdGhlIG5ldyB2YWx1ZSB3b3VsZCBiZVxyXG4gICAgY29uc3QgbmV3VmFsdWUgPSB2YWx1ZS5zbGljZSgwLCBjdXJzb3IpICsgcGFzdGVkRGF0YSArIHZhbHVlLnNsaWNlKGlucHV0LnNlbGVjdGlvbkVuZCA/PyBjdXJzb3IpO1xyXG5cclxuICAgIC8vIFJlZ2V4OiBzdGFydHMgd2l0aCBvcHRpb25hbCArLCBmb2xsb3dlZCBieSBvbmx5IGRpZ2l0cywgbWF4IDE1IGNoYXJhY3RlcnMgdG90YWxcclxuICAgIGNvbnN0IHJlZ2V4ID0gL15cXCs/XFxkezAsMTV9JC87XHJcblxyXG4gICAgaWYgKCFyZWdleC50ZXN0KG5ld1ZhbHVlKSkge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|