appproject-framework 1.0.17 → 1.0.18

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.
@@ -2600,7 +2600,7 @@ class InputTextComponent extends BaseInputComponent {
2600
2600
  showSeePassword = false;
2601
2601
  inputChange = new EventEmitter();
2602
2602
  //control value acessor
2603
- data;
2603
+ data = null;
2604
2604
  onChange = (data) => { };
2605
2605
  onTouch = () => { };
2606
2606
  disabled = false;
@@ -2614,35 +2614,8 @@ class InputTextComponent extends BaseInputComponent {
2614
2614
  ngOnInit() {
2615
2615
  super.ngOnInit();
2616
2616
  }
2617
- writeValue(value, type) {
2618
- //Converte o valor corretamente de acordo com o tipo de input
2619
- console.log('write value', value);
2620
- let valueEval = value;
2621
- if (type == "number") {
2622
- if (Number(value) === 0) {
2623
- //this.onChange(null);
2624
- valueEval = null;
2625
- }
2626
- else {
2627
- //this.onChange(Number(value));
2628
- valueEval = Number(value);
2629
- }
2630
- }
2631
- else if (type == "date") {
2632
- //null se for ""
2633
- if (value === "") {
2634
- //this.onChange(null);
2635
- valueEval = null;
2636
- }
2637
- else {
2638
- //this.onChange(value);
2639
- }
2640
- }
2641
- else {
2642
- //this.onChange(value);
2643
- }
2644
- this.onChange(valueEval);
2645
- this.data = valueEval;
2617
+ writeValue(value) {
2618
+ this.data = this.normalizarValor(value);
2646
2619
  }
2647
2620
  registerOnChange(fn) {
2648
2621
  this.onChange = fn;
@@ -2656,7 +2629,7 @@ class InputTextComponent extends BaseInputComponent {
2656
2629
  ngOnDestroy() {
2657
2630
  }
2658
2631
  onInputChange(event) {
2659
- const valor = event?.detail?.value;
2632
+ const valor = this.normalizarValor(event?.detail?.value ?? event?.target?.value);
2660
2633
  this.data = valor;
2661
2634
  this.onChange(valor);
2662
2635
  this.inputChange.emit(valor);
@@ -2673,6 +2646,7 @@ class InputTextComponent extends BaseInputComponent {
2673
2646
  if (this.form) {
2674
2647
  this.form.get(this.formControlName)?.markAsTouched();
2675
2648
  }
2649
+ this.onTouch();
2676
2650
  }
2677
2651
  entered() {
2678
2652
  //adicionar classe ao ion-item, não funcionou
@@ -2698,9 +2672,22 @@ class InputTextComponent extends BaseInputComponent {
2698
2672
  if (this.type == 'date') {
2699
2673
  //texto = this.utils.converterDataHora(texto, false, false);
2700
2674
  }
2701
- navigator.clipboard.writeText(texto);
2675
+ navigator.clipboard.writeText(String(texto ?? ''));
2702
2676
  //this.utils.showToast('Copiado')
2703
2677
  }
2678
+ normalizarValor(value) {
2679
+ if (this.type === 'number') {
2680
+ if (value === '' || value === null || value === undefined) {
2681
+ return null;
2682
+ }
2683
+ const numero = Number(value);
2684
+ return Number.isNaN(numero) ? null : numero;
2685
+ }
2686
+ if (this.type === 'date' && value === '') {
2687
+ return null;
2688
+ }
2689
+ return value === null || value === undefined ? null : String(value);
2690
+ }
2704
2691
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.1", ngImport: i0, type: InputTextComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
2705
2692
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.2.1", type: InputTextComponent, isStandalone: true, selector: "kb-input-text", inputs: { showSeePassword: "showSeePassword" }, outputs: { inputChange: "inputChange" }, providers: [
2706
2693
  {
@@ -2708,7 +2695,7 @@ class InputTextComponent extends BaseInputComponent {
2708
2695
  useExisting: InputTextComponent,
2709
2696
  multi: true,
2710
2697
  },
2711
- ], viewQueries: [{ propertyName: "itemInput", first: true, predicate: ["itemInput"], descendants: true, read: ElementRef }, { propertyName: "inputTextControl", first: true, predicate: ["inputText"], descendants: true, read: ElementRef, static: true }], usesInheritance: true, ngImport: i0, template: "<!-- \r\n se label position = floating colocar padding = 12px \r\n \r\n -->\r\n<div [class]=\"{ 'input-text-padding': !classic }\">\r\n <!-- [label]=\"label\"\r\n [labelPlacement]=\"labelPosition\" -->\r\n @if(classic) {\r\n <ion-item #itemInput lines=\"none\"\r\n style=\" --background: inherited; --background-focused: transparent; padding-right: 0px;\"\r\n [class]=\"itemClass + ' classic'\"\r\n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake' : '' \">\r\n\r\n <!--\r\n <ion-label class=\"label-focus\" [position]=\"labelPosition\">{{ label }}</ion-label>\r\n -->\r\n @if (label) {\r\n <ion-label style=\"color: var(--input-label-color);\" position=\"{{ labelPosition }}\">{{ label }}</ion-label>\r\n }\r\n\r\n <!-- \r\n <ion-icon slot=\"start\" name=\"lock-closed\" aria-hidden=\"true\"></ion-icon>\r\n -->\r\n\r\n <ion-input #inputText [type]=\"type\" [placeholder]=\"placeholder\" [readonly]=\"readonly\" \r\n (input)=\"writeValue(inputText.value, type)\" [value]=\"data\" (ionBlur)=\"onBlur()\" (ionFocus)=\"entered()\">\r\n </ion-input>\r\n\r\n\r\n @if (showSeePassword) {\r\n\r\n <ion-button fill=\"clear\" slot=\"end\" aria-label=\"Mostrar/esconder\" class=\"btn-show-password\"\r\n (click)=\"changeTypeOfInput()\">\r\n <ion-icon slot=\"icon-only\" [icon]=\"type == 'password' ? 'eye-outline' : 'eye-off-outline' \"></ion-icon>\r\n </ion-button>\r\n\r\n }\r\n\r\n @if (showSeeCopy) {\r\n\r\n <ion-button fill=\"clear\" slot=\"end\" aria-label=\"Mostrar/esconder\" class=\"btn-show-password\" (click)=\"copiarClick()\">\r\n <ion-icon slot=\"icon-only\" icon=\"copy-outline\"></ion-icon>\r\n </ion-button>\r\n\r\n }\r\n\r\n\r\n </ion-item>\r\n }\r\n @else {\r\n <ion-input #inputText [type]=\"type\" [label]=\"label\" [labelPlacement]=\"labelPosition\" fill=\"outline\"\r\n [placeholder]=\"placeholder\" class=\"modern\" maxlength=\"{{ max }}\" \r\n [value]=\"data\" mode=\"md\"\r\n (input)=\"writeValue(inputText.value, type)\" \r\n (ionInput)=\"onInputChange($event)\" \r\n (ionBlur)=\"onBlur()\" \r\n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake-modern' : '' \"\r\n [disabled]=\"readonly\" [shape]=\"shape\">\r\n @if (icon || iconSrc) {\r\n <ion-icon slot=\"start\" [icon]=\"icon\" [src]=\"iconSrc\" aria-hidden=\"true\"></ion-icon>\r\n }\r\n\r\n @if (showSeePassword) {\r\n\r\n <ion-button fill=\"clear\" slot=\"end\" aria-label=\"Mostrar/esconder\" class=\"btn-show-password\"\r\n (click)=\"changeTypeOfInput()\">\r\n <ion-icon slot=\"icon-only\" [icon]=\"type == 'password' ? 'eye-outline' : 'eye-off-outline' \"></ion-icon>\r\n </ion-button>\r\n\r\n }\r\n\r\n @if (showSeeCopy) {\r\n\r\n <ion-button fill=\"clear\" slot=\"end\" aria-label=\"Mostrar/esconder\" class=\"btn-show-password\" (click)=\"copiarClick()\">\r\n <ion-icon slot=\"icon-only\" icon=\"copy-outline\"></ion-icon>\r\n </ion-button>\r\n\r\n }\r\n </ion-input>\r\n }\r\n\r\n @if(form) {\r\n <div class=\"validation-errors\">\r\n\r\n @for(validation of validation_messages; track validation.type) {\r\n <ng-container>\r\n @if(form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty ||\r\n form.get(formControlName)?.touched)) {\r\n <div class=\"error-message\" [ngClass]=\"validationClass\">\r\n &#8226; {{ validation.message }}\r\n </div>\r\n }\r\n </ng-container>\r\n }\r\n\r\n </div>\r\n }\r\n\r\n</div>\r\n", styles: [".classic .btn-show-password{margin-top:auto;margin-bottom:calc((var(--input-min-height, 30px) - 30px) * .57142857 + 2px);margin-left:4px}\n", "@charset \"UTF-8\";@keyframes shake{0%{transform:translate(20px)}20%{transform:translate(-20px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(4px)}to{transform:translate(0)}}.error-input ion-label,.error-shake ion-label{color:red!important}.error-input ion-input,.error-shake ion-input{border:1px solid red!important}.error-shake ion-input{animation:shake .4s 1 linear}.error-shake-modern{--border-color: var(--input-color-error, red) !important;--color: var(--input-color-error, red) !important;--highlight-color-focused: var(--input-color-error, red) !important;animation:shake .4s 1 linear}.validation-errors{margin-top:4px}ion-label{margin-bottom:var(--label-margin-bottom, 2px)!important;color:var(--label-color, initial)!important}ion-item ion-label{overflow:initial!important}ion-input{text-align:var(--input-text-align, start)}.classic ion-input{background:var(--input-color, white);padding-left:2px!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px;max-height:30px;min-height:var(--input-min-height, 30px);transition:.2s ease;color:var(--input-font-color, black)}ion-input.modern{--border-color: var(--input-border-color, darkgray);--color: var(--input-font-color, black);--highlight-color-focused: var(--input-highlight-color, #537bc7)}ion-textarea.modern{--border-color: darkgray;--border-color-focused: #00ff00;--border-color-hover: yellow;--color: var(--input-font-color, black);--highlight-color-focused: var(--input-higlight-color, #537bc7);--input-focus-border-color: transparent}.input-text-padding{padding-bottom:var(--input-text-padding-bottom, var(--input-text-default-padding, 16px));padding-left:var(--input-text-padding-left, var(--input-text-default-padding, 16px));padding-right:var(--input-text-padding-right, var(--input-text-default-padding, 16px))}.classic .has-focus{border:1px solid var(--input-focus-border-color, skyblue)!important}.item-has-focus ion-label{color:var(--label-focus-color, blue)!important}.no-padding-end{--inner-padding-end: 0}.no-padding-start{--padding-start: 0px}.item-inner{padding-right:0!important}.padding{padding:auto;padding-left:0}.no-padding{--inner-padding-end: 0px;--padding-start: 0px !important;--padding-bottom: 0px;--inner-padding-bottom: 0px;height:auto!important;--min-height: auto !important}.no-padding-no-height{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px}.padding-top{--padding-top: 0px}.input-login{height:36px}.modal-editar ion-label{min-width:80px}.modal-vldt-editar{margin-left:80px}.label-right ion-label{transform-origin:right top;align-self:flex-end;margin-bottom:4%!important}.align-to-right ion-label{position:relative;left:25%;text-align:end}.error-message{font-size:small;color:var(--input-color-error, rgb(212, 79, 79));margin-left:15px}.item-interactive-disabled ion-label{opacity:var(--item-disabled-opacity, .6)}.native-input[disabled]{opacity:.6!important;background-color:transparent}.item-label-stacked{--min-height: auto}.tipObrigatorio{opacity:.4}[hidden]{display:none!important}\n"], dependencies: [{ kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"], outputs: ["ionFocus", "ionBlur"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }], changeDetection: i0.ChangeDetectionStrategy.Eager });
2698
+ ], viewQueries: [{ propertyName: "itemInput", first: true, predicate: ["itemInput"], descendants: true, read: ElementRef }, { propertyName: "inputTextControl", first: true, predicate: ["inputText"], descendants: true, read: ElementRef, static: true }], usesInheritance: true, ngImport: i0, template: "<!-- \r\n se label position = floating colocar padding = 12px \r\n \r\n -->\r\n<div [class]=\"{ 'input-text-padding': !classic }\">\r\n <!-- [label]=\"label\"\r\n [labelPlacement]=\"labelPosition\" -->\r\n @if(classic) {\r\n <ion-item #itemInput lines=\"none\"\r\n style=\" --background: inherited; --background-focused: transparent; padding-right: 0px;\"\r\n [class]=\"itemClass + ' classic'\"\r\n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake' : '' \">\r\n\r\n <!--\r\n <ion-label class=\"label-focus\" [position]=\"labelPosition\">{{ label }}</ion-label>\r\n -->\r\n @if (label) {\r\n <ion-label style=\"color: var(--input-label-color);\" position=\"{{ labelPosition }}\">{{ label }}</ion-label>\r\n }\r\n\r\n <!-- \r\n <ion-icon slot=\"start\" name=\"lock-closed\" aria-hidden=\"true\"></ion-icon>\r\n -->\r\n\r\n <ion-input #inputText [type]=\"type\" [placeholder]=\"placeholder\" [readonly]=\"readonly\" [value]=\"data\"\r\n (ionInput)=\"onInputChange($event)\" (ionBlur)=\"onBlur()\" (ionFocus)=\"entered()\">\r\n </ion-input>\r\n\r\n\r\n @if (showSeePassword) {\r\n\r\n <ion-button fill=\"clear\" slot=\"end\" aria-label=\"Mostrar/esconder\" class=\"btn-show-password\"\r\n (click)=\"changeTypeOfInput()\">\r\n <ion-icon slot=\"icon-only\" [icon]=\"type == 'password' ? 'eye-outline' : 'eye-off-outline' \"></ion-icon>\r\n </ion-button>\r\n\r\n }\r\n\r\n @if (showSeeCopy) {\r\n\r\n <ion-button fill=\"clear\" slot=\"end\" aria-label=\"Mostrar/esconder\" class=\"btn-show-password\" (click)=\"copiarClick()\">\r\n <ion-icon slot=\"icon-only\" icon=\"copy-outline\"></ion-icon>\r\n </ion-button>\r\n\r\n }\r\n\r\n\r\n </ion-item>\r\n }\r\n @else {\r\n <ion-input #inputText [type]=\"type\" [label]=\"label\" [labelPlacement]=\"labelPosition\" fill=\"outline\"\r\n [placeholder]=\"placeholder\" class=\"modern\" maxlength=\"{{ max }}\" [value]=\"data\" mode=\"md\"\r\n (ionInput)=\"onInputChange($event)\" (ionBlur)=\"onBlur()\"\r\n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake-modern' : '' \"\r\n [disabled]=\"readonly\" [shape]=\"shape\">\r\n @if (icon || iconSrc) {\r\n <ion-icon slot=\"start\" [icon]=\"icon\" [src]=\"iconSrc\" aria-hidden=\"true\"></ion-icon>\r\n }\r\n\r\n @if (showSeePassword) {\r\n\r\n <ion-button fill=\"clear\" slot=\"end\" aria-label=\"Mostrar/esconder\" class=\"btn-show-password\"\r\n (click)=\"changeTypeOfInput()\">\r\n <ion-icon slot=\"icon-only\" [icon]=\"type == 'password' ? 'eye-outline' : 'eye-off-outline' \"></ion-icon>\r\n </ion-button>\r\n\r\n }\r\n\r\n @if (showSeeCopy) {\r\n\r\n <ion-button fill=\"clear\" slot=\"end\" aria-label=\"Mostrar/esconder\" class=\"btn-show-password\" (click)=\"copiarClick()\">\r\n <ion-icon slot=\"icon-only\" icon=\"copy-outline\"></ion-icon>\r\n </ion-button>\r\n\r\n }\r\n </ion-input>\r\n }\r\n\r\n @if(form) {\r\n <div class=\"validation-errors\">\r\n\r\n @for(validation of validation_messages; track validation.type) {\r\n <ng-container>\r\n @if(form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty ||\r\n form.get(formControlName)?.touched)) {\r\n <div class=\"error-message\" [ngClass]=\"validationClass\">\r\n &#8226; {{ validation.message }}\r\n </div>\r\n }\r\n </ng-container>\r\n }\r\n\r\n </div>\r\n }\r\n\r\n</div>", styles: [".classic .btn-show-password{margin-top:auto;margin-bottom:calc((var(--input-min-height, 30px) - 30px) * .57142857 + 2px);margin-left:4px}\n", "@charset \"UTF-8\";@keyframes shake{0%{transform:translate(20px)}20%{transform:translate(-20px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(4px)}to{transform:translate(0)}}.error-input ion-label,.error-shake ion-label{color:red!important}.error-input ion-input,.error-shake ion-input{border:1px solid red!important}.error-shake ion-input{animation:shake .4s 1 linear}.error-shake-modern{--border-color: var(--input-color-error, red) !important;--color: var(--input-color-error, red) !important;--highlight-color-focused: var(--input-color-error, red) !important;animation:shake .4s 1 linear}.validation-errors{margin-top:4px}ion-label{margin-bottom:var(--label-margin-bottom, 2px)!important;color:var(--label-color, initial)!important}ion-item ion-label{overflow:initial!important}ion-input{text-align:var(--input-text-align, start)}.classic ion-input{background:var(--input-color, white);padding-left:2px!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px;max-height:30px;min-height:var(--input-min-height, 30px);transition:.2s ease;color:var(--input-font-color, black)}ion-input.modern{--border-color: var(--input-border-color, darkgray);--color: var(--input-font-color, black);--highlight-color-focused: var(--input-highlight-color, #537bc7)}ion-textarea.modern{--border-color: darkgray;--border-color-focused: #00ff00;--border-color-hover: yellow;--color: var(--input-font-color, black);--highlight-color-focused: var(--input-higlight-color, #537bc7);--input-focus-border-color: transparent}.input-text-padding{padding-bottom:var(--input-text-padding-bottom, var(--input-text-default-padding, 16px));padding-left:var(--input-text-padding-left, var(--input-text-default-padding, 16px));padding-right:var(--input-text-padding-right, var(--input-text-default-padding, 16px))}.classic .has-focus{border:1px solid var(--input-focus-border-color, skyblue)!important}.item-has-focus ion-label{color:var(--label-focus-color, blue)!important}.no-padding-end{--inner-padding-end: 0}.no-padding-start{--padding-start: 0px}.item-inner{padding-right:0!important}.padding{padding:auto;padding-left:0}.no-padding{--inner-padding-end: 0px;--padding-start: 0px !important;--padding-bottom: 0px;--inner-padding-bottom: 0px;height:auto!important;--min-height: auto !important}.no-padding-no-height{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px}.padding-top{--padding-top: 0px}.input-login{height:36px}.modal-editar ion-label{min-width:80px}.modal-vldt-editar{margin-left:80px}.label-right ion-label{transform-origin:right top;align-self:flex-end;margin-bottom:4%!important}.align-to-right ion-label{position:relative;left:25%;text-align:end}.error-message{font-size:small;color:var(--input-color-error, rgb(212, 79, 79));margin-left:15px}.item-interactive-disabled ion-label{opacity:var(--item-disabled-opacity, .6)}.native-input[disabled]{opacity:.6!important;background-color:transparent}.item-label-stacked{--min-height: auto}.tipObrigatorio{opacity:.4}[hidden]{display:none!important}\n"], dependencies: [{ kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"], outputs: ["ionFocus", "ionBlur"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }], changeDetection: i0.ChangeDetectionStrategy.Eager });
2712
2699
  }
2713
2700
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.1", ngImport: i0, type: InputTextComponent, decorators: [{
2714
2701
  type: Component,
@@ -2718,7 +2705,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.1", ngImpor
2718
2705
  useExisting: InputTextComponent,
2719
2706
  multi: true,
2720
2707
  },
2721
- ], template: "<!-- \r\n se label position = floating colocar padding = 12px \r\n \r\n -->\r\n<div [class]=\"{ 'input-text-padding': !classic }\">\r\n <!-- [label]=\"label\"\r\n [labelPlacement]=\"labelPosition\" -->\r\n @if(classic) {\r\n <ion-item #itemInput lines=\"none\"\r\n style=\" --background: inherited; --background-focused: transparent; padding-right: 0px;\"\r\n [class]=\"itemClass + ' classic'\"\r\n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake' : '' \">\r\n\r\n <!--\r\n <ion-label class=\"label-focus\" [position]=\"labelPosition\">{{ label }}</ion-label>\r\n -->\r\n @if (label) {\r\n <ion-label style=\"color: var(--input-label-color);\" position=\"{{ labelPosition }}\">{{ label }}</ion-label>\r\n }\r\n\r\n <!-- \r\n <ion-icon slot=\"start\" name=\"lock-closed\" aria-hidden=\"true\"></ion-icon>\r\n -->\r\n\r\n <ion-input #inputText [type]=\"type\" [placeholder]=\"placeholder\" [readonly]=\"readonly\" \r\n (input)=\"writeValue(inputText.value, type)\" [value]=\"data\" (ionBlur)=\"onBlur()\" (ionFocus)=\"entered()\">\r\n </ion-input>\r\n\r\n\r\n @if (showSeePassword) {\r\n\r\n <ion-button fill=\"clear\" slot=\"end\" aria-label=\"Mostrar/esconder\" class=\"btn-show-password\"\r\n (click)=\"changeTypeOfInput()\">\r\n <ion-icon slot=\"icon-only\" [icon]=\"type == 'password' ? 'eye-outline' : 'eye-off-outline' \"></ion-icon>\r\n </ion-button>\r\n\r\n }\r\n\r\n @if (showSeeCopy) {\r\n\r\n <ion-button fill=\"clear\" slot=\"end\" aria-label=\"Mostrar/esconder\" class=\"btn-show-password\" (click)=\"copiarClick()\">\r\n <ion-icon slot=\"icon-only\" icon=\"copy-outline\"></ion-icon>\r\n </ion-button>\r\n\r\n }\r\n\r\n\r\n </ion-item>\r\n }\r\n @else {\r\n <ion-input #inputText [type]=\"type\" [label]=\"label\" [labelPlacement]=\"labelPosition\" fill=\"outline\"\r\n [placeholder]=\"placeholder\" class=\"modern\" maxlength=\"{{ max }}\" \r\n [value]=\"data\" mode=\"md\"\r\n (input)=\"writeValue(inputText.value, type)\" \r\n (ionInput)=\"onInputChange($event)\" \r\n (ionBlur)=\"onBlur()\" \r\n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake-modern' : '' \"\r\n [disabled]=\"readonly\" [shape]=\"shape\">\r\n @if (icon || iconSrc) {\r\n <ion-icon slot=\"start\" [icon]=\"icon\" [src]=\"iconSrc\" aria-hidden=\"true\"></ion-icon>\r\n }\r\n\r\n @if (showSeePassword) {\r\n\r\n <ion-button fill=\"clear\" slot=\"end\" aria-label=\"Mostrar/esconder\" class=\"btn-show-password\"\r\n (click)=\"changeTypeOfInput()\">\r\n <ion-icon slot=\"icon-only\" [icon]=\"type == 'password' ? 'eye-outline' : 'eye-off-outline' \"></ion-icon>\r\n </ion-button>\r\n\r\n }\r\n\r\n @if (showSeeCopy) {\r\n\r\n <ion-button fill=\"clear\" slot=\"end\" aria-label=\"Mostrar/esconder\" class=\"btn-show-password\" (click)=\"copiarClick()\">\r\n <ion-icon slot=\"icon-only\" icon=\"copy-outline\"></ion-icon>\r\n </ion-button>\r\n\r\n }\r\n </ion-input>\r\n }\r\n\r\n @if(form) {\r\n <div class=\"validation-errors\">\r\n\r\n @for(validation of validation_messages; track validation.type) {\r\n <ng-container>\r\n @if(form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty ||\r\n form.get(formControlName)?.touched)) {\r\n <div class=\"error-message\" [ngClass]=\"validationClass\">\r\n &#8226; {{ validation.message }}\r\n </div>\r\n }\r\n </ng-container>\r\n }\r\n\r\n </div>\r\n }\r\n\r\n</div>\r\n", styles: [".classic .btn-show-password{margin-top:auto;margin-bottom:calc((var(--input-min-height, 30px) - 30px) * .57142857 + 2px);margin-left:4px}\n", "@charset \"UTF-8\";@keyframes shake{0%{transform:translate(20px)}20%{transform:translate(-20px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(4px)}to{transform:translate(0)}}.error-input ion-label,.error-shake ion-label{color:red!important}.error-input ion-input,.error-shake ion-input{border:1px solid red!important}.error-shake ion-input{animation:shake .4s 1 linear}.error-shake-modern{--border-color: var(--input-color-error, red) !important;--color: var(--input-color-error, red) !important;--highlight-color-focused: var(--input-color-error, red) !important;animation:shake .4s 1 linear}.validation-errors{margin-top:4px}ion-label{margin-bottom:var(--label-margin-bottom, 2px)!important;color:var(--label-color, initial)!important}ion-item ion-label{overflow:initial!important}ion-input{text-align:var(--input-text-align, start)}.classic ion-input{background:var(--input-color, white);padding-left:2px!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px;max-height:30px;min-height:var(--input-min-height, 30px);transition:.2s ease;color:var(--input-font-color, black)}ion-input.modern{--border-color: var(--input-border-color, darkgray);--color: var(--input-font-color, black);--highlight-color-focused: var(--input-highlight-color, #537bc7)}ion-textarea.modern{--border-color: darkgray;--border-color-focused: #00ff00;--border-color-hover: yellow;--color: var(--input-font-color, black);--highlight-color-focused: var(--input-higlight-color, #537bc7);--input-focus-border-color: transparent}.input-text-padding{padding-bottom:var(--input-text-padding-bottom, var(--input-text-default-padding, 16px));padding-left:var(--input-text-padding-left, var(--input-text-default-padding, 16px));padding-right:var(--input-text-padding-right, var(--input-text-default-padding, 16px))}.classic .has-focus{border:1px solid var(--input-focus-border-color, skyblue)!important}.item-has-focus ion-label{color:var(--label-focus-color, blue)!important}.no-padding-end{--inner-padding-end: 0}.no-padding-start{--padding-start: 0px}.item-inner{padding-right:0!important}.padding{padding:auto;padding-left:0}.no-padding{--inner-padding-end: 0px;--padding-start: 0px !important;--padding-bottom: 0px;--inner-padding-bottom: 0px;height:auto!important;--min-height: auto !important}.no-padding-no-height{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px}.padding-top{--padding-top: 0px}.input-login{height:36px}.modal-editar ion-label{min-width:80px}.modal-vldt-editar{margin-left:80px}.label-right ion-label{transform-origin:right top;align-self:flex-end;margin-bottom:4%!important}.align-to-right ion-label{position:relative;left:25%;text-align:end}.error-message{font-size:small;color:var(--input-color-error, rgb(212, 79, 79));margin-left:15px}.item-interactive-disabled ion-label{opacity:var(--item-disabled-opacity, .6)}.native-input[disabled]{opacity:.6!important;background-color:transparent}.item-label-stacked{--min-height: auto}.tipObrigatorio{opacity:.4}[hidden]{display:none!important}\n"] }]
2708
+ ], template: "<!-- \r\n se label position = floating colocar padding = 12px \r\n \r\n -->\r\n<div [class]=\"{ 'input-text-padding': !classic }\">\r\n <!-- [label]=\"label\"\r\n [labelPlacement]=\"labelPosition\" -->\r\n @if(classic) {\r\n <ion-item #itemInput lines=\"none\"\r\n style=\" --background: inherited; --background-focused: transparent; padding-right: 0px;\"\r\n [class]=\"itemClass + ' classic'\"\r\n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake' : '' \">\r\n\r\n <!--\r\n <ion-label class=\"label-focus\" [position]=\"labelPosition\">{{ label }}</ion-label>\r\n -->\r\n @if (label) {\r\n <ion-label style=\"color: var(--input-label-color);\" position=\"{{ labelPosition }}\">{{ label }}</ion-label>\r\n }\r\n\r\n <!-- \r\n <ion-icon slot=\"start\" name=\"lock-closed\" aria-hidden=\"true\"></ion-icon>\r\n -->\r\n\r\n <ion-input #inputText [type]=\"type\" [placeholder]=\"placeholder\" [readonly]=\"readonly\" [value]=\"data\"\r\n (ionInput)=\"onInputChange($event)\" (ionBlur)=\"onBlur()\" (ionFocus)=\"entered()\">\r\n </ion-input>\r\n\r\n\r\n @if (showSeePassword) {\r\n\r\n <ion-button fill=\"clear\" slot=\"end\" aria-label=\"Mostrar/esconder\" class=\"btn-show-password\"\r\n (click)=\"changeTypeOfInput()\">\r\n <ion-icon slot=\"icon-only\" [icon]=\"type == 'password' ? 'eye-outline' : 'eye-off-outline' \"></ion-icon>\r\n </ion-button>\r\n\r\n }\r\n\r\n @if (showSeeCopy) {\r\n\r\n <ion-button fill=\"clear\" slot=\"end\" aria-label=\"Mostrar/esconder\" class=\"btn-show-password\" (click)=\"copiarClick()\">\r\n <ion-icon slot=\"icon-only\" icon=\"copy-outline\"></ion-icon>\r\n </ion-button>\r\n\r\n }\r\n\r\n\r\n </ion-item>\r\n }\r\n @else {\r\n <ion-input #inputText [type]=\"type\" [label]=\"label\" [labelPlacement]=\"labelPosition\" fill=\"outline\"\r\n [placeholder]=\"placeholder\" class=\"modern\" maxlength=\"{{ max }}\" [value]=\"data\" mode=\"md\"\r\n (ionInput)=\"onInputChange($event)\" (ionBlur)=\"onBlur()\"\r\n [ngClass]=\"form?.get(formControlName)?.errors && (form?.get(formControlName)?.dirty || form?.get(formControlName)?.touched) ? 'error-shake-modern' : '' \"\r\n [disabled]=\"readonly\" [shape]=\"shape\">\r\n @if (icon || iconSrc) {\r\n <ion-icon slot=\"start\" [icon]=\"icon\" [src]=\"iconSrc\" aria-hidden=\"true\"></ion-icon>\r\n }\r\n\r\n @if (showSeePassword) {\r\n\r\n <ion-button fill=\"clear\" slot=\"end\" aria-label=\"Mostrar/esconder\" class=\"btn-show-password\"\r\n (click)=\"changeTypeOfInput()\">\r\n <ion-icon slot=\"icon-only\" [icon]=\"type == 'password' ? 'eye-outline' : 'eye-off-outline' \"></ion-icon>\r\n </ion-button>\r\n\r\n }\r\n\r\n @if (showSeeCopy) {\r\n\r\n <ion-button fill=\"clear\" slot=\"end\" aria-label=\"Mostrar/esconder\" class=\"btn-show-password\" (click)=\"copiarClick()\">\r\n <ion-icon slot=\"icon-only\" icon=\"copy-outline\"></ion-icon>\r\n </ion-button>\r\n\r\n }\r\n </ion-input>\r\n }\r\n\r\n @if(form) {\r\n <div class=\"validation-errors\">\r\n\r\n @for(validation of validation_messages; track validation.type) {\r\n <ng-container>\r\n @if(form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty ||\r\n form.get(formControlName)?.touched)) {\r\n <div class=\"error-message\" [ngClass]=\"validationClass\">\r\n &#8226; {{ validation.message }}\r\n </div>\r\n }\r\n </ng-container>\r\n }\r\n\r\n </div>\r\n }\r\n\r\n</div>", styles: [".classic .btn-show-password{margin-top:auto;margin-bottom:calc((var(--input-min-height, 30px) - 30px) * .57142857 + 2px);margin-left:4px}\n", "@charset \"UTF-8\";@keyframes shake{0%{transform:translate(20px)}20%{transform:translate(-20px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(4px)}to{transform:translate(0)}}.error-input ion-label,.error-shake ion-label{color:red!important}.error-input ion-input,.error-shake ion-input{border:1px solid red!important}.error-shake ion-input{animation:shake .4s 1 linear}.error-shake-modern{--border-color: var(--input-color-error, red) !important;--color: var(--input-color-error, red) !important;--highlight-color-focused: var(--input-color-error, red) !important;animation:shake .4s 1 linear}.validation-errors{margin-top:4px}ion-label{margin-bottom:var(--label-margin-bottom, 2px)!important;color:var(--label-color, initial)!important}ion-item ion-label{overflow:initial!important}ion-input{text-align:var(--input-text-align, start)}.classic ion-input{background:var(--input-color, white);padding-left:2px!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px;max-height:30px;min-height:var(--input-min-height, 30px);transition:.2s ease;color:var(--input-font-color, black)}ion-input.modern{--border-color: var(--input-border-color, darkgray);--color: var(--input-font-color, black);--highlight-color-focused: var(--input-highlight-color, #537bc7)}ion-textarea.modern{--border-color: darkgray;--border-color-focused: #00ff00;--border-color-hover: yellow;--color: var(--input-font-color, black);--highlight-color-focused: var(--input-higlight-color, #537bc7);--input-focus-border-color: transparent}.input-text-padding{padding-bottom:var(--input-text-padding-bottom, var(--input-text-default-padding, 16px));padding-left:var(--input-text-padding-left, var(--input-text-default-padding, 16px));padding-right:var(--input-text-padding-right, var(--input-text-default-padding, 16px))}.classic .has-focus{border:1px solid var(--input-focus-border-color, skyblue)!important}.item-has-focus ion-label{color:var(--label-focus-color, blue)!important}.no-padding-end{--inner-padding-end: 0}.no-padding-start{--padding-start: 0px}.item-inner{padding-right:0!important}.padding{padding:auto;padding-left:0}.no-padding{--inner-padding-end: 0px;--padding-start: 0px !important;--padding-bottom: 0px;--inner-padding-bottom: 0px;height:auto!important;--min-height: auto !important}.no-padding-no-height{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px}.padding-top{--padding-top: 0px}.input-login{height:36px}.modal-editar ion-label{min-width:80px}.modal-vldt-editar{margin-left:80px}.label-right ion-label{transform-origin:right top;align-self:flex-end;margin-bottom:4%!important}.align-to-right ion-label{position:relative;left:25%;text-align:end}.error-message{font-size:small;color:var(--input-color-error, rgb(212, 79, 79));margin-left:15px}.item-interactive-disabled ion-label{opacity:var(--item-disabled-opacity, .6)}.native-input[disabled]{opacity:.6!important;background-color:transparent}.item-label-stacked{--min-height: auto}.tipObrigatorio{opacity:.4}[hidden]{display:none!important}\n"] }]
2722
2709
  }], ctorParameters: () => [{ type: i0.Renderer2 }], propDecorators: { showSeePassword: [{
2723
2710
  type: Input
2724
2711
  }], inputChange: [{
@@ -2933,6 +2920,7 @@ class ModalTreeviewComponent {
2933
2920
  // }
2934
2921
  subscriptionC = this.dataService.getLista(url).subscribe({
2935
2922
  next: (result) => {
2923
+ this.listaArvore = result ?? [];
2936
2924
  /*
2937
2925
  empresaContato.forEach((ec) => {
2938
2926
  ec.LabelTree = ec.Nome;
@@ -2985,7 +2973,8 @@ class ModalTreeviewComponent {
2985
2973
  console.log('click registro', evento);
2986
2974
  if (evento.Id > 0) {
2987
2975
  const modalCtrl = this.injector.get(ModalController);
2988
- modalCtrl.dismiss({ Id: evento.Id });
2976
+ const entidade = this.listaArvore.find(item => Number(item[this.campoId]) === Number(evento.Id));
2977
+ modalCtrl.dismiss({ Id: evento.Id, Entidade: entidade });
2989
2978
  }
2990
2979
  }
2991
2980
  expandir() {