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 +103 -0
- package/esm2022/lib/directives/rut-validator.directive.mjs +44 -0
- package/esm2022/lib/directives/rut-value-accessor.directive.mjs +40 -0
- package/esm2022/lib/directives/rut.directive.mjs +38 -0
- package/esm2022/lib/helpers/rut-helpers.mjs +36 -0
- package/esm2022/lib/pipes/rut.pipe.mjs +18 -0
- package/esm2022/ngx-rut-v2.mjs +5 -0
- package/esm2022/public-api.mjs +9 -0
- package/fesm2022/ngx-rut-v2.mjs +176 -0
- package/fesm2022/ngx-rut-v2.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/directives/rut-validator.directive.d.ts +13 -0
- package/lib/directives/rut-value-accessor.directive.d.ts +15 -0
- package/lib/directives/rut.directive.d.ts +11 -0
- package/lib/helpers/rut-helpers.d.ts +3 -0
- package/lib/pipes/rut.pipe.d.ts +7 -0
- package/package.json +26 -0
- package/public-api.d.ts +5 -0
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,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,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
|
+
}
|
package/public-api.d.ts
ADDED