ngx-rut-v2 1.5.0

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/README.md ADDED
@@ -0,0 +1,103 @@
1
+ # ngx-rut-v2
2
+
3
+ Basado en [ngx-rut](https://github.com/danieldiazastudillo/ngx-rut) pero usando Angular con compontentes, directivas y validaciones _standalone_. Para uso en Angular con módulos se recomienda esa versión.
4
+
5
+ Valida y formatea [RUT Chilenos](https://en.wikipedia.org/wiki/National_identification_number#Chile)
6
+
7
+ ## Installation
8
+
9
+ ```bash
10
+ npm install --save ngx-rut-v2
11
+ ```
12
+
13
+
14
+ ## Set-up:
15
+
16
+ Se deben importar las funciones, directivas & pipes directamente (standalones)
17
+
18
+ ```typescript
19
+ ...
20
+ import { RutValidatorReactive, RutDirective, RutPipe } from 'ngx-rut-v2';
21
+ ...
22
+
23
+ @Component({
24
+ selector: 'app-some-component',
25
+ standalone: true, //IMPORTANTE!
26
+ imports: [
27
+ RutValidatorReactive,
28
+ RutDirective,
29
+ RutPipe
30
+ ]
31
+ })
32
+ class SomeComponent { }
33
+ ```
34
+
35
+
36
+ ## Uso
37
+
38
+ El paquete expone diversas funciones de validación de RUTs. Sin embargo se recomienda usar:
39
+ - `RutValidatorReactive`: Clase que implementa `Validator` para ser usada en formularios reactivos.
40
+ - `RutValidator`: Expone la directiva `validateRut` (para `NgModel` o `inputs` en _Template-Driven Forms_)
41
+ - `RutPipe`: Expone el _pipe_ para formatear texto como RUT
42
+ - `RutDirective`: Expone la directiva `formatRut` para formateo de `inputs`
43
+
44
+
45
+ ### Reactive Forms
46
+
47
+ #### Componente
48
+ ```typescript
49
+ import { FormGroup, FormBuilder, Validators, FormControl } from '@angular/forms';
50
+ import { RutValidatorReactive } from 'ngx-rut-v2';
51
+ export class DemoAppComponent {
52
+ constructor () {
53
+ this.reactiveForm = fb.group({
54
+ rut: ['30972198', [Validators.required, RutValidatorReactive()]]
55
+ });
56
+ }
57
+ }
58
+ ```
59
+
60
+ #### Template
61
+
62
+ ##### Rut Pipe (standalone)
63
+
64
+ ```html
65
+ {{ user.rut }}
66
+ <!-- 30972198 -->
67
+ {{ user.rut | rut }}
68
+ <!-- 3.097.219-8 -->
69
+ ```
70
+
71
+ ##### formatRut (Directiva para inputs)
72
+ ```html
73
+ <input [(ngModel)]="user.rut" name="rut" formatRut required>
74
+ <!--
75
+ (on blur)
76
+ 3.097.219-8
77
+
78
+ (on focus)
79
+ 30972198
80
+ -->
81
+ ```
82
+ ##### Error Form
83
+
84
+ >IMPORTANTE: Por defecto el error que retorna la validación es `invalidRut`
85
+
86
+ ```html
87
+ <mat-form-field>
88
+ <mat-label>RUT</mat-label>
89
+ <input matInput formControlName="rut" formatRut />
90
+ @if (mainForm.get('rut')?.hasError('invalidRut')) {
91
+ <mat-error>El RUT ingresado es <strong>inválido</strong></mat-error>
92
+ }
93
+ </mat-form-field>
94
+ ```
95
+
96
+ ##### Template-Driven Forms
97
+ ```html
98
+ <input [(ngModel)]="user.rut" name="rut" validateRut required>
99
+ ```
100
+
101
+
102
+
103
+
@@ -0,0 +1,44 @@
1
+ import { Directive, forwardRef } from '@angular/core';
2
+ import { NG_VALIDATORS } from '@angular/forms';
3
+ import { rutValidate } from '../helpers/rut-helpers';
4
+ import * as i0 from "@angular/core";
5
+ export function validateRutFactory(rutValidate) {
6
+ return (c) => {
7
+ if (!c.value) {
8
+ return null;
9
+ }
10
+ return rutValidate(c.value) ? null : { invalidRut: true };
11
+ };
12
+ }
13
+ export function RutValidatorReactive() {
14
+ return (control) => {
15
+ if (!control.value) {
16
+ return null;
17
+ }
18
+ return rutValidate(control.value) ? null : { invalidRut: true };
19
+ };
20
+ }
21
+ export class RutValidator {
22
+ validator;
23
+ constructor() {
24
+ this.validator = validateRutFactory(rutValidate);
25
+ }
26
+ validate(c) {
27
+ return this.validator(c);
28
+ }
29
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: RutValidator, deps: [], target: i0.ɵɵFactoryTarget.Directive });
30
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.3", type: RutValidator, isStandalone: true, selector: "[validateRut][ngModel],[validateRut][formControl]", providers: [
31
+ { provide: NG_VALIDATORS, useExisting: forwardRef(() => RutValidator), multi: true },
32
+ ], ngImport: i0 });
33
+ }
34
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: RutValidator, decorators: [{
35
+ type: Directive,
36
+ args: [{
37
+ selector: '[validateRut][ngModel],[validateRut][formControl]',
38
+ providers: [
39
+ { provide: NG_VALIDATORS, useExisting: forwardRef(() => RutValidator), multi: true },
40
+ ],
41
+ standalone: true
42
+ }]
43
+ }], ctorParameters: () => [] });
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnV0LXZhbGlkYXRvci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcnV0LXYyL3NyYy9saWIvZGlyZWN0aXZlcy9ydXQtdmFsaWRhdG9yLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQW1CLGFBQWEsRUFBZ0UsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5SCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBR3JELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxXQUFxQjtJQUN0RCxPQUFPLENBQUMsQ0FBcUIsRUFBRSxFQUFFO1FBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDYixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDNUQsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0I7SUFDbEMsT0FBTyxDQUFDLE9BQXdCLEVBQTJCLEVBQUU7UUFFM0QsSUFBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDbEUsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQVVELE1BQU0sT0FBTyxZQUFZO0lBRWYsU0FBUyxDQUFXO0lBRTVCO1FBQ0UsSUFBSSxDQUFDLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRU0sUUFBUSxDQUFDLENBQXFCO1FBQ25DLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQixDQUFDO3VHQVZVLFlBQVk7MkZBQVosWUFBWSxnR0FMWjtZQUNULEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7U0FDckY7OzJGQUdVLFlBQVk7a0JBUHhCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG1EQUFtRDtvQkFDN0QsU0FBUyxFQUFFO3dCQUNULEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO3FCQUNyRjtvQkFDRCxVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBOR19WQUxJREFUT1JTLCBVbnR5cGVkRm9ybUNvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvciwgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IHJ1dFZhbGlkYXRlIH0gZnJvbSAnLi4vaGVscGVycy9ydXQtaGVscGVycyc7XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUnV0RmFjdG9yeShydXRWYWxpZGF0ZTogRnVuY3Rpb24pIHtcclxuICByZXR1cm4gKGM6IFVudHlwZWRGb3JtQ29udHJvbCkgPT4ge1xyXG4gICAgaWYgKCFjLnZhbHVlKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJ1dFZhbGlkYXRlKGMudmFsdWUpID8gbnVsbCA6IHsgaW52YWxpZFJ1dDogdHJ1ZSB9O1xyXG4gIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBSdXRWYWxpZGF0b3JSZWFjdGl2ZSgpOiBWYWxpZGF0b3JGbiB7XHJcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XHJcblxyXG4gICAgaWYoIWNvbnRyb2wudmFsdWUpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcnV0VmFsaWRhdGUoY29udHJvbC52YWx1ZSkgPyBudWxsIDogeyBpbnZhbGlkUnV0OiB0cnVlIH07XHJcbiAgfTtcclxufVxyXG5cclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW3ZhbGlkYXRlUnV0XVtuZ01vZGVsXSxbdmFsaWRhdGVSdXRdW2Zvcm1Db250cm9sXScsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7IHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFJ1dFZhbGlkYXRvciksIG11bHRpOiB0cnVlIH0sXHJcbiAgXSxcclxuICBzdGFuZGFsb25lOiB0cnVlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSdXRWYWxpZGF0b3IgaW1wbGVtZW50cyBWYWxpZGF0b3Ige1xyXG5cclxuICBwcml2YXRlIHZhbGlkYXRvcjogRnVuY3Rpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy52YWxpZGF0b3IgPSB2YWxpZGF0ZVJ1dEZhY3RvcnkocnV0VmFsaWRhdGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHZhbGlkYXRlKGM6IFVudHlwZWRGb3JtQ29udHJvbCkge1xyXG4gICAgcmV0dXJuIHRoaXMudmFsaWRhdG9yKGMpO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
@@ -0,0 +1,40 @@
1
+ import { Directive, forwardRef } from '@angular/core';
2
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import { rutFormat } from '../helpers/rut-helpers';
4
+ import * as i0 from "@angular/core";
5
+ const RUT_VALUE_ACCESSOR = {
6
+ provide: NG_VALUE_ACCESSOR,
7
+ useExisting: forwardRef(() => RutValueAccessor),
8
+ multi: true,
9
+ };
10
+ export class RutValueAccessor {
11
+ renderer;
12
+ elementRef;
13
+ constructor(renderer, elementRef) {
14
+ this.renderer = renderer;
15
+ this.elementRef = elementRef;
16
+ }
17
+ onChange = (_) => { };
18
+ onTouched = () => { };
19
+ writeValue(value) {
20
+ let normalizedValue = rutFormat(value) || '';
21
+ this.renderer.setProperty(this.elementRef.nativeElement, 'value', normalizedValue);
22
+ }
23
+ registerOnChange(fn) { this.onChange = fn; }
24
+ registerOnTouched(fn) { this.onTouched = fn; }
25
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: RutValueAccessor, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
26
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.3", type: RutValueAccessor, isStandalone: true, selector: "input[formatRut]", host: { listeners: { "rutChange": "onChange($event)", "blur": "onTouched($event)" } }, providers: [RUT_VALUE_ACCESSOR], ngImport: i0 });
27
+ }
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: RutValueAccessor, decorators: [{
29
+ type: Directive,
30
+ args: [{
31
+ selector: 'input[formatRut]',
32
+ host: {
33
+ '(rutChange)': 'onChange($event)',
34
+ '(blur)': 'onTouched($event)',
35
+ },
36
+ standalone: true,
37
+ providers: [RUT_VALUE_ACCESSOR],
38
+ }]
39
+ }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }] });
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnV0LXZhbHVlLWFjY2Vzc29yLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ydXQtdjIvc3JjL2xpYi9kaXJlY3RpdmVzL3J1dC12YWx1ZS1hY2Nlc3Nvci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFJbkQsTUFBTSxrQkFBa0IsR0FBUTtJQUM5QixPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7SUFDL0MsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBV0YsTUFBTSxPQUFPLGdCQUFnQjtJQUVqQjtJQUNBO0lBRlYsWUFDVSxRQUFtQixFQUNuQixVQUFzQjtRQUR0QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLGVBQVUsR0FBVixVQUFVLENBQVk7SUFDMUIsQ0FBQztJQUVBLFFBQVEsR0FBUSxDQUFDLENBQU0sRUFBRSxFQUFFLEdBQWEsQ0FBQyxDQUFDO0lBQzFDLFNBQVMsR0FBUSxHQUFHLEVBQUUsR0FBYSxDQUFDLENBQUM7SUFFckMsVUFBVSxDQUFDLEtBQVU7UUFDMUIsSUFBSSxlQUFlLEdBQVcsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyRCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVNLGdCQUFnQixDQUFDLEVBQW9CLElBQVUsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLGlCQUFpQixDQUFDLEVBQWMsSUFBVSxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7dUdBZjVELGdCQUFnQjsyRkFBaEIsZ0JBQWdCLHNKQUZoQixDQUFDLGtCQUFrQixDQUFDOzsyRkFFcEIsZ0JBQWdCO2tCQVQ1QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLElBQUksRUFBRTt3QkFDSixhQUFhLEVBQUUsa0JBQWtCO3dCQUNqQyxRQUFRLEVBQUUsbUJBQW1CO3FCQUM5QjtvQkFDRCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsU0FBUyxFQUFFLENBQUMsa0JBQWtCLENBQUM7aUJBQ2hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgcnV0Rm9ybWF0IH0gZnJvbSAnLi4vaGVscGVycy9ydXQtaGVscGVycyc7XHJcblxyXG5pbXBvcnQgeyBFbGVtZW50UmVmLCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmNvbnN0IFJVVF9WQUxVRV9BQ0NFU1NPUjogYW55ID0ge1xyXG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFJ1dFZhbHVlQWNjZXNzb3IpLFxyXG4gIG11bHRpOiB0cnVlLFxyXG59O1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdpbnB1dFtmb3JtYXRSdXRdJyxcclxuICBob3N0OiB7XHJcbiAgICAnKHJ1dENoYW5nZSknOiAnb25DaGFuZ2UoJGV2ZW50KScsXHJcbiAgICAnKGJsdXIpJzogJ29uVG91Y2hlZCgkZXZlbnQpJyxcclxuICB9LFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgcHJvdmlkZXJzOiBbUlVUX1ZBTFVFX0FDQ0VTU09SXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJ1dFZhbHVlQWNjZXNzb3IgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICApIHsgfVxyXG5cclxuICBwdWJsaWMgb25DaGFuZ2U6IGFueSA9IChfOiBhbnkpID0+IHsgLypFbXB0eSovIH07XHJcbiAgcHVibGljIG9uVG91Y2hlZDogYW55ID0gKCkgPT4geyAvKkVtcHR5Ki8gfTtcclxuXHJcbiAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgbGV0IG5vcm1hbGl6ZWRWYWx1ZTogc3RyaW5nID0gcnV0Rm9ybWF0KHZhbHVlKSB8fCAnJztcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICd2YWx1ZScsIG5vcm1hbGl6ZWRWYWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKF86IGFueSkgPT4gdm9pZCk6IHZvaWQgeyB0aGlzLm9uQ2hhbmdlID0gZm47IH1cclxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHsgdGhpcy5vblRvdWNoZWQgPSBmbjsgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,38 @@
1
+ import { Directive, EventEmitter, Output } from '@angular/core';
2
+ import * as rutHelpers from '../helpers/rut-helpers';
3
+ import * as i0 from "@angular/core";
4
+ export class RutDirective {
5
+ rutChange;
6
+ constructor() {
7
+ this.rutChange = new EventEmitter();
8
+ }
9
+ onFocus(ev) {
10
+ let htmlInputElement = ev.target;
11
+ htmlInputElement.value = rutHelpers.rutClean(htmlInputElement.value);
12
+ }
13
+ onBlur(ev) {
14
+ let htmlInputElement = ev.target;
15
+ htmlInputElement.value = rutHelpers.rutFormat(htmlInputElement.value) || '';
16
+ }
17
+ onChange(ev) {
18
+ let htmlInputElement = ev.target;
19
+ this.rutChange.emit(rutHelpers.rutClean(htmlInputElement.value));
20
+ }
21
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: RutDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
22
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.3", type: RutDirective, isStandalone: true, selector: "[formatRut]", outputs: { rutChange: "rutChange" }, host: { listeners: { "blur": "onBlur($event)", "focus": "onFocus($event)", "input": "onChange($event)" } }, ngImport: i0 });
23
+ }
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: RutDirective, decorators: [{
25
+ type: Directive,
26
+ args: [{
27
+ selector: '[formatRut]',
28
+ host: {
29
+ '(blur)': 'onBlur($event)',
30
+ '(focus)': 'onFocus($event)',
31
+ '(input)': 'onChange($event)',
32
+ },
33
+ standalone: true
34
+ }]
35
+ }], ctorParameters: () => [], propDecorators: { rutChange: [{
36
+ type: Output
37
+ }] } });
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnV0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ydXQtdjIvc3JjL2xpYi9kaXJlY3RpdmVzL3J1dC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sS0FBSyxVQUFVLE1BQU0sd0JBQXdCLENBQUM7O0FBV3JELE1BQU0sT0FBTyxZQUFZO0lBQ04sU0FBUyxDQUFvQjtJQUU5QztRQUNFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRU0sT0FBTyxDQUFDLEVBQVM7UUFDdEIsSUFBSSxnQkFBZ0IsR0FBd0MsRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUN0RSxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRU0sTUFBTSxDQUFDLEVBQVM7UUFDckIsSUFBSSxnQkFBZ0IsR0FBd0MsRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUN0RSxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUUsQ0FBQztJQUVNLFFBQVEsQ0FBQyxFQUFTO1FBQ3ZCLElBQUksZ0JBQWdCLEdBQXdDLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDdEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7dUdBcEJVLFlBQVk7MkZBQVosWUFBWTs7MkZBQVosWUFBWTtrQkFUeEIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsSUFBSSxFQUFFO3dCQUNKLFFBQVEsRUFBRSxnQkFBZ0I7d0JBQzFCLFNBQVMsRUFBRSxpQkFBaUI7d0JBQzVCLFNBQVMsRUFBRSxrQkFBa0I7cUJBQzlCO29CQUNELFVBQVUsRUFBRSxJQUFJO2lCQUNqQjt3REFFa0IsU0FBUztzQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCAqIGFzIHJ1dEhlbHBlcnMgZnJvbSAnLi4vaGVscGVycy9ydXQtaGVscGVycyc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tmb3JtYXRSdXRdJyxcclxuICBob3N0OiB7XHJcbiAgICAnKGJsdXIpJzogJ29uQmx1cigkZXZlbnQpJyxcclxuICAgICcoZm9jdXMpJzogJ29uRm9jdXMoJGV2ZW50KScsXHJcbiAgICAnKGlucHV0KSc6ICdvbkNoYW5nZSgkZXZlbnQpJyxcclxuICB9LFxyXG4gIHN0YW5kYWxvbmU6IHRydWVcclxufSlcclxuZXhwb3J0IGNsYXNzIFJ1dERpcmVjdGl2ZSB7XHJcbiAgQE91dHB1dCgpIHB1YmxpYyBydXRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMucnV0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uRm9jdXMoZXY6IEV2ZW50KSB7XHJcbiAgICBsZXQgaHRtbElucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudCA9IDxIVE1MSW5wdXRFbGVtZW50PiBldi50YXJnZXQ7XHJcbiAgICBodG1sSW5wdXRFbGVtZW50LnZhbHVlID0gcnV0SGVscGVycy5ydXRDbGVhbihodG1sSW5wdXRFbGVtZW50LnZhbHVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkJsdXIoZXY6IEV2ZW50KSB7XHJcbiAgICBsZXQgaHRtbElucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudCA9IDxIVE1MSW5wdXRFbGVtZW50PiBldi50YXJnZXQ7XHJcbiAgICBodG1sSW5wdXRFbGVtZW50LnZhbHVlID0gcnV0SGVscGVycy5ydXRGb3JtYXQoaHRtbElucHV0RWxlbWVudC52YWx1ZSkgfHwgJyc7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DaGFuZ2UoZXY6IEV2ZW50KSB7XHJcbiAgICBsZXQgaHRtbElucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudCA9IDxIVE1MSW5wdXRFbGVtZW50PiBldi50YXJnZXQ7XHJcbiAgICB0aGlzLnJ1dENoYW5nZS5lbWl0KHJ1dEhlbHBlcnMucnV0Q2xlYW4oaHRtbElucHV0RWxlbWVudC52YWx1ZSkpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,36 @@
1
+ export function rutClean(value) {
2
+ if (typeof value === 'string') {
3
+ return value
4
+ .replace(/[^0-9kK]+/g, '')
5
+ .replace(/^0+/, '')
6
+ .toUpperCase();
7
+ }
8
+ return '';
9
+ }
10
+ export function rutValidate(value) {
11
+ if (typeof value !== 'string') {
12
+ return false;
13
+ }
14
+ const rut = rutClean(value);
15
+ let rutDigits = parseInt(rut.slice(0, -1), 10);
16
+ let m = 0;
17
+ let s = 1;
18
+ while (rutDigits > 0) {
19
+ s = (s + rutDigits % 10 * (9 - m++ % 6)) % 11;
20
+ rutDigits = Math.floor(rutDigits / 10);
21
+ }
22
+ const checkDigit = (s > 0) ? String((s - 1)) : 'K';
23
+ return (checkDigit === rut.slice(-1));
24
+ }
25
+ export function rutFormat(value) {
26
+ const rut = rutClean(value);
27
+ if (rut.length <= 1) {
28
+ return rut;
29
+ }
30
+ let result = `${rut.slice(-4, -1)}-${rut.substr(rut.length - 1)}`;
31
+ for (let i = 4; i < rut.length; i += 3) {
32
+ result = `${rut.slice(-3 - i, -i)}.${result}`;
33
+ }
34
+ return result;
35
+ }
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnV0LWhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcnV0LXYyL3NyYy9saWIvaGVscGVycy9ydXQtaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsUUFBUSxDQUFDLEtBQWE7SUFDcEMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5QixPQUFPLEtBQUs7YUFDVCxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQzthQUN6QixPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQzthQUNsQixXQUFXLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBQ0QsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxLQUFhO0lBQ3ZDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxHQUFHLEdBQVcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLElBQUksU0FBUyxHQUFXLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELElBQUksQ0FBQyxHQUFXLENBQUMsQ0FBQztJQUNsQixJQUFJLENBQUMsR0FBVyxDQUFDLENBQUM7SUFFbEIsT0FBTyxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDckIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDOUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFDRCxNQUFNLFVBQVUsR0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUUzRCxPQUFPLENBQUMsVUFBVSxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLEtBQWE7SUFDckMsTUFBTSxHQUFHLEdBQVcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXBDLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNwQixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxJQUFJLE1BQU0sR0FBVyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMxRSxLQUFLLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDL0MsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBydXRDbGVhbih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgIHJldHVybiB2YWx1ZVxyXG4gICAgICAucmVwbGFjZSgvW14wLTlrS10rL2csICcnKVxyXG4gICAgICAucmVwbGFjZSgvXjArLywgJycpXHJcbiAgICAgIC50b1VwcGVyQ2FzZSgpO1xyXG4gIH1cclxuICByZXR1cm4gJyc7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBydXRWYWxpZGF0ZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGNvbnN0IHJ1dDogc3RyaW5nID0gcnV0Q2xlYW4odmFsdWUpO1xyXG4gIGxldCBydXREaWdpdHM6IG51bWJlciA9IHBhcnNlSW50KHJ1dC5zbGljZSgwLCAtMSksIDEwKTtcclxuICBsZXQgbTogbnVtYmVyID0gMDtcclxuICBsZXQgczogbnVtYmVyID0gMTtcclxuXHJcbiAgd2hpbGUgKHJ1dERpZ2l0cyA+IDApIHtcclxuICAgIHMgPSAocyArIHJ1dERpZ2l0cyAlIDEwICogKDkgLSBtKysgJSA2KSkgJSAxMTtcclxuICAgIHJ1dERpZ2l0cyA9IE1hdGguZmxvb3IocnV0RGlnaXRzIC8gMTApO1xyXG4gIH1cclxuICBjb25zdCBjaGVja0RpZ2l0OiBzdHJpbmcgPSAocyA+IDApID8gU3RyaW5nKChzIC0gMSkpIDogJ0snO1xyXG5cclxuICByZXR1cm4gKGNoZWNrRGlnaXQgPT09IHJ1dC5zbGljZSgtMSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcnV0Rm9ybWF0KHZhbHVlOiBzdHJpbmcpIHtcclxuICBjb25zdCBydXQ6IHN0cmluZyA9IHJ1dENsZWFuKHZhbHVlKTtcclxuXHJcbiAgaWYgKHJ1dC5sZW5ndGggPD0gMSkge1xyXG4gICAgcmV0dXJuIHJ1dDtcclxuICB9XHJcblxyXG4gIGxldCByZXN1bHQ6IHN0cmluZyA9IGAke3J1dC5zbGljZSgtNCwgLTEpfS0ke3J1dC5zdWJzdHIocnV0Lmxlbmd0aCAtIDEpfWA7XHJcbiAgZm9yIChsZXQgaTogbnVtYmVyID0gNDsgaSA8IHJ1dC5sZW5ndGg7IGkgKz0gMykge1xyXG4gICAgcmVzdWx0ID0gYCR7cnV0LnNsaWNlKC0zIC0gaSwgLWkpfS4ke3Jlc3VsdH1gO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG4iXX0=
@@ -0,0 +1,18 @@
1
+ import { Pipe } from '@angular/core';
2
+ import { rutFormat } from '../helpers/rut-helpers';
3
+ import * as i0 from "@angular/core";
4
+ export class RutPipe {
5
+ transform(value) {
6
+ return rutFormat(value);
7
+ }
8
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: RutPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
9
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.1.3", ngImport: i0, type: RutPipe, isStandalone: true, name: "rut" });
10
+ }
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: RutPipe, decorators: [{
12
+ type: Pipe,
13
+ args: [{
14
+ name: 'rut',
15
+ standalone: true
16
+ }]
17
+ }] });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnV0LnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcnV0LXYyL3NyYy9saWIvcGlwZXMvcnV0LnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQU1uRCxNQUFNLE9BQU8sT0FBTztJQUNYLFNBQVMsQ0FBQyxLQUFhO1FBQzVCLE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLENBQUM7dUdBSFUsT0FBTztxR0FBUCxPQUFPOzsyRkFBUCxPQUFPO2tCQUpuQixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxLQUFLO29CQUNYLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgcnV0Rm9ybWF0IH0gZnJvbSAnLi4vaGVscGVycy9ydXQtaGVscGVycyc7XHJcblxyXG5AUGlwZSh7XHJcbiAgbmFtZTogJ3J1dCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUnV0UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xyXG4gIHB1YmxpYyB0cmFuc2Zvcm0odmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gcnV0Rm9ybWF0KHZhbHVlKTtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXJ1dC12Mi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1ydXQtdjIvc3JjL25neC1ydXQtdjIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -0,0 +1,9 @@
1
+ /*
2
+ * Public API Surface of ngx-rut-v2
3
+ */
4
+ export * from './lib/helpers/rut-helpers';
5
+ export * from './lib/directives/rut-validator.directive';
6
+ export * from './lib/directives/rut-value-accessor.directive';
7
+ export * from './lib/directives/rut.directive';
8
+ export * from './lib/pipes/rut.pipe';
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1ydXQtdjIvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2Ygbmd4LXJ1dC12MlxyXG4gKi9cclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2hlbHBlcnMvcnV0LWhlbHBlcnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL3J1dC12YWxpZGF0b3IuZGlyZWN0aXZlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9ydXQtdmFsdWUtYWNjZXNzb3IuZGlyZWN0aXZlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9ydXQuZGlyZWN0aXZlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvcGlwZXMvcnV0LnBpcGUnO1xyXG4iXX0=
@@ -0,0 +1,176 @@
1
+ import * as i0 from '@angular/core';
2
+ import { forwardRef, Directive, EventEmitter, Output, Pipe } from '@angular/core';
3
+ import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
4
+
5
+ function rutClean(value) {
6
+ if (typeof value === 'string') {
7
+ return value
8
+ .replace(/[^0-9kK]+/g, '')
9
+ .replace(/^0+/, '')
10
+ .toUpperCase();
11
+ }
12
+ return '';
13
+ }
14
+ function rutValidate(value) {
15
+ if (typeof value !== 'string') {
16
+ return false;
17
+ }
18
+ const rut = rutClean(value);
19
+ let rutDigits = parseInt(rut.slice(0, -1), 10);
20
+ let m = 0;
21
+ let s = 1;
22
+ while (rutDigits > 0) {
23
+ s = (s + rutDigits % 10 * (9 - m++ % 6)) % 11;
24
+ rutDigits = Math.floor(rutDigits / 10);
25
+ }
26
+ const checkDigit = (s > 0) ? String((s - 1)) : 'K';
27
+ return (checkDigit === rut.slice(-1));
28
+ }
29
+ function rutFormat(value) {
30
+ const rut = rutClean(value);
31
+ if (rut.length <= 1) {
32
+ return rut;
33
+ }
34
+ let result = `${rut.slice(-4, -1)}-${rut.substr(rut.length - 1)}`;
35
+ for (let i = 4; i < rut.length; i += 3) {
36
+ result = `${rut.slice(-3 - i, -i)}.${result}`;
37
+ }
38
+ return result;
39
+ }
40
+
41
+ function validateRutFactory(rutValidate) {
42
+ return (c) => {
43
+ if (!c.value) {
44
+ return null;
45
+ }
46
+ return rutValidate(c.value) ? null : { invalidRut: true };
47
+ };
48
+ }
49
+ function RutValidatorReactive() {
50
+ return (control) => {
51
+ if (!control.value) {
52
+ return null;
53
+ }
54
+ return rutValidate(control.value) ? null : { invalidRut: true };
55
+ };
56
+ }
57
+ class RutValidator {
58
+ validator;
59
+ constructor() {
60
+ this.validator = validateRutFactory(rutValidate);
61
+ }
62
+ validate(c) {
63
+ return this.validator(c);
64
+ }
65
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: RutValidator, deps: [], target: i0.ɵɵFactoryTarget.Directive });
66
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.3", type: RutValidator, isStandalone: true, selector: "[validateRut][ngModel],[validateRut][formControl]", providers: [
67
+ { provide: NG_VALIDATORS, useExisting: forwardRef(() => RutValidator), multi: true },
68
+ ], ngImport: i0 });
69
+ }
70
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: RutValidator, decorators: [{
71
+ type: Directive,
72
+ args: [{
73
+ selector: '[validateRut][ngModel],[validateRut][formControl]',
74
+ providers: [
75
+ { provide: NG_VALIDATORS, useExisting: forwardRef(() => RutValidator), multi: true },
76
+ ],
77
+ standalone: true
78
+ }]
79
+ }], ctorParameters: () => [] });
80
+
81
+ const RUT_VALUE_ACCESSOR = {
82
+ provide: NG_VALUE_ACCESSOR,
83
+ useExisting: forwardRef(() => RutValueAccessor),
84
+ multi: true,
85
+ };
86
+ class RutValueAccessor {
87
+ renderer;
88
+ elementRef;
89
+ constructor(renderer, elementRef) {
90
+ this.renderer = renderer;
91
+ this.elementRef = elementRef;
92
+ }
93
+ onChange = (_) => { };
94
+ onTouched = () => { };
95
+ writeValue(value) {
96
+ let normalizedValue = rutFormat(value) || '';
97
+ this.renderer.setProperty(this.elementRef.nativeElement, 'value', normalizedValue);
98
+ }
99
+ registerOnChange(fn) { this.onChange = fn; }
100
+ registerOnTouched(fn) { this.onTouched = fn; }
101
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: RutValueAccessor, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
102
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.3", type: RutValueAccessor, isStandalone: true, selector: "input[formatRut]", host: { listeners: { "rutChange": "onChange($event)", "blur": "onTouched($event)" } }, providers: [RUT_VALUE_ACCESSOR], ngImport: i0 });
103
+ }
104
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: RutValueAccessor, decorators: [{
105
+ type: Directive,
106
+ args: [{
107
+ selector: 'input[formatRut]',
108
+ host: {
109
+ '(rutChange)': 'onChange($event)',
110
+ '(blur)': 'onTouched($event)',
111
+ },
112
+ standalone: true,
113
+ providers: [RUT_VALUE_ACCESSOR],
114
+ }]
115
+ }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }] });
116
+
117
+ class RutDirective {
118
+ rutChange;
119
+ constructor() {
120
+ this.rutChange = new EventEmitter();
121
+ }
122
+ onFocus(ev) {
123
+ let htmlInputElement = ev.target;
124
+ htmlInputElement.value = rutClean(htmlInputElement.value);
125
+ }
126
+ onBlur(ev) {
127
+ let htmlInputElement = ev.target;
128
+ htmlInputElement.value = rutFormat(htmlInputElement.value) || '';
129
+ }
130
+ onChange(ev) {
131
+ let htmlInputElement = ev.target;
132
+ this.rutChange.emit(rutClean(htmlInputElement.value));
133
+ }
134
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: RutDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
135
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.3", type: RutDirective, isStandalone: true, selector: "[formatRut]", outputs: { rutChange: "rutChange" }, host: { listeners: { "blur": "onBlur($event)", "focus": "onFocus($event)", "input": "onChange($event)" } }, ngImport: i0 });
136
+ }
137
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: RutDirective, decorators: [{
138
+ type: Directive,
139
+ args: [{
140
+ selector: '[formatRut]',
141
+ host: {
142
+ '(blur)': 'onBlur($event)',
143
+ '(focus)': 'onFocus($event)',
144
+ '(input)': 'onChange($event)',
145
+ },
146
+ standalone: true
147
+ }]
148
+ }], ctorParameters: () => [], propDecorators: { rutChange: [{
149
+ type: Output
150
+ }] } });
151
+
152
+ class RutPipe {
153
+ transform(value) {
154
+ return rutFormat(value);
155
+ }
156
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: RutPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
157
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.1.3", ngImport: i0, type: RutPipe, isStandalone: true, name: "rut" });
158
+ }
159
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: RutPipe, decorators: [{
160
+ type: Pipe,
161
+ args: [{
162
+ name: 'rut',
163
+ standalone: true
164
+ }]
165
+ }] });
166
+
167
+ /*
168
+ * Public API Surface of ngx-rut-v2
169
+ */
170
+
171
+ /**
172
+ * Generated bundle index. Do not edit.
173
+ */
174
+
175
+ export { RutDirective, RutPipe, RutValidator, RutValidatorReactive, RutValueAccessor, rutClean, rutFormat, rutValidate, validateRutFactory };
176
+ //# sourceMappingURL=ngx-rut-v2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngx-rut-v2.mjs","sources":["../../../projects/ngx-rut-v2/src/lib/helpers/rut-helpers.ts","../../../projects/ngx-rut-v2/src/lib/directives/rut-validator.directive.ts","../../../projects/ngx-rut-v2/src/lib/directives/rut-value-accessor.directive.ts","../../../projects/ngx-rut-v2/src/lib/directives/rut.directive.ts","../../../projects/ngx-rut-v2/src/lib/pipes/rut.pipe.ts","../../../projects/ngx-rut-v2/src/public-api.ts","../../../projects/ngx-rut-v2/src/ngx-rut-v2.ts"],"sourcesContent":["export function rutClean(value: string) {\r\n if (typeof value === 'string') {\r\n return value\r\n .replace(/[^0-9kK]+/g, '')\r\n .replace(/^0+/, '')\r\n .toUpperCase();\r\n }\r\n return '';\r\n}\r\n\r\nexport function rutValidate(value: string) {\r\n if (typeof value !== 'string') {\r\n return false;\r\n }\r\n\r\n const rut: string = rutClean(value);\r\n let rutDigits: number = parseInt(rut.slice(0, -1), 10);\r\n let m: number = 0;\r\n let s: number = 1;\r\n\r\n while (rutDigits > 0) {\r\n s = (s + rutDigits % 10 * (9 - m++ % 6)) % 11;\r\n rutDigits = Math.floor(rutDigits / 10);\r\n }\r\n const checkDigit: string = (s > 0) ? String((s - 1)) : 'K';\r\n\r\n return (checkDigit === rut.slice(-1));\r\n}\r\n\r\nexport function rutFormat(value: string) {\r\n const rut: string = rutClean(value);\r\n\r\n if (rut.length <= 1) {\r\n return rut;\r\n }\r\n\r\n let result: string = `${rut.slice(-4, -1)}-${rut.substr(rut.length - 1)}`;\r\n for (let i: number = 4; i < rut.length; i += 3) {\r\n result = `${rut.slice(-3 - i, -i)}.${result}`;\r\n }\r\n\r\n return result;\r\n}\r\n","import { Directive, forwardRef } from '@angular/core';\r\nimport { AbstractControl, NG_VALIDATORS, UntypedFormControl, ValidationErrors, Validator, ValidatorFn } from '@angular/forms';\r\nimport { rutValidate } from '../helpers/rut-helpers';\r\n\r\n\r\nexport function validateRutFactory(rutValidate: Function) {\r\n return (c: UntypedFormControl) => {\r\n if (!c.value) {\r\n return null;\r\n }\r\n return rutValidate(c.value) ? null : { invalidRut: true };\r\n };\r\n}\r\n\r\nexport function RutValidatorReactive(): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n\r\n if(!control.value) {\r\n return null;\r\n }\r\n return rutValidate(control.value) ? null : { invalidRut: true };\r\n };\r\n}\r\n\r\n\r\n@Directive({\r\n selector: '[validateRut][ngModel],[validateRut][formControl]',\r\n providers: [\r\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => RutValidator), multi: true },\r\n ],\r\n standalone: true\r\n})\r\nexport class RutValidator implements Validator {\r\n\r\n private validator: Function;\r\n\r\n constructor() {\r\n this.validator = validateRutFactory(rutValidate);\r\n }\r\n\r\n public validate(c: UntypedFormControl) {\r\n return this.validator(c);\r\n }\r\n\r\n}\r\n","import { Directive, forwardRef } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { rutFormat } from '../helpers/rut-helpers';\r\n\r\nimport { ElementRef, Renderer2 } from '@angular/core';\r\n\r\nconst RUT_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => RutValueAccessor),\r\n multi: true,\r\n};\r\n\r\n@Directive({\r\n selector: 'input[formatRut]',\r\n host: {\r\n '(rutChange)': 'onChange($event)',\r\n '(blur)': 'onTouched($event)',\r\n },\r\n standalone: true,\r\n providers: [RUT_VALUE_ACCESSOR],\r\n})\r\nexport class RutValueAccessor implements ControlValueAccessor {\r\n constructor(\r\n private renderer: Renderer2,\r\n private elementRef: ElementRef,\r\n ) { }\r\n\r\n public onChange: any = (_: any) => { /*Empty*/ };\r\n public onTouched: any = () => { /*Empty*/ };\r\n\r\n public writeValue(value: any): void {\r\n let normalizedValue: string = rutFormat(value) || '';\r\n this.renderer.setProperty(this.elementRef.nativeElement, 'value', normalizedValue);\r\n }\r\n\r\n public registerOnChange(fn: (_: any) => void): void { this.onChange = fn; }\r\n public registerOnTouched(fn: () => void): void { this.onTouched = fn; }\r\n}\r\n","import {Directive, EventEmitter, Output} from '@angular/core';\r\nimport * as rutHelpers from '../helpers/rut-helpers';\r\n\r\n@Directive({\r\n selector: '[formatRut]',\r\n host: {\r\n '(blur)': 'onBlur($event)',\r\n '(focus)': 'onFocus($event)',\r\n '(input)': 'onChange($event)',\r\n },\r\n standalone: true\r\n})\r\nexport class RutDirective {\r\n @Output() public rutChange: EventEmitter<any>;\r\n\r\n constructor() {\r\n this.rutChange = new EventEmitter();\r\n }\r\n\r\n public onFocus(ev: Event) {\r\n let htmlInputElement: HTMLInputElement = <HTMLInputElement> ev.target;\r\n htmlInputElement.value = rutHelpers.rutClean(htmlInputElement.value);\r\n }\r\n\r\n public onBlur(ev: Event) {\r\n let htmlInputElement: HTMLInputElement = <HTMLInputElement> ev.target;\r\n htmlInputElement.value = rutHelpers.rutFormat(htmlInputElement.value) || '';\r\n }\r\n\r\n public onChange(ev: Event) {\r\n let htmlInputElement: HTMLInputElement = <HTMLInputElement> ev.target;\r\n this.rutChange.emit(rutHelpers.rutClean(htmlInputElement.value));\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { rutFormat } from '../helpers/rut-helpers';\r\n\r\n@Pipe({\r\n name: 'rut',\r\n standalone: true\r\n})\r\nexport class RutPipe implements PipeTransform {\r\n public transform(value: string): string {\r\n return rutFormat(value);\r\n }\r\n}\r\n","/*\r\n * Public API Surface of ngx-rut-v2\r\n */\r\n\r\nexport * from './lib/helpers/rut-helpers';\r\nexport * from './lib/directives/rut-validator.directive';\r\nexport * from './lib/directives/rut-value-accessor.directive';\r\nexport * from './lib/directives/rut.directive';\r\nexport * from './lib/pipes/rut.pipe';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["rutHelpers.rutClean","rutHelpers.rutFormat"],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="ngx-rut-v2" />
5
+ export * from './public-api';
@@ -0,0 +1,13 @@
1
+ import { UntypedFormControl, Validator, ValidatorFn } from '@angular/forms';
2
+ import * as i0 from "@angular/core";
3
+ export declare function validateRutFactory(rutValidate: Function): (c: UntypedFormControl) => {
4
+ invalidRut: boolean;
5
+ } | null;
6
+ export declare function RutValidatorReactive(): ValidatorFn;
7
+ export declare class RutValidator implements Validator {
8
+ private validator;
9
+ constructor();
10
+ validate(c: UntypedFormControl): any;
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<RutValidator, never>;
12
+ static ɵdir: i0.ɵɵDirectiveDeclaration<RutValidator, "[validateRut][ngModel],[validateRut][formControl]", never, {}, {}, never, never, true, never>;
13
+ }
@@ -0,0 +1,15 @@
1
+ import { ControlValueAccessor } from '@angular/forms';
2
+ import { ElementRef, Renderer2 } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ export declare class RutValueAccessor implements ControlValueAccessor {
5
+ private renderer;
6
+ private elementRef;
7
+ constructor(renderer: Renderer2, elementRef: ElementRef);
8
+ onChange: any;
9
+ onTouched: any;
10
+ writeValue(value: any): void;
11
+ registerOnChange(fn: (_: any) => void): void;
12
+ registerOnTouched(fn: () => void): void;
13
+ static ɵfac: i0.ɵɵFactoryDeclaration<RutValueAccessor, never>;
14
+ static ɵdir: i0.ɵɵDirectiveDeclaration<RutValueAccessor, "input[formatRut]", never, {}, {}, never, never, true, never>;
15
+ }
@@ -0,0 +1,11 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class RutDirective {
4
+ rutChange: EventEmitter<any>;
5
+ constructor();
6
+ onFocus(ev: Event): void;
7
+ onBlur(ev: Event): void;
8
+ onChange(ev: Event): void;
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<RutDirective, never>;
10
+ static ɵdir: i0.ɵɵDirectiveDeclaration<RutDirective, "[formatRut]", never, {}, { "rutChange": "rutChange"; }, never, never, true, never>;
11
+ }
@@ -0,0 +1,3 @@
1
+ export declare function rutClean(value: string): string;
2
+ export declare function rutValidate(value: string): boolean;
3
+ export declare function rutFormat(value: string): string;
@@ -0,0 +1,7 @@
1
+ import { PipeTransform } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class RutPipe implements PipeTransform {
4
+ transform(value: string): string;
5
+ static ɵfac: i0.ɵɵFactoryDeclaration<RutPipe, never>;
6
+ static ɵpipe: i0.ɵɵPipeDeclaration<RutPipe, "rut", true>;
7
+ }
package/package.json ADDED
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "ngx-rut-v2",
3
+ "version": "1.5.0",
4
+ "private": false,
5
+ "peerDependencies": {
6
+ "@angular/common": "^18.1.0",
7
+ "@angular/core": "^18.1.0"
8
+ },
9
+ "dependencies": {
10
+ "tslib": "^2.3.0"
11
+ },
12
+ "sideEffects": false,
13
+ "module": "fesm2022/ngx-rut-v2.mjs",
14
+ "typings": "index.d.ts",
15
+ "exports": {
16
+ "./package.json": {
17
+ "default": "./package.json"
18
+ },
19
+ ".": {
20
+ "types": "./index.d.ts",
21
+ "esm2022": "./esm2022/ngx-rut-v2.mjs",
22
+ "esm": "./esm2022/ngx-rut-v2.mjs",
23
+ "default": "./fesm2022/ngx-rut-v2.mjs"
24
+ }
25
+ }
26
+ }
@@ -0,0 +1,5 @@
1
+ export * from './lib/helpers/rut-helpers';
2
+ export * from './lib/directives/rut-validator.directive';
3
+ export * from './lib/directives/rut-value-accessor.directive';
4
+ export * from './lib/directives/rut.directive';
5
+ export * from './lib/pipes/rut.pipe';