@starley/ion-directives 1.4.0 → 1.4.2

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 CHANGED
@@ -35,6 +35,28 @@ import { DirectivesModule } from '@starley/ion-directives';
35
35
  export class MyComponent {}
36
36
  ```
37
37
 
38
+ ### Para usar a FormChangeDetector
39
+
40
+ * Importe a service FormChangeDetector no componente que desejar utilizar.
41
+
42
+ * Injete a service no construtor do componente:
43
+
44
+ ```typescript
45
+ constructor(private formChangeDetector: FormChangeDetector) {}
46
+ ```
47
+
48
+ Crie o formulario usando o FormGroup, e chame o método `prepareFormChangeDetection` passando o formulário como parâmetro.
49
+
50
+ Ex: this.myForm = this.formChangeDetector.prepareFormChangeDetection(this.myForm);
51
+
52
+ É necessário retornar o formulário para a própria variável, pois quando o formulário é atualizado, as mudanças precisam ser refletidas na variável para que o sistema de detecção de mudanças do Angular funcione corretamente.
53
+
54
+ Agora temos a variavel booleana `isDirty` que indica se o formulário foi modificado e pode ser usada para habilitar/desabilitar botões de salvar com base nas alterações.
55
+
56
+ Ex: if(this.formChangeDetector.isDirty) { ... }
57
+
58
+ Agora você pode usar o formulário com detecção de mudanças automaticamente.
59
+
38
60
  ### Para usar a mascara 'appMask'
39
61
 
40
62
  Adicione dentro do input a chamada passando após o simbolo de '=' a formatação desejada!
@@ -22,8 +22,7 @@ export { BlockCopyPasteDirective };
22
22
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(BlockCopyPasteDirective, [{
23
23
  type: Directive,
24
24
  args: [{
25
- selector: '[appBlockCopyPaste]',
26
- standalone: false
25
+ selector: '[appBlockCopyPaste]'
27
26
  }]
28
27
  }], function () { return []; }, { blockPaste: [{
29
28
  type: HostListener,
@@ -1 +1 @@
1
- {"version":3,"file":"block-copy-past.directive.js","sourceRoot":"","sources":["../../src/block-input/block-copy-past.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;;AAExD;IAKE;IAAgB,CAAC;IAEkB,4CAAU,GAA7C,UAA8C,CAAgB;QAC5D,CAAC,CAAC,cAAc,EAAE,CAAC;IACrB,CAAC;IAEiC,2CAAS,GAA3C,UAA4C,CAAgB;QAC1D,CAAC,CAAC,cAAc,EAAE,CAAC;IACrB,CAAC;IAEgC,0CAAQ,GAAzC,UAA0C,CAAgB;QACxD,CAAC,CAAC,cAAc,EAAE,CAAC;IACrB,CAAC;kIAbU,uBAAuB;8EAAvB,uBAAuB;YAAvB,kGAAA,sBAAkB,IAAK,mFAAvB,qBAAiB,IAAM,iFAAvB,oBAAgB,IAAO;;kCANpC;CAoBC,AAlBD,IAkBC;SAdY,uBAAuB;uFAAvB,uBAAuB;cAJnC,SAAS;eAAC;gBACT,QAAQ,EAAE,qBAAqB;gBAC/B,UAAU,EAAE,KAAK;aAClB;;kBAIE,YAAY;mBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;kBAIhC,YAAY;mBAAC,MAAM,EAAE,CAAC,QAAQ,CAAC;;kBAI/B,YAAY;mBAAC,KAAK,EAAE,CAAC,QAAQ,CAAC","sourcesContent":["import { Directive, HostListener } from '@angular/core';\n\n@Directive({\n selector: '[appBlockCopyPaste]',\n standalone: false\n})\nexport class BlockCopyPasteDirective {\n constructor() { }\n\n @HostListener('paste', ['$event']) blockPaste(e: KeyboardEvent) {\n e.preventDefault();\n }\n\n @HostListener('copy', ['$event']) blockCopy(e: KeyboardEvent) {\n e.preventDefault();\n }\n\n @HostListener('cut', ['$event']) blockCut(e: KeyboardEvent) {\n e.preventDefault();\n }\n}\n"]}
1
+ {"version":3,"file":"block-copy-past.directive.js","sourceRoot":"","sources":["../../src/block-input/block-copy-past.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;;AAExD;IAIE;IAAgB,CAAC;IAEkB,4CAAU,GAA7C,UAA8C,CAAgB;QAC5D,CAAC,CAAC,cAAc,EAAE,CAAC;IACrB,CAAC;IAEiC,2CAAS,GAA3C,UAA4C,CAAgB;QAC1D,CAAC,CAAC,cAAc,EAAE,CAAC;IACrB,CAAC;IAEgC,0CAAQ,GAAzC,UAA0C,CAAgB;QACxD,CAAC,CAAC,cAAc,EAAE,CAAC;IACrB,CAAC;kIAbU,uBAAuB;8EAAvB,uBAAuB;YAAvB,kGAAA,sBAAkB,IAAK,mFAAvB,qBAAiB,IAAM,iFAAvB,oBAAgB,IAAO;;kCALpC;CAmBC,AAjBD,IAiBC;SAdY,uBAAuB;uFAAvB,uBAAuB;cAHnC,SAAS;eAAC;gBACT,QAAQ,EAAE,qBAAqB;aAChC;sCAIoC,UAAU;kBAA5C,YAAY;mBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;YAIC,SAAS;kBAA1C,YAAY;mBAAC,MAAM,EAAE,CAAC,QAAQ,CAAC;YAIC,QAAQ;kBAAxC,YAAY;mBAAC,KAAK,EAAE,CAAC,QAAQ,CAAC","sourcesContent":["import { Directive, HostListener } from '@angular/core';\n\n@Directive({\n selector: '[appBlockCopyPaste]'\n})\nexport class BlockCopyPasteDirective {\n constructor() { }\n\n @HostListener('paste', ['$event']) blockPaste(e: KeyboardEvent) {\n e.preventDefault();\n }\n\n @HostListener('copy', ['$event']) blockCopy(e: KeyboardEvent) {\n e.preventDefault();\n }\n\n @HostListener('cut', ['$event']) blockCut(e: KeyboardEvent) {\n e.preventDefault();\n }\n}\n"]}
@@ -6,7 +6,6 @@ import * as i3 from "./input-mask/input-mask.directive";
6
6
  import * as i4 from "./input-remove/input-remove.directive";
7
7
  import * as i5 from "./block-input/block-copy-past.directive";
8
8
  import * as i6 from "@angular/common";
9
- import * as i7 from "@angular/forms";
10
9
  /**
11
10
  * Gerencia precionamento de enventos
12
11
  * @author Starley Cazorla
@@ -14,6 +13,6 @@ import * as i7 from "@angular/forms";
14
13
  export declare class DirectivesModule {
15
14
  static forRoot(): ModuleWithProviders<DirectivesModule>;
16
15
  static ɵfac: i0.ɵɵFactoryDeclaration<DirectivesModule, never>;
17
- static ɵmod: i0.ɵɵNgModuleDeclaration<DirectivesModule, [typeof i1.PressHoldDirective, typeof i2.TapDirective, typeof i3.IonInputMaskDirective, typeof i4.IonInputRemoveDirective, typeof i5.BlockCopyPasteDirective], [typeof i6.CommonModule, typeof i7.FormsModule], [typeof i1.PressHoldDirective, typeof i2.TapDirective, typeof i3.IonInputMaskDirective, typeof i4.IonInputRemoveDirective, typeof i5.BlockCopyPasteDirective]>;
16
+ static ɵmod: i0.ɵɵNgModuleDeclaration<DirectivesModule, [typeof i1.PressHoldDirective, typeof i2.TapDirective, typeof i3.IonInputMaskDirective, typeof i4.IonInputRemoveDirective, typeof i5.BlockCopyPasteDirective], [typeof i6.CommonModule], [typeof i1.PressHoldDirective, typeof i2.TapDirective, typeof i3.IonInputMaskDirective, typeof i4.IonInputRemoveDirective, typeof i5.BlockCopyPasteDirective]>;
18
17
  static ɵinj: i0.ɵɵInjectorDeclaration<DirectivesModule>;
19
18
  }
@@ -1,6 +1,5 @@
1
1
  import { CommonModule } from '@angular/common';
2
2
  import { CUSTOM_ELEMENTS_SCHEMA, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
3
- import { FormsModule } from '@angular/forms';
4
3
  import { BlockCopyPasteDirective } from './block-input/block-copy-past.directive';
5
4
  import { IonInputMaskDirective } from './input-mask/input-mask.directive';
6
5
  import { IonInputRemoveDirective } from './input-remove/input-remove.directive';
@@ -22,8 +21,7 @@ var DirectivesModule = /** @class */ (function () {
22
21
  };
23
22
  DirectivesModule.ɵfac = function DirectivesModule_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || DirectivesModule)(); };
24
23
  DirectivesModule.ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: DirectivesModule });
25
- DirectivesModule.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ imports: [CommonModule,
26
- FormsModule] });
24
+ DirectivesModule.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ imports: [CommonModule] });
27
25
  return DirectivesModule;
28
26
  }());
29
27
  export { DirectivesModule };
@@ -35,11 +33,10 @@ export { DirectivesModule };
35
33
  TapDirective,
36
34
  IonInputMaskDirective,
37
35
  IonInputRemoveDirective,
38
- BlockCopyPasteDirective
36
+ BlockCopyPasteDirective,
39
37
  ],
40
38
  imports: [
41
- CommonModule,
42
- FormsModule
39
+ CommonModule
43
40
  ],
44
41
  exports: [
45
42
  PressHoldDirective,
@@ -48,15 +45,15 @@ export { DirectivesModule };
48
45
  IonInputRemoveDirective,
49
46
  BlockCopyPasteDirective
50
47
  ],
51
- schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA]
48
+ schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA],
49
+ providers: []
52
50
  }]
53
51
  }], null, null); })();
54
52
  (function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(DirectivesModule, { declarations: [PressHoldDirective,
55
53
  TapDirective,
56
54
  IonInputMaskDirective,
57
55
  IonInputRemoveDirective,
58
- BlockCopyPasteDirective], imports: [CommonModule,
59
- FormsModule], exports: [PressHoldDirective,
56
+ BlockCopyPasteDirective], imports: [CommonModule], exports: [PressHoldDirective,
60
57
  TapDirective,
61
58
  IonInputMaskDirective,
62
59
  IonInputRemoveDirective,
@@ -1 +1 @@
1
- {"version":3,"file":"directive.module.js","sourceRoot":"","sources":["../src/directive.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAuB,QAAQ,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACxG,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;;AAEnD;;;GAGG;AAEH;IAAA;KA6BC;IANU,wBAAO,GAAd;QACI,OAAO;YACH,QAAQ,EAAE,gBAAgB;YAC1B,SAAS,EAAE,EAAE;SAChB,CAAC;IACN,CAAC;oHANQ,gBAAgB;sEAAhB,gBAAgB;0EAbrB,YAAY;YACZ,WAAW;2BAxBnB;CA2CC,AA7BD,IA6BC;SAPY,gBAAgB;uFAAhB,gBAAgB;cAtB5B,QAAQ;eAAC;gBACN,YAAY,EAAE;oBACV,kBAAkB;oBAClB,YAAY;oBACZ,qBAAqB;oBACrB,uBAAuB;oBACvB,uBAAuB;iBAC1B;gBACD,OAAO,EAAE;oBACL,YAAY;oBACZ,WAAW;iBACd;gBACD,OAAO,EAAE;oBACL,kBAAkB;oBAClB,YAAY;oBACZ,qBAAqB;oBACrB,uBAAuB;oBACvB,uBAAuB;iBAC1B;gBACD,OAAO,EAAE,CAAC,sBAAsB,EAAE,gBAAgB,CAAC;aAEtD;;wFACY,gBAAgB,mBApBrB,kBAAkB;QAClB,YAAY;QACZ,qBAAqB;QACrB,uBAAuB;QACvB,uBAAuB,aAGvB,YAAY;QACZ,WAAW,aAGX,kBAAkB;QAClB,YAAY;QACZ,qBAAqB;QACrB,uBAAuB;QACvB,uBAAuB","sourcesContent":["import { CommonModule } from '@angular/common';\nimport { CUSTOM_ELEMENTS_SCHEMA, ModuleWithProviders, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { BlockCopyPasteDirective } from './block-input/block-copy-past.directive';\nimport { IonInputMaskDirective } from './input-mask/input-mask.directive';\nimport { IonInputRemoveDirective } from './input-remove/input-remove.directive';\nimport { PressHoldDirective } from './press-hold/press-hold.directive';\nimport { TapDirective } from './tap/tap.directive';\n\n/**\n * Gerencia precionamento de enventos\n * @author Starley Cazorla\n */\n\n@NgModule({\n declarations: [\n PressHoldDirective,\n TapDirective,\n IonInputMaskDirective,\n IonInputRemoveDirective,\n BlockCopyPasteDirective\n ],\n imports: [\n CommonModule,\n FormsModule\n ],\n exports: [\n PressHoldDirective,\n TapDirective,\n IonInputMaskDirective,\n IonInputRemoveDirective,\n BlockCopyPasteDirective\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA]\n\n})\nexport class DirectivesModule {\n static forRoot(): ModuleWithProviders<DirectivesModule> {\n return {\n ngModule: DirectivesModule,\n providers: [],\n };\n }\n}\n"]}
1
+ {"version":3,"file":"directive.module.js","sourceRoot":"","sources":["../src/directive.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAuB,QAAQ,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACxG,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;;AAEnD;;;GAGG;AAEH;IAAA;KA6BC;IANU,wBAAO,GAAd;QACI,OAAO;YACH,QAAQ,EAAE,gBAAgB;YAC1B,SAAS,EAAE,EAAE;SAChB,CAAC;IACN,CAAC;oHANQ,gBAAgB;sEAAhB,gBAAgB;0EAbrB,YAAY;2BAtBpB;CA0CC,AA7BD,IA6BC;SAPY,gBAAgB;uFAAhB,gBAAgB;cAtB5B,QAAQ;eAAC;gBACN,YAAY,EAAE;oBACV,kBAAkB;oBAClB,YAAY;oBACZ,qBAAqB;oBACrB,uBAAuB;oBACvB,uBAAuB;iBAC1B;gBACD,OAAO,EAAE;oBACL,YAAY;iBACf;gBACD,OAAO,EAAE;oBACL,kBAAkB;oBAClB,YAAY;oBACZ,qBAAqB;oBACrB,uBAAuB;oBACvB,uBAAuB;iBAC1B;gBACD,OAAO,EAAE,CAAC,sBAAsB,EAAE,gBAAgB,CAAC;gBACnD,SAAS,EAAE,EAAE;aAEhB;;wFACY,gBAAgB,mBApBrB,kBAAkB;QAClB,YAAY;QACZ,qBAAqB;QACrB,uBAAuB;QACvB,uBAAuB,aAGvB,YAAY,aAGZ,kBAAkB;QAClB,YAAY;QACZ,qBAAqB;QACrB,uBAAuB;QACvB,uBAAuB","sourcesContent":["import { CommonModule } from '@angular/common';\nimport { CUSTOM_ELEMENTS_SCHEMA, ModuleWithProviders, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\nimport { BlockCopyPasteDirective } from './block-input/block-copy-past.directive';\nimport { IonInputMaskDirective } from './input-mask/input-mask.directive';\nimport { IonInputRemoveDirective } from './input-remove/input-remove.directive';\nimport { PressHoldDirective } from './press-hold/press-hold.directive';\nimport { TapDirective } from './tap/tap.directive';\n\n/**\n * Gerencia precionamento de enventos\n * @author Starley Cazorla\n */\n\n@NgModule({\n declarations: [\n PressHoldDirective,\n TapDirective,\n IonInputMaskDirective,\n IonInputRemoveDirective,\n BlockCopyPasteDirective,\n ],\n imports: [\n CommonModule\n ],\n exports: [\n PressHoldDirective,\n TapDirective,\n IonInputMaskDirective,\n IonInputRemoveDirective,\n BlockCopyPasteDirective\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA],\n providers: []\n\n})\nexport class DirectivesModule {\n static forRoot(): ModuleWithProviders<DirectivesModule> {\n return {\n ngModule: DirectivesModule,\n providers: [],\n };\n }\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import { FormGroup } from '@angular/forms';
2
+ import * as i0 from "@angular/core";
3
+ export declare class FormChangeDetector {
4
+ isDirty: boolean;
5
+ private originalFormValues;
6
+ private clearFormChangeDetection;
7
+ prepareFormChangeDetection(documentForm: FormGroup): FormGroup<any>;
8
+ private formChangeDetection;
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<FormChangeDetector, never>;
10
+ static ɵprov: i0.ɵɵInjectableDeclaration<FormChangeDetector>;
11
+ }
@@ -0,0 +1,56 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ import { Injectable } from '@angular/core';
13
+ import * as i0 from "@angular/core";
14
+ var FormChangeDetector = /** @class */ (function () {
15
+ function FormChangeDetector() {
16
+ this.isDirty = false;
17
+ }
18
+ FormChangeDetector.prototype.clearFormChangeDetection = function () {
19
+ this.originalFormValues = null;
20
+ this.isDirty = false;
21
+ };
22
+ FormChangeDetector.prototype.prepareFormChangeDetection = function (documentForm) {
23
+ this.clearFormChangeDetection();
24
+ this.originalFormValues = __assign({}, documentForm.getRawValue());
25
+ // Garante estado pristine inicial
26
+ documentForm.markAsPristine();
27
+ documentForm.markAsUntouched();
28
+ this.isDirty = false;
29
+ this.formChangeDetection(documentForm);
30
+ return documentForm;
31
+ };
32
+ FormChangeDetector.prototype.formChangeDetection = function (documentForm) {
33
+ var _this = this;
34
+ documentForm.valueChanges.subscribe(function () {
35
+ if (!_this.originalFormValues) {
36
+ _this.isDirty = false;
37
+ return;
38
+ }
39
+ var currentValues = documentForm.getRawValue();
40
+ var normalizedCurrent = __assign({}, currentValues);
41
+ var normalizedOriginal = __assign({}, _this.originalFormValues);
42
+ _this.isDirty = JSON.stringify(normalizedCurrent) !== JSON.stringify(normalizedOriginal);
43
+ });
44
+ };
45
+ FormChangeDetector.ɵfac = function FormChangeDetector_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || FormChangeDetector)(); };
46
+ FormChangeDetector.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: FormChangeDetector, factory: FormChangeDetector.ɵfac, providedIn: 'root' });
47
+ return FormChangeDetector;
48
+ }());
49
+ export { FormChangeDetector };
50
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FormChangeDetector, [{
51
+ type: Injectable,
52
+ args: [{
53
+ providedIn: 'root',
54
+ }]
55
+ }], null, null); })();
56
+ //# sourceMappingURL=form-change-detector.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-change-detector.service.js","sourceRoot":"","sources":["../../src/forms/form-change-detector.service.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;;AAG3C;IAAA;QAKI,YAAO,GAAY,KAAK,CAAC;KAmC5B;IA/BW,qDAAwB,GAAhC;QACI,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACzB,CAAC;IAED,uDAA0B,GAA1B,UAA2B,YAAuB;QAC9C,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,IAAI,CAAC,kBAAkB,gBAAQ,YAAY,CAAC,WAAW,EAAE,CAAE,CAAC;QAC5D,kCAAkC;QAClC,YAAY,CAAC,cAAc,EAAE,CAAC;QAC9B,YAAY,CAAC,eAAe,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;QAEvC,OAAO,YAAY,CAAC;IACxB,CAAC;IAEO,gDAAmB,GAA3B,UAA4B,YAAuB;QAAnD,iBAYC;QAXG,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC;YAChC,IAAI,CAAC,KAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC3B,KAAI,CAAC,OAAO,GAAG,KAAK,CAAC;gBACrB,OAAO;YACX,CAAC;YAED,IAAM,aAAa,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;YACjD,IAAI,iBAAiB,gBAAQ,aAAa,CAAE,CAAC;YAC7C,IAAI,kBAAkB,gBAAQ,KAAI,CAAC,kBAAkB,CAAE,CAAC;YACxD,KAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC5F,CAAC,CAAC,CAAC;IACP,CAAC;wHAnCQ,kBAAkB;4EAAlB,kBAAkB,WAAlB,kBAAkB,mBAFf,MAAM;6BAJtB;CA2CC,AAxCD,IAwCC;SArCY,kBAAkB;uFAAlB,kBAAkB;cAH9B,UAAU;eAAC;gBACR,UAAU,EAAE,MAAM;aACrB","sourcesContent":["import { Injectable } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FormChangeDetector {\n\n isDirty: boolean = false;\n\n private originalFormValues: any;\n\n private clearFormChangeDetection() {\n this.originalFormValues = null;\n this.isDirty = false;\n }\n\n prepareFormChangeDetection(documentForm: FormGroup) {\n this.clearFormChangeDetection();\n this.originalFormValues = { ...documentForm.getRawValue() };\n // Garante estado pristine inicial\n documentForm.markAsPristine();\n documentForm.markAsUntouched();\n this.isDirty = false;\n this.formChangeDetection(documentForm);\n\n return documentForm;\n }\n\n private formChangeDetection(documentForm: FormGroup): any {\n documentForm.valueChanges.subscribe(() => {\n if (!this.originalFormValues) {\n this.isDirty = false;\n return;\n }\n\n const currentValues = documentForm.getRawValue();\n let normalizedCurrent = { ...currentValues };\n let normalizedOriginal = { ...this.originalFormValues };\n this.isDirty = JSON.stringify(normalizedCurrent) !== JSON.stringify(normalizedOriginal);\n });\n }\n\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from './block-input/block-copy-past.directive';
2
2
  export * from './directive.module';
3
+ export { FormChangeDetector } from './forms/form-change-detector.service';
3
4
  export * from './input-mask/input-mask.directive';
4
5
  export * from './input-remove/input-remove.directive';
5
6
  export * from './press-hold/press-hold.directive';
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from './block-input/block-copy-past.directive';
2
2
  export * from './directive.module';
3
+ export { FormChangeDetector } from './forms/form-change-detector.service';
3
4
  export * from './input-mask/input-mask.directive';
4
5
  export * from './input-remove/input-remove.directive';
5
6
  export * from './press-hold/press-hold.directive';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yCAAyC,CAAC;AACxD,cAAc,oBAAoB,CAAC;AACnC,cAAc,mCAAmC,CAAC;AAClD,cAAc,uCAAuC,CAAC;AACtD,cAAc,mCAAmC,CAAC;AAClD,OAAO,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,cAAc,qBAAqB,CAAC","sourcesContent":["export * from './block-input/block-copy-past.directive';\nexport * from './directive.module';\nexport * from './input-mask/input-mask.directive';\nexport * from './input-remove/input-remove.directive';\nexport * from './press-hold/press-hold.directive';\nexport { ConnectorSqlitePwaProvider } from './provider/connector-sqlite-pwa.provider';\nexport { DateUtilProvider } from './provider/date-util-provider';\nexport { IonUtilsProvider } from './provider/ion-utils-provider';\nexport { IonValidateFilds } from './provider/ion-validate-filds';\nexport * from './tap/tap.directive';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yCAAyC,CAAC;AACxD,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,cAAc,mCAAmC,CAAC;AAClD,cAAc,uCAAuC,CAAC;AACtD,cAAc,mCAAmC,CAAC;AAClD,OAAO,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,cAAc,qBAAqB,CAAC","sourcesContent":["export * from './block-input/block-copy-past.directive';\nexport * from './directive.module';\nexport { FormChangeDetector } from './forms/form-change-detector.service';\nexport * from './input-mask/input-mask.directive';\nexport * from './input-remove/input-remove.directive';\nexport * from './press-hold/press-hold.directive';\nexport { ConnectorSqlitePwaProvider } from './provider/connector-sqlite-pwa.provider';\nexport { DateUtilProvider } from './provider/date-util-provider';\nexport { IonUtilsProvider } from './provider/ion-utils-provider';\nexport { IonValidateFilds } from './provider/ion-validate-filds';\nexport * from './tap/tap.directive';\n"]}
@@ -47,6 +47,9 @@ var IonInputMaskDirective = /** @class */ (function () {
47
47
  });
48
48
  };
49
49
  IonInputMaskDirective.prototype.extractRawValue = function (value) {
50
+ if (!value) {
51
+ return '';
52
+ }
50
53
  return value.replace(/[^a-zA-Z0-9]/g, ''); // Remove todos os caracteres não são letras e digitos
51
54
  };
52
55
  /**
@@ -86,7 +89,6 @@ export { IonInputMaskDirective };
86
89
  type: Directive,
87
90
  args: [{
88
91
  selector: '[appMask]',
89
- standalone: false,
90
92
  providers: [NgModel]
91
93
  }]
92
94
  }], function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.NgModel }, { type: i0.ChangeDetectorRef }]; }, { pattern: [{
@@ -1 +1 @@
1
- {"version":3,"file":"input-mask.directive.js","sourceRoot":"","sources":["../../src/input-mask/input-mask.directive.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectorRef, Directive, ElementRef, HostListener, Input, OnChanges, Renderer2, SimpleChanges } from '@angular/core';\nimport { NgModel } from '@angular/forms';\n\n/**\n * Directive input mask\n * @author Starley Cazorla\n * @version 3.0.0\n */\n\n@Directive({\n selector: '[appMask]',\n standalone: false,\n providers: [NgModel]\n})\nexport class IonInputMaskDirective implements OnChanges {\n\n @Input('appMask') pattern: string;\n private rawValue: string = '';\n\n constructor(private elementRef: ElementRef, private renderer: Renderer2, private ngModel: NgModel, private cdRef: ChangeDetectorRef) { }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['pattern'] && !changes['pattern'].firstChange) {\n this.pattern = changes['pattern'].currentValue;\n // Quando a máscara muda, limpe o valor e aplique a nova máscara\n this.rawValue = this.extractRawValue(this.ngModel.value); // Extraia o valor bruto antes de aplicar a nova máscara\n this.applyMask(); // Reaplique a máscara\n this.cdRef.detectChanges();\n }\n }\n\n @HostListener('input', ['$event.target.value'])\n onInput(value: string) {\n this.rawValue = this.extractRawValue(value); // Atualize o valor bruto com o novo valor de entrada\n this.applyMask(); // Reaplique a máscara\n }\n\n /**\n * Applys mask\n * @author Starley Cazorla\n */\n private applyMask() {\n if (!this.pattern) {\n return;\n }\n\n // Aplique a máscara ao valor bruto\n const maskedValue = this.maskValue(this.rawValue, this.pattern);\n Promise.resolve().then(() => {\n // Atualizar o input e o modelo de controle com o valor mascarado\n this.renderer.setProperty(this.elementRef.nativeElement, 'value', maskedValue);\n this.ngModel.control?.setValue(maskedValue, { emitEvent: false });\n });\n }\n\n private extractRawValue(value: string): string {\n return value.replace(/[^a-zA-Z0-9]/g, ''); // Remove todos os caracteres não são letras e digitos\n }\n\n /**\n * Masks value\n * @author Starley Cazorla\n * @param rawValue\n * @param mask\n * @returns value\n */\n private maskValue(rawValue: string, mask: string): string {\n\n // Se a máscara não tiver um padrão, não faca nada\n if (!mask || mask === undefined || mask === null || mask === '') {\n return rawValue;\n }\n\n let maskedValue = '';\n let rawValIndex = 0;\n let i = 0;\n\n while (rawValIndex < rawValue.length) {\n if (mask[i] === '*') {\n maskedValue += rawValue[rawValIndex++];\n } else {\n maskedValue += mask[i] ? mask[i] : '';\n }\n i = (i + 1) % mask.length; // Volta ao início da máscara se necessário\n }\n\n return maskedValue;\n }\n\n}\n"]}
1
+ {"version":3,"file":"input-mask.directive.js","sourceRoot":"","sources":["../../src/input-mask/input-mask.directive.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectorRef, Directive, ElementRef, HostListener, Input, OnChanges, Renderer2, SimpleChanges } from '@angular/core';\nimport { NgModel } from '@angular/forms';\n\n/**\n * Directive input mask\n * @author Starley Cazorla\n * @version 3.0.0\n */\n\n@Directive({\n selector: '[appMask]',\n providers: [NgModel]\n})\nexport class IonInputMaskDirective implements OnChanges {\n\n @Input('appMask') pattern: string;\n private rawValue: string = '';\n\n constructor(private elementRef: ElementRef, private renderer: Renderer2, private ngModel: NgModel, private cdRef: ChangeDetectorRef) { }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['pattern'] && !changes['pattern'].firstChange) {\n this.pattern = changes['pattern'].currentValue;\n // Quando a máscara muda, limpe o valor e aplique a nova máscara\n this.rawValue = this.extractRawValue(this.ngModel.value); // Extraia o valor bruto antes de aplicar a nova máscara\n this.applyMask(); // Reaplique a máscara\n this.cdRef.detectChanges();\n }\n }\n\n @HostListener('input', ['$event.target.value'])\n onInput(value: string) {\n this.rawValue = this.extractRawValue(value); // Atualize o valor bruto com o novo valor de entrada\n this.applyMask(); // Reaplique a máscara\n }\n\n /**\n * Applys mask\n * @author Starley Cazorla\n */\n private applyMask() {\n if (!this.pattern) {\n return;\n }\n\n // Aplique a máscara ao valor bruto\n const maskedValue = this.maskValue(this.rawValue, this.pattern);\n Promise.resolve().then(() => {\n // Atualizar o input e o modelo de controle com o valor mascarado\n this.renderer.setProperty(this.elementRef.nativeElement, 'value', maskedValue);\n this.ngModel.control?.setValue(maskedValue, { emitEvent: false });\n });\n }\n\n private extractRawValue(value: string): string {\n if (!value) {\n return '';\n }\n return value.replace(/[^a-zA-Z0-9]/g, ''); // Remove todos os caracteres não são letras e digitos\n }\n\n /**\n * Masks value\n * @author Starley Cazorla\n * @param rawValue\n * @param mask\n * @returns value\n */\n private maskValue(rawValue: string, mask: string): string {\n\n // Se a máscara não tiver um padrão, não faca nada\n if (!mask || mask === undefined || mask === null || mask === '') {\n return rawValue;\n }\n\n let maskedValue = '';\n let rawValIndex = 0;\n let i = 0;\n\n while (rawValIndex < rawValue.length) {\n if (mask[i] === '*') {\n maskedValue += rawValue[rawValIndex++];\n } else {\n maskedValue += mask[i] ? mask[i] : '';\n }\n i = (i + 1) % mask.length; // Volta ao início da máscara se necessário\n }\n\n return maskedValue;\n }\n\n}\n"]}
@@ -53,7 +53,6 @@ export { IonInputRemoveDirective };
53
53
  type: Directive,
54
54
  args: [{
55
55
  selector: '[appRemoveFromInput]',
56
- standalone: false,
57
56
  host: {
58
57
  '(ionInput)': 'onIonInput($event)'
59
58
  }
@@ -1 +1 @@
1
- {"version":3,"file":"input-remove.directive.js","sourceRoot":"","sources":["../../src/input-remove/input-remove.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;;;AAGvE;IAUI,iCAA+C,KAAc;QAAd,UAAK,GAAL,KAAK,CAAS;IAAI,CAAC;IAElE;;;;OAIG;IACH,4CAAU,GAAV,UAAW,KAAU;QACjB,IAAM,KAAK,GAAG,KAAK,CAAC,MAA0B,CAAC;QAC/C,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAExB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;YAC1E,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;YAEpB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE;oBAC/B,SAAS,EAAE,IAAI;oBACf,qBAAqB,EAAE,IAAI;oBAC3B,qBAAqB,EAAE,IAAI;iBAC9B,CAAC,CAAC;YACP,CAAC;QACL,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,4CAAU,GAAV,UAAW,UAAkB;QACzB,IAAI,UAAU,KAAK,QAAQ;YAAE,OAAO,YAAY,CAAC;QACjD,IAAI,UAAU,KAAK,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC7C,IAAI,UAAU,KAAK,SAAS;YAAE,OAAO,2BAA2B,CAAC;QACjE,IAAI,UAAU,KAAK,aAAa;YAAE,OAAO,iBAAiB,CAAC;QAC3D,OAAO,IAAI,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;kIAxCQ,uBAAuB;8EAAvB,uBAAuB;YAAvB,wGAAA,sBAAkB,IAAK;;kCAVpC;CAmDC,AAhDD,IAgDC;SAzCY,uBAAuB;uFAAvB,uBAAuB;cAPnC,SAAS;eAAC;gBACP,QAAQ,EAAE,sBAAsB;gBAChC,UAAU,EAAE,KAAK;gBACjB,IAAI,EAAE;oBACF,YAAY,EAAE,oBAAoB;iBACrC;aACJ;;sBAIgB,QAAQ;;sBAAI,IAAI;;sBAAI,IAAI;;kBAFpC,KAAK;mBAAC,oBAAoB","sourcesContent":["import { Directive, Host, Input, Optional, Self } from '@angular/core';\nimport { NgModel } from \"@angular/forms\";\n\n@Directive({\n selector: '[appRemoveFromInput]',\n standalone: false,\n host: {\n '(ionInput)': 'onIonInput($event)'\n }\n})\nexport class IonInputRemoveDirective {\n @Input('appRemoveFromInput') pattern: string;\n\n constructor(@Optional() @Host() @Self() public model: NgModel) { }\n\n /**\n * Determines whether ion input on\n * @author Starley Cazorla\n * @param event\n */\n onIonInput(event: any) {\n const input = event.target as HTMLInputElement;\n let value = input.value;\n\n if (this.pattern) {\n value = value.normalize('NFD').replace(this.getPattern(this.pattern), '');\n input.value = value;\n\n if (this.model) {\n this.model.control.setValue(value, {\n emitEvent: true,\n emitModelToViewChange: true,\n emitViewToModelChange: true\n });\n }\n }\n }\n\n /**\n * Gets pattern\n * @author Starley Cazorla\n * @param typePatter\n * @returns pattern - letter - number - special - punctuation\n */\n getPattern(typePatter: string): RegExp {\n if (typePatter === 'letter') return /[a-zA-Z]+/g;\n if (typePatter === 'number') return /[0-9]/g;\n if (typePatter === 'special') return /[^a-zA-Z0-9\\s.,!?'\"():;]/g;\n if (typePatter === 'punctuation') return /[.,!?'\"():;_-]/g;\n return new RegExp(typePatter, 'g');\n }\n}\n"]}
1
+ {"version":3,"file":"input-remove.directive.js","sourceRoot":"","sources":["../../src/input-remove/input-remove.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;;;AAGvE;IASI,iCAA+C,KAAc;QAAd,UAAK,GAAL,KAAK,CAAS;IAAI,CAAC;IAElE;;;;OAIG;IACH,4CAAU,GAAV,UAAW,KAAU;QACjB,IAAM,KAAK,GAAG,KAAK,CAAC,MAA0B,CAAC;QAC/C,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAExB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;YAC1E,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;YAEpB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE;oBAC/B,SAAS,EAAE,IAAI;oBACf,qBAAqB,EAAE,IAAI;oBAC3B,qBAAqB,EAAE,IAAI;iBAC9B,CAAC,CAAC;YACP,CAAC;QACL,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,4CAAU,GAAV,UAAW,UAAkB;QACzB,IAAI,UAAU,KAAK,QAAQ;YAAE,OAAO,YAAY,CAAC;QACjD,IAAI,UAAU,KAAK,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC7C,IAAI,UAAU,KAAK,SAAS;YAAE,OAAO,2BAA2B,CAAC;QACjE,IAAI,UAAU,KAAK,aAAa;YAAE,OAAO,iBAAiB,CAAC;QAC3D,OAAO,IAAI,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;kIAxCQ,uBAAuB;8EAAvB,uBAAuB;YAAvB,wGAAA,sBAAkB,IAAK;;kCATpC;CAkDC,AA/CD,IA+CC;SAzCY,uBAAuB;uFAAvB,uBAAuB;cANnC,SAAS;eAAC;gBACP,QAAQ,EAAE,sBAAsB;gBAChC,IAAI,EAAE;oBACF,YAAY,EAAE,oBAAoB;iBACrC;aACJ;;sBAIgB,QAAQ;;sBAAI,IAAI;;sBAAI,IAAI;wBAFR,OAAO;kBAAnC,KAAK;mBAAC,oBAAoB","sourcesContent":["import { Directive, Host, Input, Optional, Self } from '@angular/core';\nimport { NgModel } from \"@angular/forms\";\n\n@Directive({\n selector: '[appRemoveFromInput]',\n host: {\n '(ionInput)': 'onIonInput($event)'\n }\n})\nexport class IonInputRemoveDirective {\n @Input('appRemoveFromInput') pattern: string;\n\n constructor(@Optional() @Host() @Self() public model: NgModel) { }\n\n /**\n * Determines whether ion input on\n * @author Starley Cazorla\n * @param event\n */\n onIonInput(event: any) {\n const input = event.target as HTMLInputElement;\n let value = input.value;\n\n if (this.pattern) {\n value = value.normalize('NFD').replace(this.getPattern(this.pattern), '');\n input.value = value;\n\n if (this.model) {\n this.model.control.setValue(value, {\n emitEvent: true,\n emitModelToViewChange: true,\n emitViewToModelChange: true\n });\n }\n }\n }\n\n /**\n * Gets pattern\n * @author Starley Cazorla\n * @param typePatter\n * @returns pattern - letter - number - special - punctuation\n */\n getPattern(typePatter: string): RegExp {\n if (typePatter === 'letter') return /[a-zA-Z]+/g;\n if (typePatter === 'number') return /[0-9]/g;\n if (typePatter === 'special') return /[^a-zA-Z0-9\\s.,!?'\"():;]/g;\n if (typePatter === 'punctuation') return /[.,!?'\"():;_-]/g;\n return new RegExp(typePatter, 'g');\n }\n}\n"]}
@@ -63,8 +63,7 @@ export { PressHoldDirective };
63
63
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PressHoldDirective, [{
64
64
  type: Directive,
65
65
  args: [{
66
- selector: '[appPressHold]',
67
- standalone: false
66
+ selector: '[appPressHold]'
68
67
  }]
69
68
  }], function () { return [{ type: undefined, decorators: [{
70
69
  type: Attribute,
@@ -1 +1 @@
1
- {"version":3,"file":"press-hold.directive.js","sourceRoot":"","sources":["../../src/press-hold/press-hold.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAU,MAAM,EAAE,MAAM,eAAe,CAAC;;AAEjG;;;GAGG;AAEH;IAkBI,4BAAuC,OAAqB;QAAhD,wBAAA,EAAA,aAAgD;QAZlD,UAAK,GAAG,IAAI,YAAY,EAAE,CAAC;QACrC,iBAAY,GAAG;YACX,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,GAAG;SAChB,CAAC;QACF,iBAAY,GAAQ,IAAI,CAAC;QACzB,eAAU,GAAY,KAAK,CAAC;QAC5B,YAAO,GAAG,CAAC,CAAC;QACZ,aAAQ,GAAG,CAAC,CAAC;QACb,eAAU,GAAQ,IAAI,CAAC;QAGnB,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,OAAO,CAAC;IACzC,CAAC;IAED,qCAAQ,GAAR;QACI,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC;IACrC,CAAC;IAID,oCAAO,GAFP,UAEQ,KAAqB;QACzB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YAC7B,OAAO;QACX,CAAC,CAAC,2CAA2C;QAC7C,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAEO,2CAAc,GAAtB,UAAuB,IAAY;QAAnC,iBAeC;QAdG,IAAI,IAAI,IAAI,YAAY,EAAE,CAAC;YACvB,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC;gBAC3B,KAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YAC3B,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,kEAAkE;QACtG,CAAC;aAAM,IAAI,IAAI,IAAI,UAAU,EAAE,CAAC;YAC5B,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAChC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBAClB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACvB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,mDAAmD;YACzE,CAAC;YACD,qGAAqG;YACrG,oCAAoC;YACpC,UAAU,CAAC,cAAM,OAAA,KAAI,CAAC,UAAU,GAAG,KAAK,EAAvB,CAAuB,EAAE,EAAE,CAAC,CAAC;QAClD,CAAC;IACL,CAAC;IAEO,sCAAS,GAAjB;QACI,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,wBAAwB;QACvD,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IACrB,CAAC;wHArDQ,kBAAkB,uBAcJ,cAAc;yEAd5B,kBAAkB;YAAlB,uGAAA,mBAAe,IAAG,sFAAlB,mBAAe,IAAG;;6BAX/B;CAkEC,AA3DD,IA2DC;SAvDY,kBAAkB;uFAAlB,kBAAkB;cAJ9B,SAAS;eAAC;gBACP,QAAQ,EAAE,gBAAgB;gBAC1B,UAAU,EAAE,KAAK;aACpB;;sBAegB,SAAS;uBAAC,cAAc;;kBAZpC,MAAM;;kBAoBN,YAAY;mBAAC,YAAY,EAAE,CAAC,QAAQ,CAAC;;kBACrC,YAAY;mBAAC,UAAU,EAAE,CAAC,QAAQ,CAAC","sourcesContent":["import { Attribute, Directive, EventEmitter, HostListener, OnInit, Output } from '@angular/core';\n\n/**\n * Gerencia pressHold\n * @author Starley Cazorla\n */\n\n@Directive({\n selector: '[appPressHold]',\n standalone: false\n})\nexport class PressHoldDirective implements OnInit {\n\n @Output() press = new EventEmitter();\n pressGesture = {\n name: 'press',\n enabled: false,\n interval: 450\n };\n pressTimeout: any = null;\n isPressing: boolean = false;\n lastTap = 0;\n tapCount = 0;\n tapTimeout: any = null;\n\n constructor(@Attribute('appPressHold') pattern: number = 450) {\n this.pressGesture.interval = pattern;\n }\n\n ngOnInit(): void {\n this.pressGesture.enabled = true;\n }\n\n @HostListener('touchstart', ['$event'])\n @HostListener('touchend', ['$event'])\n onPress(event: { type: any; }) {\n if (!this.pressGesture.enabled) {\n return;\n } // Press is not enabled, don't do anything.\n this.handlePressing(event.type);\n }\n\n private handlePressing(type: string) { // touchend or touchstart\n if (type == 'touchstart') {\n this.pressTimeout = setTimeout(() => {\n this.isPressing = true;\n }, this.pressGesture.interval); // Considered a press if it's longer than interval (default: 251).\n } else if (type == 'touchend') {\n clearTimeout(this.pressTimeout);\n if (this.isPressing) {\n this.press.emit('end');\n this.resetTaps(); // Just incase this gets passed as a tap event too.\n }\n // Clicks have a natural delay of 300ms, so we have to account for that, before resetting isPressing.\n // Otherwise a tap event is emitted.\n setTimeout(() => this.isPressing = false, 50);\n }\n }\n\n private resetTaps() {\n clearTimeout(this.tapTimeout); // clear the old timeout\n this.tapCount = 0;\n this.tapTimeout = null;\n this.lastTap = 0;\n }\n\n}\n"]}
1
+ {"version":3,"file":"press-hold.directive.js","sourceRoot":"","sources":["../../src/press-hold/press-hold.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAU,MAAM,EAAE,MAAM,eAAe,CAAC;;AAEjG;;;GAGG;AAEH;IAiBI,4BAAuC,OAAqB;QAAhD,wBAAA,EAAA,aAAgD;QAZlD,UAAK,GAAG,IAAI,YAAY,EAAE,CAAC;QACrC,iBAAY,GAAG;YACX,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,GAAG;SAChB,CAAC;QACF,iBAAY,GAAQ,IAAI,CAAC;QACzB,eAAU,GAAY,KAAK,CAAC;QAC5B,YAAO,GAAG,CAAC,CAAC;QACZ,aAAQ,GAAG,CAAC,CAAC;QACb,eAAU,GAAQ,IAAI,CAAC;QAGnB,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,OAAO,CAAC;IACzC,CAAC;IAED,qCAAQ,GAAR;QACI,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC;IACrC,CAAC;IAID,oCAAO,GAFP,UAEQ,KAAqB;QACzB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YAC7B,OAAO;QACX,CAAC,CAAC,2CAA2C;QAC7C,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAEO,2CAAc,GAAtB,UAAuB,IAAY;QAAnC,iBAeC;QAdG,IAAI,IAAI,IAAI,YAAY,EAAE,CAAC;YACvB,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC;gBAC3B,KAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YAC3B,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,kEAAkE;QACtG,CAAC;aAAM,IAAI,IAAI,IAAI,UAAU,EAAE,CAAC;YAC5B,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAChC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBAClB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACvB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,mDAAmD;YACzE,CAAC;YACD,qGAAqG;YACrG,oCAAoC;YACpC,UAAU,CAAC,cAAM,OAAA,KAAI,CAAC,UAAU,GAAG,KAAK,EAAvB,CAAuB,EAAE,EAAE,CAAC,CAAC;QAClD,CAAC;IACL,CAAC;IAEO,sCAAS,GAAjB;QACI,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,wBAAwB;QACvD,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IACrB,CAAC;wHArDQ,kBAAkB,uBAcJ,cAAc;yEAd5B,kBAAkB;YAAlB,uGAAA,mBAAe,IAAG,sFAAlB,mBAAe,IAAG;;6BAV/B;CAiEC,AA1DD,IA0DC;SAvDY,kBAAkB;uFAAlB,kBAAkB;cAH9B,SAAS;eAAC;gBACP,QAAQ,EAAE,gBAAgB;aAC7B;;sBAegB,SAAS;uBAAC,cAAc;wBAZ3B,KAAK;kBAAd,MAAM;YAsBP,OAAO;kBAFN,YAAY;mBAAC,YAAY,EAAE,CAAC,QAAQ,CAAC;;kBACrC,YAAY;mBAAC,UAAU,EAAE,CAAC,QAAQ,CAAC","sourcesContent":["import { Attribute, Directive, EventEmitter, HostListener, OnInit, Output } from '@angular/core';\n\n/**\n * Gerencia pressHold\n * @author Starley Cazorla\n */\n\n@Directive({\n selector: '[appPressHold]'\n})\nexport class PressHoldDirective implements OnInit {\n\n @Output() press = new EventEmitter();\n pressGesture = {\n name: 'press',\n enabled: false,\n interval: 450\n };\n pressTimeout: any = null;\n isPressing: boolean = false;\n lastTap = 0;\n tapCount = 0;\n tapTimeout: any = null;\n\n constructor(@Attribute('appPressHold') pattern: number = 450) {\n this.pressGesture.interval = pattern;\n }\n\n ngOnInit(): void {\n this.pressGesture.enabled = true;\n }\n\n @HostListener('touchstart', ['$event'])\n @HostListener('touchend', ['$event'])\n onPress(event: { type: any; }) {\n if (!this.pressGesture.enabled) {\n return;\n } // Press is not enabled, don't do anything.\n this.handlePressing(event.type);\n }\n\n private handlePressing(type: string) { // touchend or touchstart\n if (type == 'touchstart') {\n this.pressTimeout = setTimeout(() => {\n this.isPressing = true;\n }, this.pressGesture.interval); // Considered a press if it's longer than interval (default: 251).\n } else if (type == 'touchend') {\n clearTimeout(this.pressTimeout);\n if (this.isPressing) {\n this.press.emit('end');\n this.resetTaps(); // Just incase this gets passed as a tap event too.\n }\n // Clicks have a natural delay of 300ms, so we have to account for that, before resetting isPressing.\n // Otherwise a tap event is emitted.\n setTimeout(() => this.isPressing = false, 50);\n }\n }\n\n private resetTaps() {\n clearTimeout(this.tapTimeout); // clear the old timeout\n this.tapCount = 0;\n this.tapTimeout = null;\n this.lastTap = 0;\n }\n\n}"]}
@@ -8,8 +8,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  });
9
9
  };
10
10
  var __generator = (this && this.__generator) || function (thisArg, body) {
11
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
12
- return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
13
  function verb(n) { return function (v) { return step([n, v]); }; }
14
14
  function step(op) {
15
15
  if (f) throw new TypeError("Generator is already executing.");
@@ -45,6 +45,7 @@ export declare class DateUtilProvider {
45
45
  * Gets diff days by today
46
46
  * @author Starley Cazorla
47
47
  * @param date1
48
+ * @deprecated
48
49
  * @returns
49
50
  */
50
51
  getDiffDaysByToday(date1: any): number;
@@ -59,6 +60,28 @@ export declare class DateUtilProvider {
59
60
  dayName: string;
60
61
  dayNumber: number;
61
62
  };
63
+ /**
64
+ * Gets diff days by date
65
+ * @author Starley Cazorla
66
+ * @param date
67
+ * @returns
68
+ */
69
+ getDiffDaysByDate(date: Date): number;
70
+ getDiffYearsByToday(date: Date): boolean;
71
+ /**
72
+ * Format date to DD/MM/YYYY
73
+ * @author Starley Cazorla
74
+ * @param date
75
+ * @returns formatted date
76
+ */
77
+ returnFormatBrDate(date: Date | string): string;
78
+ /**
79
+ * Convert DD/MM/YYYY to Date
80
+ * @author Starley Cazorla
81
+ * @param dateBr
82
+ * @returns Date object
83
+ */
84
+ convertBrDateToDate(dateBr: string): Date;
62
85
  static ɵfac: i0.ɵɵFactoryDeclaration<DateUtilProvider, never>;
63
86
  static ɵprov: i0.ɵɵInjectableDeclaration<DateUtilProvider>;
64
87
  }
@@ -89,6 +89,7 @@ var DateUtilProvider = /** @class */ (function () {
89
89
  * Gets diff days by today
90
90
  * @author Starley Cazorla
91
91
  * @param date1
92
+ * @deprecated
92
93
  * @returns
93
94
  */
94
95
  DateUtilProvider.prototype.getDiffDaysByToday = function (date1) {
@@ -114,6 +115,56 @@ var DateUtilProvider = /** @class */ (function () {
114
115
  'dayNumber': d.getDate()
115
116
  };
116
117
  };
118
+ /**
119
+ * Gets diff days by date
120
+ * @author Starley Cazorla
121
+ * @param date
122
+ * @returns
123
+ */
124
+ DateUtilProvider.prototype.getDiffDaysByDate = function (date) {
125
+ if (!date)
126
+ return 0;
127
+ this.newDate.setHours(0, 0, 0, 0); // opcional: ignora hora
128
+ date.setHours(0, 0, 0, 0);
129
+ var diffDays = Math.floor((date.getTime() - this.newDate.getTime()) / (1000 * 60 * 60 * 24));
130
+ return diffDays; // positivo = dias restantes, negativo = dias vencidos (-4 = 4 dias atrasado)
131
+ };
132
+ DateUtilProvider.prototype.getDiffYearsByToday = function (date) {
133
+ if (!date)
134
+ return false;
135
+ var hoje = new Date();
136
+ var dataLimite = new Date(hoje.getFullYear() - 18, hoje.getMonth(), hoje.getDate());
137
+ return date <= dataLimite;
138
+ };
139
+ /**
140
+ * Format date to DD/MM/YYYY
141
+ * @author Starley Cazorla
142
+ * @param date
143
+ * @returns formatted date
144
+ */
145
+ DateUtilProvider.prototype.returnFormatBrDate = function (date) {
146
+ var d = date instanceof Date ? date : new Date(date);
147
+ var day = String(d.getDate()).padStart(2, '0');
148
+ var month = String(d.getMonth() + 1).padStart(2, '0');
149
+ var year = d.getFullYear();
150
+ return "".concat(day, "/").concat(month, "/").concat(year);
151
+ };
152
+ /**
153
+ * Convert DD/MM/YYYY to Date
154
+ * @author Starley Cazorla
155
+ * @param dateBr
156
+ * @returns Date object
157
+ */
158
+ DateUtilProvider.prototype.convertBrDateToDate = function (dateBr) {
159
+ if (!dateBr) {
160
+ throw new Error('Data não informada');
161
+ }
162
+ var _a = dateBr.split('/').map(Number), day = _a[0], month = _a[1], year = _a[2];
163
+ if (!day || !month || !year) {
164
+ throw new Error('Data inválida');
165
+ }
166
+ return new Date(year, month - 1, day, 0, 0, 0, 0);
167
+ };
117
168
  DateUtilProvider.ɵfac = function DateUtilProvider_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || DateUtilProvider)(); };
118
169
  DateUtilProvider.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: DateUtilProvider, factory: DateUtilProvider.ɵfac });
119
170
  return DateUtilProvider;
@@ -1 +1 @@
1
- {"version":3,"file":"date-util-provider.js","sourceRoot":"","sources":["../../src/provider/date-util-provider.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable } from \"@angular/core\";\nimport moment from 'moment';\n\n/**\n * Date utils\n * @author Starley Cazorla\n */\n\n@Injectable()\nexport class DateUtilProvider {\n newDate = new Date();\n\n constructor() { }\n\n /**\n * Veifica se a data e valida\n * @param date \n * @returns \n */\n isValidDate(date: string) {\n if (!date) return false;\n // Regex format: DD/MM/YYYY | DD-MM-YYYY | DD.MM.YYYY\n const re = /^(?:(?:31(\\/|-|\\.)(?:0?[13578]|1[02]))\\1|(?:(?:29|30)(\\/|-|\\.)(?:0?[1,3-9]|1[0-2])\\2))(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$|^(?:29(\\/|-|\\.)0?2\\3(?:(?:(?:1[6-9]|[2-9]\\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\\d|2[0-8])(\\/|-|\\.)(?:(?:0?[1-9])|(?:1[0-2]))\\4(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$/;\n return re.test(date);\n }\n\n /**\n * Converts date to int\n * @author Starley Cazorla\n * @param data \n * @returns date to int \n */\n convertDateToInt(data: string): number {\n let temp: any;\n\n if (data === null || data === undefined || data.length <= 0) {\n return 0;\n }\n data = data.substring(0, 10);\n\n if (data.includes('/')) {\n temp = data.split('/');\n } else if (data.includes('-')) {\n temp = data.split('-');\n }\n\n if (temp === undefined) {\n return 0;\n } else if (temp[0].length > 2) {\n return temp[0] + temp[1] + temp[2];\n } else {\n return temp[2] + temp[1] + temp[0];\n }\n }\n\n /**\n * Determines whether today is\n * @author Starley Cazorla\n * @param dateInput \n * @returns true if today \n */\n isToday(dateInput: any): boolean {\n if (dateInput && this.convertDateToInt(dateInput) === this.convertDateToInt(new Date().toLocaleDateString('pt-Br'))) return true;\n return false;\n }\n\n /**\n * Determines whether date is bigger today is\n * @author Starley Cazorla\n * @param dateInput \n * @returns true if date is bigger today \n */\n isDateIsSmallerToday(dateInput: any): boolean {\n if (dateInput === null || dateInput === undefined) return false;\n if (this.convertDateToInt(dateInput) < this.convertDateToInt(new Date().toLocaleDateString('pt-Br'))) return true;\n return false;\n }\n\n /**\n * Firsts bigger than second\n * @author Starley Cazorla\n * @param firstDate \n * @param lastDate \n * @returns true if bigger than second \n */\n firstBiggerThanSecond(firstDate: any, lastDate: any): boolean {\n if (this.convertDateToInt(firstDate) < this.convertDateToInt(lastDate)) return true;\n return false;\n }\n\n /**\n * Gets diff days by today\n * @author Starley Cazorla\n * @param date1 \n * @returns \n */\n getDiffDaysByToday(date1: any) {\n var momentA = moment(date1, 'DD/MM/YYYY');\n var momentB = moment(new Intl.DateTimeFormat('pt-BR').format(this.newDate), 'DD/MM/YYYY');\n var diff = momentB.valueOf() - momentA.valueOf();\n var diffDays = Math.ceil(diff / (1000 * 3600 * 24));\n return diffDays;\n }\n\n /**\n * Gets name day\n * @author Starley Cazorla\n * @param date \n * @param nmDays \n * @returns \n */\n getNameDay(date: any, nmDays: any) {\n var days = ['Domingo', 'Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sabado'];\n var d = new Date(date);\n d.setDate(d.getDate() + nmDays)\n return {\n 'dayName': days[d.getDay()],\n 'dayNumber': d.getDate()\n };\n }\n}"]}
1
+ {"version":3,"file":"date-util-provider.js","sourceRoot":"","sources":["../../src/provider/date-util-provider.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable } from \"@angular/core\";\nimport moment from 'moment';\n\n/**\n * Date utils\n * @author Starley Cazorla\n */\n\n@Injectable()\nexport class DateUtilProvider {\n newDate = new Date();\n\n constructor() { }\n\n /**\n * Veifica se a data e valida\n * @param date\n * @returns\n */\n isValidDate(date: string) {\n if (!date) return false;\n // Regex format: DD/MM/YYYY | DD-MM-YYYY | DD.MM.YYYY\n const re = /^(?:(?:31(\\/|-|\\.)(?:0?[13578]|1[02]))\\1|(?:(?:29|30)(\\/|-|\\.)(?:0?[1,3-9]|1[0-2])\\2))(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$|^(?:29(\\/|-|\\.)0?2\\3(?:(?:(?:1[6-9]|[2-9]\\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\\d|2[0-8])(\\/|-|\\.)(?:(?:0?[1-9])|(?:1[0-2]))\\4(?:(?:1[6-9]|[2-9]\\d)?\\d{2})$/;\n return re.test(date);\n }\n\n /**\n * Converts date to int\n * @author Starley Cazorla\n * @param data\n * @returns date to int\n */\n convertDateToInt(data: string): number {\n let temp: any;\n\n if (data === null || data === undefined || data.length <= 0) {\n return 0;\n }\n data = data.substring(0, 10);\n\n if (data.includes('/')) {\n temp = data.split('/');\n } else if (data.includes('-')) {\n temp = data.split('-');\n }\n\n if (temp === undefined) {\n return 0;\n } else if (temp[0].length > 2) {\n return temp[0] + temp[1] + temp[2];\n } else {\n return temp[2] + temp[1] + temp[0];\n }\n }\n\n /**\n * Determines whether today is\n * @author Starley Cazorla\n * @param dateInput\n * @returns true if today\n */\n isToday(dateInput: any): boolean {\n if (dateInput && this.convertDateToInt(dateInput) === this.convertDateToInt(new Date().toLocaleDateString('pt-Br'))) return true;\n return false;\n }\n\n /**\n * Determines whether date is bigger today is\n * @author Starley Cazorla\n * @param dateInput\n * @returns true if date is bigger today\n */\n isDateIsSmallerToday(dateInput: any): boolean {\n if (dateInput === null || dateInput === undefined) return false;\n if (this.convertDateToInt(dateInput) < this.convertDateToInt(new Date().toLocaleDateString('pt-Br'))) return true;\n return false;\n }\n\n /**\n * Firsts bigger than second\n * @author Starley Cazorla\n * @param firstDate\n * @param lastDate\n * @returns true if bigger than second\n */\n firstBiggerThanSecond(firstDate: any, lastDate: any): boolean {\n if (this.convertDateToInt(firstDate) < this.convertDateToInt(lastDate)) return true;\n return false;\n }\n\n /**\n * Gets diff days by today\n * @author Starley Cazorla\n * @param date1\n * @deprecated\n * @returns\n */\n getDiffDaysByToday(date1: any) {\n var momentA = moment(date1, 'DD/MM/YYYY');\n var momentB = moment(new Intl.DateTimeFormat('pt-BR').format(this.newDate), 'DD/MM/YYYY');\n var diff = momentB.valueOf() - momentA.valueOf();\n var diffDays = Math.ceil(diff / (1000 * 3600 * 24));\n return diffDays;\n }\n\n /**\n * Gets name day\n * @author Starley Cazorla\n * @param date\n * @param nmDays\n * @returns\n */\n getNameDay(date: any, nmDays: any) {\n var days = ['Domingo', 'Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sabado'];\n var d = new Date(date);\n d.setDate(d.getDate() + nmDays)\n return {\n 'dayName': days[d.getDay()],\n 'dayNumber': d.getDate()\n };\n }\n\n /**\n * Gets diff days by date\n * @author Starley Cazorla\n * @param date\n * @returns\n */\n getDiffDaysByDate(date: Date) {\n if (!date) return 0;\n\n this.newDate.setHours(0, 0, 0, 0); // opcional: ignora hora\n date.setHours(0, 0, 0, 0);\n\n const diffDays = Math.floor((date.getTime() - this.newDate.getTime()) / (1000 * 60 * 60 * 24));\n return diffDays; // positivo = dias restantes, negativo = dias vencidos (-4 = 4 dias atrasado)\n }\n\n getDiffYearsByToday(date: Date) {\n if (!date) return false;\n\n const hoje = new Date();\n const dataLimite = new Date(\n hoje.getFullYear() - 18,\n hoje.getMonth(),\n hoje.getDate()\n );\n\n return date <= dataLimite;\n }\n\n /**\n * Format date to DD/MM/YYYY\n * @author Starley Cazorla\n * @param date\n * @returns formatted date\n */\n returnFormatBrDate(date: Date | string) {\n const d = date instanceof Date ? date : new Date(date);\n\n const day = String(d.getDate()).padStart(2, '0');\n const month = String(d.getMonth() + 1).padStart(2, '0');\n const year = d.getFullYear();\n\n return `${day}/${month}/${year}`;\n }\n\n /**\n * Convert DD/MM/YYYY to Date\n * @author Starley Cazorla\n * @param dateBr\n * @returns Date object\n */\n convertBrDateToDate(dateBr: string): Date {\n if (!dateBr) {\n throw new Error('Data não informada');\n }\n\n const [day, month, year] = dateBr.split('/').map(Number);\n\n if (!day || !month || !year) {\n throw new Error('Data inválida');\n }\n\n return new Date(year, month - 1, day, 0, 0, 0, 0);\n }\n\n\n}\n"]}
@@ -28,7 +28,7 @@ export declare class IonUtilsProvider {
28
28
  * @param enumInput
29
29
  * @returns
30
30
  */
31
- returnEnumStringName(enumInput: any): string[];
31
+ returnEnumStringName(enumInput: any): any[];
32
32
  static ɵfac: i0.ɵɵFactoryDeclaration<IonUtilsProvider, never>;
33
33
  static ɵprov: i0.ɵɵInjectableDeclaration<IonUtilsProvider>;
34
34
  }
@@ -67,8 +67,7 @@ export { TapDirective };
67
67
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TapDirective, [{
68
68
  type: Directive,
69
69
  args: [{
70
- selector: '[appTap]',
71
- standalone: false
70
+ selector: '[appTap]'
72
71
  }]
73
72
  }], function () { return []; }, { tap: [{
74
73
  type: Output
@@ -1 +1 @@
1
- {"version":3,"file":"tap.directive.js","sourceRoot":"","sources":["../../src/tap/tap.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAU,MAAM,EAAE,MAAM,eAAe,CAAC;;AAEtF;;;GAGG;AAEH;IAsBI;QAhBU,QAAG,GAAG,IAAI,YAAY,EAAE,CAAC;QACzB,cAAS,GAAG,IAAI,YAAY,EAAE,CAAC;QACzC,YAAO,GAAG,CAAC,CAAC;QACZ,aAAQ,GAAG,CAAC,CAAC;QACb,eAAU,GAAQ,IAAI,CAAC;QACvB,eAAU,GAAG;YACT,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,GAAG;SAChB,CAAC;QACF,qBAAgB,GAAG;YACf,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,GAAG;SAChB,CAAC;IAEc,CAAC;IAEjB,+BAAQ,GAAR;QACI,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC;IACzC,CAAC;IAGD,iCAAU,GADV,UACW,CAAyB;QADpC,iBAcC;QAZG,IAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAM,WAAW,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,YAAY,CAAC;QAC3E,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;YAC7D,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,WAAW,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;YAC/C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpB,CAAC;aAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,cAAM,OAAA,KAAI,CAAC,QAAQ,EAAE,EAAf,CAAe,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC;IAChC,CAAC;IAEO,+BAAQ,GAAhB;QACI,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACjD,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACpB,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;YAC9D,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;IACrB,CAAC;IAEO,gCAAS,GAAjB;QACI,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,wBAAwB;QACvD,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IACrB,CAAC;4GAvDQ,YAAY;mEAAZ,YAAY;YAAZ,uFAAA,sBAAkB,IAAN;;uBAXzB;CAoEC,AA7DD,IA6DC;SAzDY,YAAY;uFAAZ,YAAY;cAJxB,SAAS;eAAC;gBACP,QAAQ,EAAE,UAAU;gBACpB,UAAU,EAAE,KAAK;aACpB;;kBAGI,MAAM;;kBACN,MAAM;;kBAsBN,YAAY;mBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC","sourcesContent":["import { Directive, EventEmitter, HostListener, OnInit, Output } from '@angular/core';\n\n/**\n * Gerencia tap e doubleTap\n * @author Starley Cazorla\n */\n\n@Directive({\n selector: '[appTap]',\n standalone: false\n})\nexport class TapDirective implements OnInit {\n\n @Output() tap = new EventEmitter();\n @Output() doubleTap = new EventEmitter();\n lastTap = 0;\n tapCount = 0;\n tapTimeout: any = null;\n tapGesture = {\n name: 'tap',\n enabled: false,\n interval: 250,\n };\n doubleTapGesture = {\n name: 'doubleTap',\n enabled: false,\n interval: 300,\n };\n\n constructor() { }\n\n ngOnInit(): void {\n this.tapGesture.enabled = true;\n this.doubleTapGesture.enabled = true;\n }\n\n @HostListener('click', ['$event'])\n handleTaps(e: { timeStamp: number; }) {\n const tapTimestamp = Math.floor(e.timeStamp);\n const isDoubleTap = this.lastTap + this.tapGesture.interval > tapTimestamp;\n if (!this.tapGesture.enabled && !this.doubleTapGesture.enabled) {\n return this.resetTaps();\n }\n this.tapCount++;\n if (isDoubleTap && this.doubleTapGesture.enabled) {\n this.emitTaps();\n } else if (!isDoubleTap) {\n this.tapTimeout = setTimeout(() => this.emitTaps(), this.tapGesture.interval);\n }\n this.lastTap = tapTimestamp;\n }\n\n private emitTaps() {\n if (this.tapCount === 1 && this.tapGesture.enabled) {\n this.tap.emit();\n } else if (this.tapCount === 2 && this.doubleTapGesture.enabled) {\n this.doubleTap.emit();\n }\n this.resetTaps();\n }\n\n private resetTaps() {\n clearTimeout(this.tapTimeout); // clear the old timeout\n this.tapCount = 0;\n this.tapTimeout = null;\n this.lastTap = 0;\n }\n\n}\n"]}
1
+ {"version":3,"file":"tap.directive.js","sourceRoot":"","sources":["../../src/tap/tap.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAU,MAAM,EAAE,MAAM,eAAe,CAAC;;AAEtF;;;GAGG;AAEH;IAqBI;QAhBU,QAAG,GAAG,IAAI,YAAY,EAAE,CAAC;QACzB,cAAS,GAAG,IAAI,YAAY,EAAE,CAAC;QACzC,YAAO,GAAG,CAAC,CAAC;QACZ,aAAQ,GAAG,CAAC,CAAC;QACb,eAAU,GAAQ,IAAI,CAAC;QACvB,eAAU,GAAG;YACT,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,GAAG;SAChB,CAAC;QACF,qBAAgB,GAAG;YACf,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,GAAG;SAChB,CAAC;IAEc,CAAC;IAEjB,+BAAQ,GAAR;QACI,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC;IACzC,CAAC;IAGD,iCAAU,GADV,UACW,CAAyB;QADpC,iBAcC;QAZG,IAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAM,WAAW,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,YAAY,CAAC;QAC3E,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;YAC7D,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,WAAW,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;YAC/C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpB,CAAC;aAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,cAAM,OAAA,KAAI,CAAC,QAAQ,EAAE,EAAf,CAAe,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC;IAChC,CAAC;IAEO,+BAAQ,GAAhB;QACI,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACjD,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACpB,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;YAC9D,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;IACrB,CAAC;IAEO,gCAAS,GAAjB;QACI,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,wBAAwB;QACvD,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IACrB,CAAC;4GAvDQ,YAAY;mEAAZ,YAAY;YAAZ,uFAAA,sBAAkB,IAAN;;uBAVzB;CAmEC,AA5DD,IA4DC;SAzDY,YAAY;uFAAZ,YAAY;cAHxB,SAAS;eAAC;gBACP,QAAQ,EAAE,UAAU;aACvB;sCAGa,GAAG;kBAAZ,MAAM;YACG,SAAS;kBAAlB,MAAM;YAuBP,UAAU;kBADT,YAAY;mBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC","sourcesContent":["import { Directive, EventEmitter, HostListener, OnInit, Output } from '@angular/core';\n\n/**\n * Gerencia tap e doubleTap\n * @author Starley Cazorla\n */\n\n@Directive({\n selector: '[appTap]'\n})\nexport class TapDirective implements OnInit {\n\n @Output() tap = new EventEmitter();\n @Output() doubleTap = new EventEmitter();\n lastTap = 0;\n tapCount = 0;\n tapTimeout: any = null;\n tapGesture = {\n name: 'tap',\n enabled: false,\n interval: 250,\n };\n doubleTapGesture = {\n name: 'doubleTap',\n enabled: false,\n interval: 300,\n };\n\n constructor() { }\n\n ngOnInit(): void {\n this.tapGesture.enabled = true;\n this.doubleTapGesture.enabled = true;\n }\n\n @HostListener('click', ['$event'])\n handleTaps(e: { timeStamp: number; }) {\n const tapTimestamp = Math.floor(e.timeStamp);\n const isDoubleTap = this.lastTap + this.tapGesture.interval > tapTimestamp;\n if (!this.tapGesture.enabled && !this.doubleTapGesture.enabled) {\n return this.resetTaps();\n }\n this.tapCount++;\n if (isDoubleTap && this.doubleTapGesture.enabled) {\n this.emitTaps();\n } else if (!isDoubleTap) {\n this.tapTimeout = setTimeout(() => this.emitTaps(), this.tapGesture.interval);\n }\n this.lastTap = tapTimestamp;\n }\n\n private emitTaps() {\n if (this.tapCount === 1 && this.tapGesture.enabled) {\n this.tap.emit();\n } else if (this.tapCount === 2 && this.doubleTapGesture.enabled) {\n this.doubleTap.emit();\n }\n this.resetTaps();\n }\n\n private resetTaps() {\n clearTimeout(this.tapTimeout); // clear the old timeout\n this.tapCount = 0;\n this.tapTimeout = null;\n this.lastTap = 0;\n }\n\n}\n"]}
package/package.json CHANGED
@@ -1,56 +1,55 @@
1
1
  {
2
- "name": "@starley/ion-directives",
3
- "version": "1.4.0",
4
- "tag": "alpha",
5
- "description": "Directivas internas para ionic",
6
- "main": "./dist/index.js",
7
- "typings": "./dist/index.d.ts",
8
- "files": [
9
- "dist"
10
- ],
11
- "scripts": {
12
- "ngc": "ngc",
13
- "build": "rm -rf dist && rm -rf node_modules package-lock.json && npm install --legacy-peer-deps && npm run ngc",
14
- "publishPackage": "npm run build && npm publish"
15
- },
16
- "peerDependencies": {
17
- "@angular/common": ">=10.0.0",
18
- "@angular/core": ">=10.0.0",
19
- "@angular/forms": ">=10.0.0"
20
- },
21
- "repository": {
22
- "type": "git",
23
- "url": "git+https://github.com/StarleyDev/ion-directives.git"
24
- },
25
- "keywords": [
26
- "ionic",
27
- "mask",
28
- "mascara",
29
- "input",
30
- "presshold",
31
- "tap",
32
- "doubletap"
33
- ],
34
- "author": "Starley Cazorla",
35
- "license": "MIT",
36
- "bugs": {
37
- "url": "https://github.com/StarleyDev/ion-directives/issues"
38
- },
39
- "homepage": "https://github.com/StarleyDev/ion-directives#readme",
40
- "devDependencies": {
41
- "@angular/common": "^20.3.11",
42
- "@angular/compiler": "^20.3.11",
43
- "@angular/compiler-cli": "^20.3.11",
44
- "@angular/core": "^20.3.11",
45
- "@angular/forms": "^20.3.11",
46
- "@types/node": "^24.10.1",
47
- "nodemon": "^3.1.11",
48
- "ts-node": "^10.9.2",
49
- "typescript": "~5.8.3"
50
- },
51
- "dependencies": {
52
- "codelyzer": "^6.0.2",
53
- "moment": "^2.30.1",
54
- "tslib": "^2.8.1"
55
- }
2
+ "name": "@starley/ion-directives",
3
+ "version": "1.4.2",
4
+ "description": "Directivas internas para ionic",
5
+ "main": "./dist/index.js",
6
+ "typings": "./dist/index.d.ts",
7
+ "files": [
8
+ "dist"
9
+ ],
10
+ "scripts": {
11
+ "ngc": "ngc",
12
+ "build": "rm -rf dist && rm -rf node_modules package-lock.json && npm install --legacy-peer-deps && npm run ngc",
13
+ "publishPackage": "npm run build && npm publish"
14
+ },
15
+ "peerDependencies": {
16
+ "@angular/common": ">=10.0.0",
17
+ "@angular/core": ">=10.0.0",
18
+ "@angular/forms": ">=10.0.0"
19
+ },
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "git+https://github.com/StarleyDev/ion-directives.git"
23
+ },
24
+ "keywords": [
25
+ "ionic",
26
+ "mask",
27
+ "mascara",
28
+ "input",
29
+ "presshold",
30
+ "tap",
31
+ "doubletap"
32
+ ],
33
+ "author": "Starley Cazorla",
34
+ "license": "MIT",
35
+ "bugs": {
36
+ "url": "https://github.com/StarleyDev/ion-directives/issues"
37
+ },
38
+ "homepage": "https://github.com/StarleyDev/ion-directives#readme",
39
+ "devDependencies": {
40
+ "@angular/common": "^19.2.2",
41
+ "@angular/compiler": "^19.2.2",
42
+ "@angular/compiler-cli": "^18.0.0",
43
+ "@angular/core": "^19.2.2",
44
+ "@angular/forms": "^19.2.2",
45
+ "@types/node": "^22.13.10",
46
+ "nodemon": "^3.1.9",
47
+ "ts-node": "^10.9.2",
48
+ "typescript": "~5.4.0"
49
+ },
50
+ "dependencies": {
51
+ "codelyzer": "^6.0.2",
52
+ "moment": "^2.30.1",
53
+ "tslib": "^2.8.1"
54
+ }
56
55
  }