mapa-library-ui 1.7.3 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +2 -3
  2. package/fesm2022/mapa-library-ui-src-lib-components-capability.mjs +42 -35
  3. package/fesm2022/mapa-library-ui-src-lib-components-capability.mjs.map +1 -1
  4. package/fesm2022/mapa-library-ui-src-lib-components-chart.mjs +42 -35
  5. package/fesm2022/mapa-library-ui-src-lib-components-chart.mjs.map +1 -1
  6. package/fesm2022/mapa-library-ui-src-lib-components-datepicker.mjs +648 -125
  7. package/fesm2022/mapa-library-ui-src-lib-components-datepicker.mjs.map +1 -1
  8. package/fesm2022/mapa-library-ui-src-lib-components-dropdown-tree.mjs +42 -35
  9. package/fesm2022/mapa-library-ui-src-lib-components-dropdown-tree.mjs.map +1 -1
  10. package/fesm2022/mapa-library-ui-src-lib-components-dropdown.mjs +42 -35
  11. package/fesm2022/mapa-library-ui-src-lib-components-dropdown.mjs.map +1 -1
  12. package/fesm2022/mapa-library-ui-src-lib-components-filters.mjs +42 -35
  13. package/fesm2022/mapa-library-ui-src-lib-components-filters.mjs.map +1 -1
  14. package/fesm2022/mapa-library-ui-src-lib-components-form.mjs +569 -322
  15. package/fesm2022/mapa-library-ui-src-lib-components-form.mjs.map +1 -1
  16. package/fesm2022/mapa-library-ui-src-lib-components-input.mjs +42 -35
  17. package/fesm2022/mapa-library-ui-src-lib-components-input.mjs.map +1 -1
  18. package/fesm2022/mapa-library-ui-src-lib-components-scale-parameterization.mjs +42 -35
  19. package/fesm2022/mapa-library-ui-src-lib-components-scale-parameterization.mjs.map +1 -1
  20. package/fesm2022/mapa-library-ui-src-lib-components-scale.mjs +42 -35
  21. package/fesm2022/mapa-library-ui-src-lib-components-scale.mjs.map +1 -1
  22. package/fesm2022/mapa-library-ui-src-lib-components-table.mjs +522 -581
  23. package/fesm2022/mapa-library-ui-src-lib-components-table.mjs.map +1 -1
  24. package/fesm2022/mapa-library-ui-src-lib-components-textarea.mjs +42 -35
  25. package/fesm2022/mapa-library-ui-src-lib-components-textarea.mjs.map +1 -1
  26. package/fesm2022/mapa-library-ui-src-lib-components-warning.mjs +42 -35
  27. package/fesm2022/mapa-library-ui-src-lib-components-warning.mjs.map +1 -1
  28. package/fesm2022/mapa-library-ui-src-lib-core-utils.mjs +1 -4
  29. package/fesm2022/mapa-library-ui-src-lib-core-utils.mjs.map +1 -1
  30. package/fesm2022/mapa-library-ui.mjs +1272 -1018
  31. package/fesm2022/mapa-library-ui.mjs.map +1 -1
  32. package/index.d.ts +350 -187
  33. package/mapa-library-ui-2.0.0.tgz +0 -0
  34. package/package.json +3 -10
  35. package/src/lib/components/datepicker/index.d.ts +165 -27
  36. package/src/lib/components/group-report/index.d.ts +6 -1
  37. package/src/lib/components/menu/index.d.ts +3 -1
  38. package/src/lib/components/report-item/index.d.ts +3 -1
  39. package/src/lib/components/table/index.d.ts +153 -100
  40. package/src/lib/core/utils/index.d.ts +1 -2
  41. package/fesm2022/mapa-library-ui-src-lib-components-datepicker-range.mjs +0 -733
  42. package/fesm2022/mapa-library-ui-src-lib-components-datepicker-range.mjs.map +0 -1
  43. package/mapa-library-ui-1.7.3.tgz +0 -0
  44. package/src/lib/components/datepicker-range/index.d.ts +0 -207
@@ -1,18 +1,18 @@
1
1
  import * as i0 from '@angular/core';
2
- import { EventEmitter, Output, Input, Component, InjectionToken, inject, Injector, signal, Optional, Inject, Injectable, ElementRef, DestroyRef, booleanAttribute, Directive, Self, forwardRef, ChangeDetectionStrategy, SecurityContext, Pipe, ChangeDetectorRef, HostListener, ViewChild } from '@angular/core';
2
+ import { EventEmitter, Output, Input, Component, InjectionToken, inject, Injector, signal, Optional, Inject, Injectable, ElementRef, DestroyRef, booleanAttribute, Directive, Self, forwardRef, effect, ChangeDetectorRef, HostListener, ViewChild, ChangeDetectionStrategy, SecurityContext, Pipe } from '@angular/core';
3
3
  import * as i1 from '@angular/common';
4
- import { CommonModule } from '@angular/common';
4
+ import { CommonModule, NgTemplateOutlet } from '@angular/common';
5
5
  import * as i2 from '@angular/forms';
6
6
  import { NgControl, FormsModule, ReactiveFormsModule, NG_VALUE_ACCESSOR, FormGroup, FormControl } from '@angular/forms';
7
7
  import * as i3 from '@angular/material/form-field';
8
8
  import { MatFormFieldModule } from '@angular/material/form-field';
9
9
  import * as i4 from '@angular/material/icon';
10
10
  import { MatIconModule } from '@angular/material/icon';
11
- import * as i5 from '@angular/material/input';
11
+ import * as i1$1 from '@angular/material/input';
12
12
  import { MatInputModule } from '@angular/material/input';
13
13
  import { NgxMaskDirective, NgxMaskService, provideNgxMask } from 'ngx-mask';
14
14
  import { toObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';
15
- import * as i5$1 from '@angular/cdk/text-field';
15
+ import * as i5 from '@angular/cdk/text-field';
16
16
  import { AutofillMonitor } from '@angular/cdk/text-field';
17
17
  import { filter } from 'rxjs/operators';
18
18
  import { fromEvent, merge } from 'rxjs';
@@ -20,12 +20,10 @@ import * as i3$1 from '@angular/material/radio';
20
20
  import { MatRadioModule } from '@angular/material/radio';
21
21
  import * as i3$2 from '@angular/material/slide-toggle';
22
22
  import { MatSlideToggleModule } from '@angular/material/slide-toggle';
23
- import { provideNativeDateAdapter, DateAdapter } from '@angular/material/core';
24
- import * as i3$3 from '@angular/material/datepicker';
25
- import { MatDatepickerModule } from '@angular/material/datepicker';
26
- import { getStoredAppLanguage, getIntlLocale } from 'mapa-frontend-i18n';
27
23
  import { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';
28
- import * as i1$1 from '@angular/platform-browser';
24
+ import { NgxsmkDatepickerComponent } from 'ngxsmk-datepicker';
25
+ import { getStoredAppLanguage, getIntlLocale } from 'mapa-frontend-i18n';
26
+ import * as i1$2 from '@angular/platform-browser';
29
27
 
30
28
  class ButtonComponent {
31
29
  constructor() {
@@ -52,7 +50,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImpo
52
50
  * Public API Surface of mapa-library-ui button
53
51
  */
54
52
 
55
- const MAPA_UI_TEXTS = new InjectionToken("MAPA_UI_TEXTS");
53
+ const MAPA_UI_TEXTS = new InjectionToken('MAPA_UI_TEXTS');
56
54
  function formatPaginatorRange(page, pageSize, length) {
57
55
  if (length === 0 || pageSize === 0) {
58
56
  return `0 de ${length}`;
@@ -66,66 +64,73 @@ function formatPaginatorRange(page, pageSize, length) {
66
64
  }
67
65
  function formatPaginatorShowingRange(page, pageSize, length) {
68
66
  if (length === 0 || pageSize === 0) {
69
- return "Mostrando 0 - 0 de 0 item";
67
+ return 'Mostrando 0 - 0 de 0 item';
70
68
  }
71
69
  const safeLength = Math.max(length, 0);
72
70
  const startIndex = page * pageSize;
73
71
  const endIndex = startIndex < safeLength
74
72
  ? Math.min(startIndex + pageSize, safeLength)
75
73
  : startIndex + pageSize;
76
- const itemLabel = safeLength === 1 ? "item" : "itens";
74
+ const itemLabel = safeLength === 1 ? 'item' : 'itens';
77
75
  return `Mostrando ${startIndex + 1} - ${endIndex} de ${safeLength} ${itemLabel}`;
78
76
  }
79
77
  const DEFAULT_MAPA_UI_TEXTS = {
80
78
  common: {
81
- selectAll: "Selecionar todos",
79
+ selectAll: 'Selecionar todos',
80
+ retry: 'Tentar novamente',
82
81
  },
83
82
  filters: {
84
- clear: "Limpar filtros",
85
- submit: "Filtrar",
83
+ clear: 'Limpar filtros',
84
+ submit: 'Filtrar',
86
85
  },
87
86
  datepicker: {
88
- startDatePlaceholder: "Data inicial",
89
- endDatePlaceholder: "Data final",
87
+ startDatePlaceholder: 'Data inicial',
88
+ endDatePlaceholder: 'Data final',
90
89
  },
91
90
  capability: {
92
- groupAverageTitle: "Média geral do grupo",
93
- individualAverageTitle: "Média geral do indivíduo",
94
- conceptTitle: "Conceito",
95
- resultTitle: "Resultado",
96
- positiveIndicatorsTitle: "Indicadores positivos",
97
- negativeIndicatorsTitle: "Indicadores negativos",
98
- riskIndicatorsTitle: "Indicadores de risco",
99
- precipitationRiskTitle: "Risco de acidente por precipitação",
100
- negligenceRiskTitle: "Risco de acidente por negligência",
101
- negativeDirectionLabel: "Direção Negativa |",
102
- positiveDirectionLabel: "Direção Positiva |",
91
+ groupAverageTitle: 'Média geral do grupo',
92
+ individualAverageTitle: 'Média geral do indivíduo',
93
+ conceptTitle: 'Conceito',
94
+ resultTitle: 'Resultado',
95
+ positiveIndicatorsTitle: 'Indicadores positivos',
96
+ negativeIndicatorsTitle: 'Indicadores negativos',
97
+ riskIndicatorsTitle: 'Indicadores de risco',
98
+ precipitationRiskTitle: 'Risco de acidente por precipitação',
99
+ negligenceRiskTitle: 'Risco de acidente por negligência',
100
+ negativeDirectionLabel: 'Direção Negativa |',
101
+ positiveDirectionLabel: 'Direção Positiva |',
103
102
  },
104
103
  paginator: {
105
- itemsPerPage: "Itens por página",
106
- nextPage: "Próxima página",
107
- previousPage: "Página anterior",
104
+ itemsPerPage: 'Itens por página',
105
+ nextPage: 'Próxima página',
106
+ previousPage: 'Página anterior',
108
107
  rangeLabel: formatPaginatorRange,
109
108
  showingRangeLabel: formatPaginatorShowingRange,
110
109
  },
111
110
  warning: {
112
- lowReliabilityTitle: "Nível baixo de confiabilidade no(s) teste(s):",
113
- expirationLimitTitle: "O prazo de validade do(s) teste(s) está no limite:",
111
+ lowReliabilityTitle: 'Nível baixo de confiabilidade no(s) teste(s):',
112
+ expirationLimitTitle: 'O prazo de validade do(s) teste(s) está no limite:',
114
113
  },
115
114
  table: {
116
- emptyTitle: "Não foram encontrados resultados",
117
- emptySubtitle: "",
115
+ emptyTitle: 'Não foram encontrados resultados',
116
+ emptySubtitle: '',
117
+ loading: 'Carregando resultados',
118
+ errorTitle: 'Não foi possível carregar os resultados.',
119
+ selectAllVisible: 'Selecionar todos os itens desta página',
120
+ selectionColumn: 'Seleção',
121
+ selectRow: 'Selecionar item',
122
+ selectNamedRow: (item) => `Selecionar ${item}`,
118
123
  },
119
124
  validation: {
120
- cnpj: "CNPJ inválido",
121
- cpf: "CPF inválido",
122
- email: "E-mail inválido",
123
- max: (context) => `O valor máximo permitido é ${context?.max ?? ""}`.trim(),
124
- maxLength: (context) => `O máximo permitido é ${context?.requiredLength ?? ""} caracteres`.trim(),
125
- min: (context) => `O valor mínimo permitido é ${context?.min ?? ""}`.trim(),
126
- minLength: (context) => `O mínimo permitido é ${context?.requiredLength ?? ""} caracteres`.trim(),
127
- pattern: "Formato inválido",
128
- required: "Campo obrigatório",
125
+ cnpj: 'CNPJ inválido',
126
+ cpf: 'CPF inválido',
127
+ email: 'E-mail inválido',
128
+ max: (context) => `O valor máximo permitido é ${context?.max ?? ''}`.trim(),
129
+ maxLength: (context) => `O máximo permitido é ${context?.requiredLength ?? ''} caracteres`.trim(),
130
+ min: (context) => `O valor mínimo permitido é ${context?.min ?? ''}`.trim(),
131
+ minLength: (context) => `O mínimo permitido é ${context?.requiredLength ?? ''} caracteres`.trim(),
132
+ pattern: 'Formato inválido',
133
+ required: 'Campo obrigatório',
129
134
  },
130
135
  };
131
136
  function getDefaultTexts() {
@@ -477,7 +482,7 @@ class MatInputAutosizeDirective {
477
482
  .pipe(takeUntilDestroyed(this.destroyRef))
478
483
  .subscribe(() => this.changeHiddenText(this.inputElement.value));
479
484
  }
480
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.21", ngImport: i0, type: MatInputAutosizeDirective, deps: [{ token: i0.ElementRef }, { token: i5.MatInput, self: true }, { token: i2.NgModel, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive }); }
485
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.21", ngImport: i0, type: MatInputAutosizeDirective, deps: [{ token: i0.ElementRef }, { token: i1$1.MatInput, self: true }, { token: i2.NgModel, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive }); }
481
486
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.21", type: MatInputAutosizeDirective, isStandalone: true, selector: "[matInputAutosize]", inputs: { matInputAutosizeMaxWidth: "matInputAutosizeMaxWidth", matInputAutosizeMinWidth: "matInputAutosizeMinWidth", matInputAutosizeFontStyle: "matInputAutosizeFontStyle" }, ngImport: i0 }); }
482
487
  }
483
488
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImport: i0, type: MatInputAutosizeDirective, decorators: [{
@@ -486,7 +491,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImpo
486
491
  selector: '[matInputAutosize]',
487
492
  standalone: true,
488
493
  }]
489
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i5.MatInput, decorators: [{
494
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1$1.MatInput, decorators: [{
490
495
  type: Self
491
496
  }] }, { type: i2.NgModel, decorators: [{
492
497
  type: Optional
@@ -535,7 +540,7 @@ class MapaInputComponent {
535
540
  useExisting: forwardRef(() => MapaInputComponent),
536
541
  multi: true,
537
542
  },
538
- ], ngImport: i0, template: "<label *ngIf=\"element.label\" class=\"mapa-input__label\">\n {{ element.label }}\n</label>\n<div class=\"mapa-form--inline\">\n <mat-form-field\n class=\"mapa-input\"\n [class.mapa-input--autosize]=\"element.autosize\"\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n >\n <mat-icon *ngIf=\"element.prefix\" class=\"mapa-input--prefix\" matPrefix>\n {{ element.prefix }}\n </mat-icon>\n <input\n *ngIf=\"element.autosize\"\n matInput\n matInputAutosize\n [matInputAutosizeMinWidth]=\"element.autosizeMinWidth!\"\n [matInputAutosizeMaxWidth]=\"element.autosizeMaxWidth!\"\n [formControl]=\"formControl\"\n [placeholder]=\"element.placeholder || element.label\"\n [maxlength]=\"element.maxLength\"\n (keydown.enter)=\"suffixEmit()\"\n [type]=\"type\"\n [mask]=\"element.mask\"\n thousandSeparator=\".\"\n decimalMarker=\",\"\n [autocomplete]=\"element.autocomplete\"\n [readOnly]=\"element.readonly\"\n />\n <input\n matInput\n *ngIf=\"!element.autosize\"\n [formControl]=\"formControl\"\n [placeholder]=\"element.placeholder || element.label\"\n [maxlength]=\"element.maxLength\"\n (keydown.enter)=\"suffixEmit()\"\n [type]=\"type\"\n [mask]=\"element.mask\"\n [autocomplete]=\"element.autocomplete\"\n [readOnly]=\"element.readonly\"\n />\n <button\n *ngIf=\"hasValue() && !formControl.disabled && element.clearValue\"\n type=\"button\"\n tabindex=\"-1\"\n matSuffix\n aria-label=\"Limpar\"\n (click)=\"clearValue()\"\n class=\"mapa-input--close\"\n >\n &times;\n </button>\n <mat-icon\n *ngIf=\"element.suffix\"\n class=\"mapa-input--suffix\"\n matSuffix\n (click)=\"suffix.emit()\"\n >\n {{ element.suffix }}\n </mat-icon>\n <mat-hint *ngIf=\"element.hint\">{{ element.hint }}</mat-hint>\n <mat-error>\n <mapa-form-errors\n [control]=\"formControl\"\n [errors]=\"element.errors\"\n ></mapa-form-errors>\n </mat-error>\n </mat-form-field>\n\n <div *ngIf=\"element.actionButton\" class=\"mapa-form--action\">\n <mapa-button\n color=\"basic\"\n (clicked)=\"element.actionButton.action.emit(true)\"\n >\n {{ element.actionButton.label }}\n </mapa-button>\n </div>\n</div>\n", styles: [":host{display:inline-block;max-width:100%;min-width:0;box-sizing:border-box}.mapa-input{width:310px;max-width:100%;min-width:0;box-sizing:border-box}.mapa-input--autosize{width:auto;--mapa-input-autosize-preferred-width: 310px}.mapa-input__label{font-family:var(--mapa-font-heading, \"Asap\", \"Inter\", sans-serif);display:block;font-size:12px;font-style:normal;font-weight:600;line-height:16px;text-transform:uppercase;margin-bottom:16px}:host ::ng-deep .mapa-input--autosize .mat-mdc-form-field-infix{overflow:hidden}:host ::ng-deep .mapa-input .mat-mdc-form-field-error-wrapper,:host ::ng-deep .mapa-input .mat-mdc-form-field-hint-wrapper,:host ::ng-deep .mapa-input .mat-mdc-form-field-subscript-wrapper{padding:0!important}:host ::ng-deep .mapa-input .mat-mdc-form-field-error{margin:8px 0 0;padding-left:4px;color:#b54242;font-size:13px;line-height:18px}:host ::ng-deep .mapa-input .mat-mdc-form-field-error:before{display:none}:host ::ng-deep .mapa-input .mat-mdc-form-field-hint{display:block;margin:8px 0 0;padding-left:4px;color:var(--mapa-color-muted, #555555);font-size:13px;line-height:18px}:host ::ng-deep .mapa-input .mat-mdc-form-field-hint:before{display:none}:host ::ng-deep .mapa-input .mat-mdc-input-element{font-family:var(--mapa-font-body, \"Asap\", \"Roboto\", \"Inter\", sans-serif);font-size:16px;font-style:normal;font-weight:400}:host ::ng-deep .mapa-input .mat-mdc-form-field-flex{height:48px!important}:host ::ng-deep .mapa-input .mat-mdc-text-field-wrapper{background-color:var(--mapa-color-surface, #ffffff);border-radius:var(--mapa-radius-sm, 12px);height:48px}:host ::ng-deep .mapa-input .mat-mdc-text-field-wrapper.mdc-text-field--outlined{padding-left:unset!important;padding-right:unset!important}:host ::ng-deep .mapa-input .mdc-notched-outline{background-color:transparent;border-radius:var(--mapa-radius-sm, 12px)}:host ::ng-deep .mapa-input .mdc-text-field--outlined .mat-mdc-form-field-infix{padding-bottom:12px;padding-top:16px;--mat-form-field-container-height: 48px}:host ::ng-deep .mapa-input .mdc-text-field--outlined{--mat-form-field-outlined-container-shape: var(--mapa-radius-sm, 12px);--mat-form-field-outlined-outline-color: var( --mapa-color-border, rgba(26, 26, 26, .18) );--mat-form-field-outlined-hover-outline-color: var( --mapa-color-border, rgba(26, 26, 26, .18) );--mat-form-field-outlined-focus-outline-color: var( --mapa-color-accent, #ff560b );--mat-form-field-outlined-outline-width: 1px;--mat-form-field-outlined-focus-outline-width: 1px}:host ::ng-deep .mapa-input .mdc-notched-outline__leading,:host ::ng-deep .mapa-input .mdc-notched-outline__notch,:host ::ng-deep .mapa-input .mdc-notched-outline__trailing{border-width:1px!important}:host ::ng-deep .mapa-input .mat-mdc-form-field-icon-suffix{display:flex}:host ::ng-deep .mapa-input .mat-mdc-form-field-icon-suffix .mapa-input--close{display:flex;flex:0 0 20px;align-items:center;justify-content:center;width:20px;height:20px;padding:0;border:0;border-radius:50%;background:transparent;color:var(--mapa-color-muted, #555555);font-family:inherit;font-size:16px;line-height:1;cursor:pointer}:host ::ng-deep .mapa-input .mat-mdc-form-field-icon-suffix .mapa-input--close:hover{background:#1a1a1a14;color:var(--mapa-color-ink, #1a1a1a)}:host ::ng-deep .mapa-input .mat-mdc-form-field-icon-suffix .mapa-input--close:last-child{margin-right:12px}:host ::ng-deep .mapa-input .mat-mdc-form-field-icon-suffix .mapa-input--suffix{padding:0 0 0 8px}:host ::ng-deep .mapa-input .mat-mdc-form-field-icon-suffix .mat-icon:last-child{padding-right:12px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: NgxMaskDirective, selector: "input[mask], textarea[mask]", inputs: ["mask", "specialCharacters", "patterns", "prefix", "suffix", "thousandSeparator", "decimalMarker", "dropSpecialCharacters", "hiddenInput", "showMaskTyped", "placeHolderCharacter", "shownMaskExpression", "clearIfNotMatch", "validation", "separatorLimit", "allowNegativeNumbers", "leadZeroDateTime", "leadZero", "triggerOnMaskChange", "apm", "inputTransformFn", "outputTransformFn", "keepCharacterPositions", "instantPrefix"], outputs: ["maskFilled"], exportAs: ["mask", "ngxMask"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i3.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: ButtonComponent, selector: "mapa-button", inputs: ["color", "disabled"], outputs: ["clicked"] }, { kind: "directive", type: MatInputAutosizeDirective, selector: "[matInputAutosize]", inputs: ["matInputAutosizeMaxWidth", "matInputAutosizeMinWidth", "matInputAutosizeFontStyle"] }, { kind: "directive", type: MapaMaskAutofillSyncDirective, selector: "input[mask], textarea[mask]", inputs: ["mapaMaskAutofillSync"], exportAs: ["mapaMaskAutofillSync"] }, { kind: "component", type: MapaFormErrorsComponent, selector: "mapa-form-errors", inputs: ["control", "errors"] }] }); }
543
+ ], ngImport: i0, template: "<label *ngIf=\"element.label\" class=\"mapa-input__label\">\n {{ element.label }}\n</label>\n<div class=\"mapa-form--inline\">\n <mat-form-field\n class=\"mapa-input\"\n [class.mapa-input--autosize]=\"element.autosize\"\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n >\n <mat-icon *ngIf=\"element.prefix\" class=\"mapa-input--prefix\" matPrefix>\n {{ element.prefix }}\n </mat-icon>\n <input\n *ngIf=\"element.autosize\"\n matInput\n matInputAutosize\n [matInputAutosizeMinWidth]=\"element.autosizeMinWidth!\"\n [matInputAutosizeMaxWidth]=\"element.autosizeMaxWidth!\"\n [formControl]=\"formControl\"\n [placeholder]=\"element.placeholder || element.label\"\n [maxlength]=\"element.maxLength\"\n (keydown.enter)=\"suffixEmit()\"\n [type]=\"type\"\n [mask]=\"element.mask\"\n thousandSeparator=\".\"\n decimalMarker=\",\"\n [autocomplete]=\"element.autocomplete\"\n [readOnly]=\"element.readonly\"\n />\n <input\n matInput\n *ngIf=\"!element.autosize\"\n [formControl]=\"formControl\"\n [placeholder]=\"element.placeholder || element.label\"\n [maxlength]=\"element.maxLength\"\n (keydown.enter)=\"suffixEmit()\"\n [type]=\"type\"\n [mask]=\"element.mask\"\n [autocomplete]=\"element.autocomplete\"\n [readOnly]=\"element.readonly\"\n />\n <button\n *ngIf=\"hasValue() && !formControl.disabled && element.clearValue\"\n type=\"button\"\n tabindex=\"-1\"\n matSuffix\n aria-label=\"Limpar\"\n (click)=\"clearValue()\"\n class=\"mapa-input--close\"\n >\n &times;\n </button>\n <mat-icon\n *ngIf=\"element.suffix\"\n class=\"mapa-input--suffix\"\n matSuffix\n (click)=\"suffix.emit()\"\n >\n {{ element.suffix }}\n </mat-icon>\n <mat-hint *ngIf=\"element.hint\">{{ element.hint }}</mat-hint>\n <mat-error>\n <mapa-form-errors\n [control]=\"formControl\"\n [errors]=\"element.errors\"\n ></mapa-form-errors>\n </mat-error>\n </mat-form-field>\n\n <div *ngIf=\"element.actionButton\" class=\"mapa-form--action\">\n <mapa-button\n color=\"basic\"\n (clicked)=\"element.actionButton.action.emit(true)\"\n >\n {{ element.actionButton.label }}\n </mapa-button>\n </div>\n</div>\n", styles: [":host{display:inline-block;max-width:100%;min-width:0;box-sizing:border-box}.mapa-input{width:310px;max-width:100%;min-width:0;box-sizing:border-box}.mapa-input--autosize{width:auto;--mapa-input-autosize-preferred-width: 310px}.mapa-input__label{font-family:var(--mapa-font-heading, \"Asap\", \"Inter\", sans-serif);display:block;font-size:12px;font-style:normal;font-weight:600;line-height:16px;text-transform:uppercase;margin-bottom:16px}:host ::ng-deep .mapa-input--autosize .mat-mdc-form-field-infix{overflow:hidden}:host ::ng-deep .mapa-input .mat-mdc-form-field-error-wrapper,:host ::ng-deep .mapa-input .mat-mdc-form-field-hint-wrapper,:host ::ng-deep .mapa-input .mat-mdc-form-field-subscript-wrapper{padding:0!important}:host ::ng-deep .mapa-input .mat-mdc-form-field-error{margin:8px 0 0;padding-left:4px;color:#b54242;font-size:13px;line-height:18px}:host ::ng-deep .mapa-input .mat-mdc-form-field-error:before{display:none}:host ::ng-deep .mapa-input .mat-mdc-form-field-hint{display:block;margin:8px 0 0;padding-left:4px;color:var(--mapa-color-muted, #555555);font-size:13px;line-height:18px}:host ::ng-deep .mapa-input .mat-mdc-form-field-hint:before{display:none}:host ::ng-deep .mapa-input .mat-mdc-input-element{font-family:var(--mapa-font-body, \"Asap\", \"Roboto\", \"Inter\", sans-serif);font-size:16px;font-style:normal;font-weight:400}:host ::ng-deep .mapa-input .mat-mdc-form-field-flex{height:48px!important}:host ::ng-deep .mapa-input .mat-mdc-text-field-wrapper{background-color:var(--mapa-color-surface, #ffffff);border-radius:var(--mapa-radius-sm, 12px);height:48px}:host ::ng-deep .mapa-input .mat-mdc-text-field-wrapper.mdc-text-field--outlined{padding-left:unset!important;padding-right:unset!important}:host ::ng-deep .mapa-input .mdc-notched-outline{background-color:transparent;border-radius:var(--mapa-radius-sm, 12px)}:host ::ng-deep .mapa-input .mdc-text-field--outlined .mat-mdc-form-field-infix{padding-bottom:12px;padding-top:16px;--mat-form-field-container-height: 48px}:host ::ng-deep .mapa-input .mdc-text-field--outlined{--mat-form-field-outlined-container-shape: var(--mapa-radius-sm, 12px);--mat-form-field-outlined-outline-color: var( --mapa-color-border, rgba(26, 26, 26, .18) );--mat-form-field-outlined-hover-outline-color: var( --mapa-color-border, rgba(26, 26, 26, .18) );--mat-form-field-outlined-focus-outline-color: var( --mapa-color-accent, #ff560b );--mat-form-field-outlined-outline-width: 1px;--mat-form-field-outlined-focus-outline-width: 1px}:host ::ng-deep .mapa-input .mdc-notched-outline__leading,:host ::ng-deep .mapa-input .mdc-notched-outline__notch,:host ::ng-deep .mapa-input .mdc-notched-outline__trailing{border-width:1px!important}:host ::ng-deep .mapa-input .mat-mdc-form-field-icon-suffix{display:flex}:host ::ng-deep .mapa-input .mat-mdc-form-field-icon-suffix .mapa-input--close{display:flex;flex:0 0 20px;align-items:center;justify-content:center;width:20px;height:20px;padding:0;border:0;border-radius:50%;background:transparent;color:var(--mapa-color-muted, #555555);font-family:inherit;font-size:16px;line-height:1;cursor:pointer}:host ::ng-deep .mapa-input .mat-mdc-form-field-icon-suffix .mapa-input--close:hover{background:#1a1a1a14;color:var(--mapa-color-ink, #1a1a1a)}:host ::ng-deep .mapa-input .mat-mdc-form-field-icon-suffix .mapa-input--close:last-child{margin-right:12px}:host ::ng-deep .mapa-input .mat-mdc-form-field-icon-suffix .mapa-input--suffix{padding:0 0 0 8px}:host ::ng-deep .mapa-input .mat-mdc-form-field-icon-suffix .mat-icon:last-child{padding-right:12px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: NgxMaskDirective, selector: "input[mask], textarea[mask]", inputs: ["mask", "specialCharacters", "patterns", "prefix", "suffix", "thousandSeparator", "decimalMarker", "dropSpecialCharacters", "hiddenInput", "showMaskTyped", "placeHolderCharacter", "shownMaskExpression", "clearIfNotMatch", "validation", "separatorLimit", "allowNegativeNumbers", "leadZeroDateTime", "leadZero", "triggerOnMaskChange", "apm", "inputTransformFn", "outputTransformFn", "keepCharacterPositions", "instantPrefix"], outputs: ["maskFilled"], exportAs: ["mask", "ngxMask"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i3.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i1$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: ButtonComponent, selector: "mapa-button", inputs: ["color", "disabled"], outputs: ["clicked"] }, { kind: "directive", type: MatInputAutosizeDirective, selector: "[matInputAutosize]", inputs: ["matInputAutosizeMaxWidth", "matInputAutosizeMinWidth", "matInputAutosizeFontStyle"] }, { kind: "directive", type: MapaMaskAutofillSyncDirective, selector: "input[mask], textarea[mask]", inputs: ["mapaMaskAutofillSync"], exportAs: ["mapaMaskAutofillSync"] }, { kind: "component", type: MapaFormErrorsComponent, selector: "mapa-form-errors", inputs: ["control", "errors"] }] }); }
539
544
  }
540
545
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImport: i0, type: MapaInputComponent, decorators: [{
541
546
  type: Component,
@@ -711,7 +716,7 @@ class MapaTextareaComponent {
711
716
  useExisting: forwardRef(() => MapaTextareaComponent),
712
717
  multi: true,
713
718
  },
714
- ], ngImport: i0, template: "<label *ngIf=\"element.label\" class=\"mapa-textarea__label\">\n {{ element.label }}\n</label>\n<mat-form-field\n class=\"mapa-textarea\"\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n>\n <textarea\n *ngIf=\"element.autosize\"\n class=\"mapa-textarea__control mapa-textarea__control--autosize\"\n matInput\n cdkTextareaAutosize\n #autosize=\"cdkTextareaAutosize\"\n [cdkAutosizeMinRows]=\"element.autosizeMinRow\"\n [cdkAutosizeMaxRows]=\"element.autosizeMaxRow\"\n [formControl]=\"formControl\"\n [placeholder]=\"element.placeholder || ''\"\n ></textarea>\n <textarea\n class=\"mapa-textarea__control mapa-textarea__control--manual\"\n matInput\n *ngIf=\"!element.autosize\"\n [maxlength]=\"element.maxLength\"\n [formControl]=\"formControl\"\n [placeholder]=\"element.placeholder || ''\"\n ></textarea>\n <mat-hint *ngIf=\"element.hint\">{{ element.hint }}</mat-hint>\n <mat-error>\n <mapa-form-errors\n [control]=\"formControl\"\n [errors]=\"element.errors\"\n ></mapa-form-errors>\n </mat-error>\n</mat-form-field>\n", styles: [":host{display:block}.mapa-textarea{margin-bottom:16px}.mapa-textarea__label{font-family:var(--mapa-font-heading, \"Asap\", \"Inter\", sans-serif);display:block;font-size:12px;font-style:normal;font-weight:600;line-height:16px;text-transform:uppercase;margin-bottom:16px}:host ::ng-deep .mapa-textarea .mat-mdc-input-element{font-family:var(--mapa-font-body, \"Asap\", \"Roboto\", \"Inter\", sans-serif);font-size:16px;font-style:normal;font-weight:400;line-height:24px}:host ::ng-deep .mapa-textarea .mapa-textarea__control{box-sizing:border-box;display:block;margin:0;width:100%}:host ::ng-deep .mapa-textarea .mapa-textarea__control--manual{min-height:99px;resize:vertical!important}:host ::ng-deep .mapa-textarea .mat-mdc-text-field-wrapper{background-color:var(--mapa-color-surface, #ffffff);border-radius:var(--mapa-radius-sm, 12px);min-height:128px;height:auto!important;align-items:stretch!important}:host ::ng-deep .mapa-textarea .mat-mdc-text-field-wrapper.mdc-text-field--outlined{padding-left:unset!important;padding-right:unset!important}:host ::ng-deep .mapa-textarea .mdc-notched-outline{background-color:transparent;border-radius:var(--mapa-radius-sm, 12px)}:host ::ng-deep .mapa-textarea .mdc-text-field--outlined{--mat-form-field-outlined-container-shape: var(--mapa-radius-sm, 12px);--mat-form-field-outlined-outline-color: var( --mapa-color-border, rgba(26, 26, 26, .18) );--mat-form-field-outlined-hover-outline-color: var( --mapa-color-border, rgba(26, 26, 26, .18) );--mat-form-field-outlined-focus-outline-color: var( --mapa-color-accent, #ff560b );--mat-form-field-outlined-outline-width: 1px;--mat-form-field-outlined-focus-outline-width: 1px}:host ::ng-deep .mapa-textarea .mdc-notched-outline__leading,:host ::ng-deep .mapa-textarea .mdc-notched-outline__notch,:host ::ng-deep .mapa-textarea .mdc-notched-outline__trailing{border-width:1px!important}:host ::ng-deep .mapa-textarea .mat-mdc-form-field-flex{display:flex;align-items:stretch;flex-direction:column;height:auto!important;min-height:128px;padding:12px 16px!important}:host ::ng-deep .mapa-textarea .mat-mdc-form-field-infix{display:flex;align-items:stretch;padding:unset!important;border-top:unset!important;height:auto!important;min-height:104px!important;width:100%}:host ::ng-deep .mapa-textarea .mat-mdc-form-field-error-wrapper,:host ::ng-deep .mapa-textarea .mat-mdc-form-field-hint-wrapper,:host ::ng-deep .mapa-textarea .mat-mdc-form-field-subscript-wrapper{padding:0!important}:host ::ng-deep .mapa-textarea .mat-mdc-form-field-error{margin:8px 0 0;padding-left:4px;color:#b54242;font-size:13px;line-height:18px}:host ::ng-deep .mapa-textarea .mat-mdc-form-field-error:before{display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: i5$1.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "component", type: MapaFormErrorsComponent, selector: "mapa-form-errors", inputs: ["control", "errors"] }] }); }
719
+ ], ngImport: i0, template: "<label *ngIf=\"element.label\" class=\"mapa-textarea__label\">\n {{ element.label }}\n</label>\n<mat-form-field\n class=\"mapa-textarea\"\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n>\n <textarea\n *ngIf=\"element.autosize\"\n class=\"mapa-textarea__control mapa-textarea__control--autosize\"\n matInput\n cdkTextareaAutosize\n #autosize=\"cdkTextareaAutosize\"\n [cdkAutosizeMinRows]=\"element.autosizeMinRow\"\n [cdkAutosizeMaxRows]=\"element.autosizeMaxRow\"\n [formControl]=\"formControl\"\n [placeholder]=\"element.placeholder || ''\"\n ></textarea>\n <textarea\n class=\"mapa-textarea__control mapa-textarea__control--manual\"\n matInput\n *ngIf=\"!element.autosize\"\n [maxlength]=\"element.maxLength\"\n [formControl]=\"formControl\"\n [placeholder]=\"element.placeholder || ''\"\n ></textarea>\n <mat-hint *ngIf=\"element.hint\">{{ element.hint }}</mat-hint>\n <mat-error>\n <mapa-form-errors\n [control]=\"formControl\"\n [errors]=\"element.errors\"\n ></mapa-form-errors>\n </mat-error>\n</mat-form-field>\n", styles: [":host{display:block}.mapa-textarea{margin-bottom:16px}.mapa-textarea__label{font-family:var(--mapa-font-heading, \"Asap\", \"Inter\", sans-serif);display:block;font-size:12px;font-style:normal;font-weight:600;line-height:16px;text-transform:uppercase;margin-bottom:16px}:host ::ng-deep .mapa-textarea .mat-mdc-input-element{font-family:var(--mapa-font-body, \"Asap\", \"Roboto\", \"Inter\", sans-serif);font-size:16px;font-style:normal;font-weight:400;line-height:24px}:host ::ng-deep .mapa-textarea .mapa-textarea__control{box-sizing:border-box;display:block;margin:0;width:100%}:host ::ng-deep .mapa-textarea .mapa-textarea__control--manual{min-height:99px;resize:vertical!important}:host ::ng-deep .mapa-textarea .mat-mdc-text-field-wrapper{background-color:var(--mapa-color-surface, #ffffff);border-radius:var(--mapa-radius-sm, 12px);min-height:128px;height:auto!important;align-items:stretch!important}:host ::ng-deep .mapa-textarea .mat-mdc-text-field-wrapper.mdc-text-field--outlined{padding-left:unset!important;padding-right:unset!important}:host ::ng-deep .mapa-textarea .mdc-notched-outline{background-color:transparent;border-radius:var(--mapa-radius-sm, 12px)}:host ::ng-deep .mapa-textarea .mdc-text-field--outlined{--mat-form-field-outlined-container-shape: var(--mapa-radius-sm, 12px);--mat-form-field-outlined-outline-color: var( --mapa-color-border, rgba(26, 26, 26, .18) );--mat-form-field-outlined-hover-outline-color: var( --mapa-color-border, rgba(26, 26, 26, .18) );--mat-form-field-outlined-focus-outline-color: var( --mapa-color-accent, #ff560b );--mat-form-field-outlined-outline-width: 1px;--mat-form-field-outlined-focus-outline-width: 1px}:host ::ng-deep .mapa-textarea .mdc-notched-outline__leading,:host ::ng-deep .mapa-textarea .mdc-notched-outline__notch,:host ::ng-deep .mapa-textarea .mdc-notched-outline__trailing{border-width:1px!important}:host ::ng-deep .mapa-textarea .mat-mdc-form-field-flex{display:flex;align-items:stretch;flex-direction:column;height:auto!important;min-height:128px;padding:12px 16px!important}:host ::ng-deep .mapa-textarea .mat-mdc-form-field-infix{display:flex;align-items:stretch;padding:unset!important;border-top:unset!important;height:auto!important;min-height:104px!important;width:100%}:host ::ng-deep .mapa-textarea .mat-mdc-form-field-error-wrapper,:host ::ng-deep .mapa-textarea .mat-mdc-form-field-hint-wrapper,:host ::ng-deep .mapa-textarea .mat-mdc-form-field-subscript-wrapper{padding:0!important}:host ::ng-deep .mapa-textarea .mat-mdc-form-field-error{margin:8px 0 0;padding-left:4px;color:#b54242;font-size:13px;line-height:18px}:host ::ng-deep .mapa-textarea .mat-mdc-form-field-error:before{display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i1$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: i5.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "component", type: MapaFormErrorsComponent, selector: "mapa-form-errors", inputs: ["control", "errors"] }] }); }
715
720
  }
716
721
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImport: i0, type: MapaTextareaComponent, decorators: [{
717
722
  type: Component,
@@ -794,9 +799,6 @@ function isMonthFirstDateLocale(locale = getActiveDateLocale()) {
794
799
  function getActiveDateFormat(locale = getActiveDateLocale()) {
795
800
  return isMonthFirstDateLocale(locale) ? "MM/DD/YYYY" : "DD/MM/YYYY";
796
801
  }
797
- function getActiveMaterialDateFormat(locale = getActiveDateLocale()) {
798
- return isMonthFirstDateLocale(locale) ? "MM/dd/yyyy" : "dd/MM/yyyy";
799
- }
800
802
  function getDateInputMask(_locale = getActiveDateLocale()) {
801
803
  return "00/00/0000";
802
804
  }
@@ -964,335 +966,581 @@ function toUtcDayExclusiveEndIso(value) {
964
966
  return date ? buildUtcDate(date, 1, 3, 0, 0, 0).toISOString() : undefined;
965
967
  }
966
968
 
967
- const MAPA_DATEPICKER_FORMATS = {
968
- parse: {
969
- dateInput: "DD/MM/YYYY",
970
- },
971
- display: {
972
- dateInput: "DD/MM/YYYY",
973
- monthYearLabel: "MMM YYYY",
974
- dateA11yLabel: "LL",
975
- monthYearA11yLabel: "MMMM YYYY",
976
- },
969
+ /**
970
+ * Locale de data ativo exposto como sinal.
971
+ *
972
+ * `getActiveDateLocale()` lê do localStorage, que não é reativo. Em vez de
973
+ * consultar o valor a cada ciclo de change detection, observamos o
974
+ * `textsSignal` do `MapaI18nService`: toda troca de idioma do ecossistema
975
+ * passa por `setTexts()`. Como effects do Angular são agendados e não
976
+ * síncronos, quando o corpo do effect roda a gravação no localStorage feita
977
+ * logo após o `setTexts()` já aconteceu.
978
+ *
979
+ * Root-provided de propósito: um effect para toda a aplicação em vez de um por
980
+ * instância de datepicker.
981
+ */
982
+ class MapaDateLocaleService {
983
+ constructor() {
984
+ this.i18n = inject(MapaI18nService);
985
+ this.localeState = signal(getActiveDateLocale(), ...(ngDevMode ? [{ debugName: "localeState" }] : []));
986
+ this.localeSignal = this.localeState.asReadonly();
987
+ effect(() => {
988
+ this.i18n.textsSignal();
989
+ this.refresh();
990
+ });
991
+ }
992
+ /**
993
+ * Relê o locale do storage. Cinto de segurança para consumidores que trocam
994
+ * o idioma sem passar por `setTexts()`.
995
+ */
996
+ refresh() {
997
+ const nextLocale = getActiveDateLocale();
998
+ if (this.localeState() !== nextLocale) {
999
+ this.localeState.set(nextLocale);
1000
+ }
1001
+ }
1002
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.21", ngImport: i0, type: MapaDateLocaleService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1003
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.21", ngImport: i0, type: MapaDateLocaleService, providedIn: "root" }); }
1004
+ }
1005
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImport: i0, type: MapaDateLocaleService, decorators: [{
1006
+ type: Injectable,
1007
+ args: [{ providedIn: "root" }]
1008
+ }], ctorParameters: () => [] });
1009
+
1010
+ /**
1011
+ * Fallback do gatilho de presets. Literal como o `aria-label="Limpar"` que o
1012
+ * v1 e o `mapa-dropdown` já embarcam — `MapaUiTextGroups["datepicker"]` vem do
1013
+ * pacote externo `mapa-frontend-i18n`, então uma chave nova exigiria publicar
1014
+ * aquele pacote antes. Consumidores sobrescrevem via `element.presetsLabel`.
1015
+ */
1016
+ const DEFAULT_PRESETS_LABEL = 'Período';
1017
+ /**
1018
+ * O `Intl` interno do ngxsmk trabalha melhor com tags BCP47 completas — `en`
1019
+ * sozinho deixa a ordem dia/mês ambígua para ele.
1020
+ */
1021
+ const NGXSMK_LOCALE_BY_MAPA_LOCALE = {
1022
+ 'pt-BR': 'pt-BR',
1023
+ en: 'en-US',
1024
+ es: 'es-ES',
977
1025
  };
978
1026
  class MapaDatepicker {
979
- constructor(cdr) {
980
- this.cdr = cdr;
1027
+ constructor() {
1028
+ this.cdr = inject(ChangeDetectorRef);
981
1029
  this.destroyRef = inject(DestroyRef);
982
- this.formDatepicker = new FormGroup({
983
- date: new FormControl(null),
1030
+ this.i18n = inject(MapaI18nService);
1031
+ this.dateLocale = inject(MapaDateLocaleService);
1032
+ this.openedChange = new EventEmitter();
1033
+ /** Camada visível: strings mascaradas. `single` usa apenas `startDate`. */
1034
+ this.formDisplay = new FormGroup({
1035
+ startDate: new FormControl(null),
1036
+ endDate: new FormControl(null),
984
1037
  });
1038
+ /** Camada do calendário: `Date`, no formato que o ngxsmk consome. */
1039
+ this.pickerValue = signal(null, ...(ngDevMode ? [{ debugName: "pickerValue" }] : []));
1040
+ this.isOpenState = signal(false, ...(ngDevMode ? [{ debugName: "isOpenState" }] : []));
1041
+ this.isPresetsOpenState = signal(false, ...(ngDevMode ? [{ debugName: "isPresetsOpenState" }] : []));
1042
+ this.localeState = null;
1043
+ this.syncing = false;
1044
+ this.overlayPositions = [
1045
+ {
1046
+ originX: 'start',
1047
+ originY: 'bottom',
1048
+ overlayX: 'start',
1049
+ overlayY: 'top',
1050
+ offsetY: 8,
1051
+ },
1052
+ {
1053
+ originX: 'start',
1054
+ originY: 'top',
1055
+ overlayX: 'start',
1056
+ overlayY: 'bottom',
1057
+ offsetY: -8,
1058
+ },
1059
+ {
1060
+ originX: 'end',
1061
+ originY: 'bottom',
1062
+ overlayX: 'end',
1063
+ overlayY: 'top',
1064
+ offsetY: 8,
1065
+ },
1066
+ {
1067
+ originX: 'end',
1068
+ originY: 'top',
1069
+ overlayX: 'end',
1070
+ overlayY: 'bottom',
1071
+ offsetY: -8,
1072
+ },
1073
+ ];
1074
+ /**
1075
+ * Referências estáveis: com OnPush, devolver um literal novo a cada ciclo
1076
+ * marcaria o input do ngxsmk como alterado em toda change detection.
1077
+ */
1078
+ this.ngxsmkClasses = { inputGroup: 'mapa-datepicker__ngxsmk-group' };
1079
+ this.emptyDisabledDates = [];
1080
+ this.neverInvalid = () => false;
1081
+ this.localeSync = effect(() => {
1082
+ this.handleLocaleChange(this.dateLocale.localeSignal());
1083
+ }, ...(ngDevMode ? [{ debugName: "localeSync" }] : []));
985
1084
  }
986
1085
  ngOnInit() {
987
- this.formControl = this.formGroup.get(this.element.key);
988
- this.syncDatepickerControl(this.formControl.value);
989
- this.formControl.valueChanges
1086
+ if (!this.element?.key) {
1087
+ throw new Error('mapa-datepicker: element.key é obrigatório.');
1088
+ }
1089
+ const control = this.formGroup?.get(this.element.key);
1090
+ if (!control) {
1091
+ throw new Error(`mapa-datepicker: controle "${this.element.key}" não encontrado no formGroup.`);
1092
+ }
1093
+ this.control = control;
1094
+ this.applyExternal(this.control.value);
1095
+ this.control.valueChanges
990
1096
  .pipe(takeUntilDestroyed(this.destroyRef))
991
- .subscribe((value) => {
992
- this.syncDatepickerControl(value);
993
- });
994
- this.formDatepicker.controls.date.valueChanges
1097
+ .subscribe((value) => this.applyExternal(value));
1098
+ this.control.statusChanges
995
1099
  .pipe(takeUntilDestroyed(this.destroyRef))
996
- .subscribe((value) => {
997
- this.updateExternalControl(value);
998
- });
1100
+ .subscribe(() => this.cdr.markForCheck());
1101
+ this.formDisplay.valueChanges
1102
+ .pipe(takeUntilDestroyed(this.destroyRef))
1103
+ .subscribe(() => this.handleDisplayChange());
1104
+ }
1105
+ // --- estado exposto ao template -----------------------------------------
1106
+ mode() {
1107
+ return this.element?.mode ?? 'single';
1108
+ }
1109
+ isOpen() {
1110
+ return this.isOpenState();
999
1111
  }
1000
- get minDate() {
1112
+ isDisabled() {
1113
+ return !!this.control?.disabled;
1114
+ }
1115
+ isReadonly() {
1116
+ return !!this.element?.readonly;
1117
+ }
1118
+ hasValue() {
1119
+ return this.serializeExternal(this.control?.value) !== '';
1120
+ }
1121
+ showClear() {
1122
+ return this.hasValue() && !this.isDisabled() && !!this.element.clearValue;
1123
+ }
1124
+ shouldShowError() {
1125
+ return (!!this.control &&
1126
+ this.control.invalid &&
1127
+ (this.control.dirty || this.control.touched));
1128
+ }
1129
+ /** Texto somente leitura do modo `multiple` — evita chaves novas de i18n. */
1130
+ selectedLabel() {
1131
+ const value = this.control?.value;
1132
+ return Array.isArray(value) ? value.join(', ') : '';
1133
+ }
1134
+ mask() {
1135
+ return this.element.mask ?? getDateInputMask(this.locale());
1136
+ }
1137
+ singlePlaceholder() {
1138
+ return this.element.placeholder || this.element.label || '';
1139
+ }
1140
+ get startDatePlaceholder() {
1141
+ return this.i18n.textsSignal().datepicker.startDatePlaceholder;
1142
+ }
1143
+ get endDatePlaceholder() {
1144
+ return this.i18n.textsSignal().datepicker.endDatePlaceholder;
1145
+ }
1146
+ // --- entradas repassadas ao ngxsmk --------------------------------------
1147
+ ngxsmkLocale() {
1148
+ return NGXSMK_LOCALE_BY_MAPA_LOCALE[this.locale()];
1149
+ }
1150
+ displayFormat() {
1151
+ return getActiveDateFormat(this.locale());
1152
+ }
1153
+ minDate() {
1001
1154
  return parseDateValue(this.element.minDate);
1002
1155
  }
1003
- get maxDate() {
1156
+ maxDate() {
1004
1157
  return parseDateValue(this.element.maxDate);
1005
1158
  }
1006
- hasValue() {
1007
- return !!this.formControl?.value;
1159
+ disabledDates() {
1160
+ return this.element.disabledDates ?? this.emptyDisabledDates;
1008
1161
  }
1009
- cleanDatepicker() {
1010
- this.formDatepicker.patchValue({ date: null }, { emitEvent: false });
1011
- if (this.formControl.value === "") {
1012
- return;
1013
- }
1014
- this.formControl.patchValue("");
1015
- this.cdr.markForCheck();
1162
+ isInvalidDate() {
1163
+ return this.element.isInvalidDate ?? this.neverInvalid;
1016
1164
  }
1017
- syncDatepickerControl(value) {
1018
- // Parse estrito e sempre day-first: este componente formata a saída com
1019
- // formatDateAsDayMonthYear e usa MAPA_DATEPICKER_FORMATS (DD/MM/YYYY),
1020
- // independentemente do idioma ativo — a leitura precisa casar com a escrita.
1021
- const nextDate = parseDateFieldValue(value, "pt-BR");
1022
- const currentDate = this.formDatepicker.controls.date.value;
1023
- if (this.areDatesEqual(currentDate, nextDate)) {
1024
- return;
1165
+ /**
1166
+ * Um mês por padrão em todos os modos, para o painel ficar na largura do
1167
+ * campo. Dois meses são opt-in via `element.calendars`.
1168
+ */
1169
+ calendars() {
1170
+ return this.element.calendars ?? 1;
1171
+ }
1172
+ weekStart() {
1173
+ return this.element.weekStart;
1174
+ }
1175
+ /**
1176
+ * Presets já resolvidos em datas. Memoizado pela referência de
1177
+ * `element.presets` para não reconstruir `Date`s a cada change detection.
1178
+ *
1179
+ * Alimenta o nosso dropdown, não o painel nativo do ngxsmk: o layout dele é
1180
+ * ditado por media queries duplicadas que nenhum input ou variável controla
1181
+ * (coluna lateral acima de 992px, cards de 45px acima de 1024px), e o input
1182
+ * `classes` do componente de presets é morto — o template dele nunca o lê.
1183
+ */
1184
+ presetList() {
1185
+ const presets = this.element.presets;
1186
+ const cache = this.presetsCache;
1187
+ if (cache && cache.source === presets) {
1188
+ return cache.entries;
1189
+ }
1190
+ const entries = this.buildPresetEntries(presets);
1191
+ this.presetsCache = { source: presets, entries };
1192
+ return entries;
1193
+ }
1194
+ hasPresets() {
1195
+ return this.presetList().length > 0;
1196
+ }
1197
+ isPresetsOpen() {
1198
+ return this.isPresetsOpenState();
1199
+ }
1200
+ isPresetActive(entry) {
1201
+ const locale = this.locale();
1202
+ return (this.serializeExternal({
1203
+ startDate: formatDateForLocale(entry.range[0], locale),
1204
+ endDate: formatDateForLocale(entry.range[1], locale),
1205
+ }) === this.serializeExternal(this.control?.value));
1206
+ }
1207
+ presetsTriggerLabel() {
1208
+ const active = this.presetList().find((entry) => this.isPresetActive(entry));
1209
+ return active?.label ?? this.element.presetsLabel ?? DEFAULT_PRESETS_LABEL;
1210
+ }
1211
+ togglePresets() {
1212
+ this.isPresetsOpenState.update((isOpen) => !isOpen);
1213
+ }
1214
+ closePresets() {
1215
+ if (this.isPresetsOpenState()) {
1216
+ this.isPresetsOpenState.set(false);
1217
+ this.cdr.markForCheck();
1025
1218
  }
1026
- this.formDatepicker.patchValue({ date: nextDate }, { emitEvent: false });
1027
- this.cdr.markForCheck();
1028
1219
  }
1029
- updateExternalControl(value) {
1030
- if (!value) {
1031
- if (this.formControl.value !== "") {
1032
- this.formControl.patchValue("");
1033
- this.cdr.markForCheck();
1034
- }
1220
+ applyPreset(entry) {
1221
+ this.closePresets();
1222
+ if (this.isDisabled()) {
1035
1223
  return;
1036
1224
  }
1037
- const formattedDate = formatDateAsDayMonthYear(value);
1038
- if (this.formControl.value === formattedDate) {
1225
+ // `selectRange` reposiciona o mês visível para o início da faixa e emite
1226
+ // `valueChange` uma única vez, caindo no `handlePickerValue`. Em modo
1227
+ // inline ele não fecha nada — quem fecha continua sendo o nosso overlay.
1228
+ if (this.picker) {
1229
+ this.picker.selectRange([entry.range[0], entry.range[1]]);
1039
1230
  return;
1040
1231
  }
1041
- this.formControl.patchValue(formattedDate);
1042
- this.cdr.markForCheck();
1043
- }
1044
- closePicker(picker) {
1045
- picker.close();
1232
+ this.handlePickerValue({ start: entry.range[0], end: entry.range[1] });
1046
1233
  }
1047
- areDatesEqual(first, second) {
1048
- if (first === second) {
1049
- return true;
1234
+ // --- interação ------------------------------------------------------------
1235
+ toggleCalendar() {
1236
+ if (this.isDisabled() || this.isReadonly()) {
1237
+ return;
1050
1238
  }
1051
- if (!first || !second) {
1052
- return false;
1239
+ const isOpening = !this.isOpenState();
1240
+ if (isOpening) {
1241
+ this.dateLocale.refresh();
1242
+ }
1243
+ this.setOpenState(isOpening);
1244
+ if (!isOpening) {
1245
+ this.control.markAsTouched();
1053
1246
  }
1054
- return first.getTime() === second.getTime();
1055
- }
1056
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.21", ngImport: i0, type: MapaDatepicker, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
1057
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.21", type: MapaDatepicker, isStandalone: true, selector: "mapa-datepicker", inputs: { formGroup: "formGroup", element: "element" }, providers: [
1058
- provideNgxMask(),
1059
- provideNativeDateAdapter(MAPA_DATEPICKER_FORMATS),
1060
- ], ngImport: i0, template: "@if (element && formGroup) {\n <section class=\"mapa-datepicker\" [formGroup]=\"formGroup\">\n @if (element.label) {\n <label class=\"mapa-datepicker__label\">\n {{ element.label }}\n </label>\n }\n\n <section class=\"mapa-datepicker__field\" [formGroup]=\"formGroup\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input\n matInput\n [formControlName]=\"element.key\"\n [placeholder]=\"element.placeholder || element.label || ''\"\n [mask]=\"element.mask\"\n [dropSpecialCharacters]=\"false\"\n [readonly]=\"element.readonly\"\n />\n <button\n *ngIf=\"hasValue()\"\n type=\"button\"\n matSuffix\n aria-label=\"Limpar\"\n class=\"mapa-datepicker__clear\"\n (click)=\"cleanDatepicker()\"\n tabindex=\"-1\"\n >\n &times;\n </button>\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker touchUi=\"true\" #picker></mat-datepicker>\n @if (element.hint) {\n <mat-hint>{{ element.hint }}</mat-hint>\n }\n <mat-error>\n <mapa-form-errors\n [control]=\"formControl\"\n [errors]=\"element.errors\"\n ></mapa-form-errors>\n </mat-error>\n </mat-form-field>\n </section>\n\n <section class=\"mapa-datepicker--hidden\">\n <mat-form-field [formGroup]=\"formDatepicker\">\n <input\n matInput\n formControlName=\"date\"\n [min]=\"minDate\"\n [max]=\"maxDate\"\n [matDatepicker]=\"picker\"\n (dateChange)=\"closePicker(picker)\"\n />\n </mat-form-field>\n </section>\n </section>\n}\n", styles: [":host{display:inline-block;width:310px;max-width:100%;min-width:0;box-sizing:border-box}:host ::ng-deep .mapa-datepicker{display:flex;flex-direction:column;gap:8px}:host ::ng-deep .mapa-datepicker__label{font-family:var(--mapa-font-heading, \"Asap\", \"Inter\", sans-serif);display:block;font-size:12px;font-style:normal;font-weight:600;line-height:16px;text-transform:uppercase;margin-bottom:16px}:host ::ng-deep .mapa-datepicker .mdc-text-field{padding:0}:host ::ng-deep .mapa-datepicker__field .mat-mdc-form-field{width:100%;max-width:100%!important}:host ::ng-deep .mapa-datepicker__field .mat-mdc-text-field-wrapper{height:48px;border-radius:var(--mapa-radius-sm, 12px);background-color:var(--mapa-color-surface, #ffffff)}:host ::ng-deep .mapa-datepicker__field .mat-mdc-form-field-flex{height:48px!important}:host ::ng-deep .mapa-datepicker__field .mat-mdc-form-field-icon-suffix{display:flex;align-items:center}:host ::ng-deep .mapa-datepicker__field .mdc-text-field--outlined{--mat-form-field-outlined-container-shape: var(--mapa-radius-sm, 12px);--mat-form-field-outlined-outline-color: var( --mapa-color-border, rgba(26, 26, 26, .18) );--mat-form-field-outlined-hover-outline-color: var( --mapa-color-border, rgba(26, 26, 26, .18) );--mat-form-field-outlined-focus-outline-color: var( --mapa-color-accent, #ff560b );--mat-form-field-outlined-outline-width: 1px;--mat-form-field-outlined-focus-outline-width: 1px}:host ::ng-deep .mapa-datepicker__field .mat-mdc-form-field-infix{padding-bottom:12px;--mat-form-field-container-height: 48px}:host ::ng-deep .mapa-datepicker__field .mdc-notched-outline{border-radius:var(--mapa-radius-sm, 12px)}:host ::ng-deep .mapa-datepicker__field .mdc-notched-outline__leading,:host ::ng-deep .mapa-datepicker__field .mdc-notched-outline__notch,:host ::ng-deep .mapa-datepicker__field .mdc-notched-outline__trailing{border-width:1px!important}:host ::ng-deep .mapa-datepicker__field .mat-mdc-form-field-subscript-wrapper{min-height:22px}:host ::ng-deep .mapa-datepicker__clear{display:flex;flex:0 0 20px;align-items:center;justify-content:center;width:20px;height:20px;padding:0;border:0;border-radius:50%;background:transparent;color:var(--mapa-color-muted, #555555);font-family:inherit;font-size:16px;line-height:1;cursor:pointer}:host ::ng-deep .mapa-datepicker__clear:hover{background:#1a1a1a14;color:var(--mapa-color-ink, #1a1a1a)}:host ::ng-deep .mapa-datepicker--hidden{display:none}:host ::ng-deep .mapa-datepicker .mat-mdc-form-field-error-wrapper,:host ::ng-deep .mapa-datepicker .mat-mdc-form-field-hint-wrapper,:host ::ng-deep .mapa-datepicker .mat-mdc-form-field-subscript-wrapper{padding:0!important}:host ::ng-deep .mapa-datepicker .mat-mdc-form-field-error{margin:8px 0 0;padding-left:4px;color:#b54242;font-size:13px;line-height:18px}:host ::ng-deep .mapa-datepicker .mat-mdc-form-field-error:before{display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: NgxMaskDirective, selector: "input[mask], textarea[mask]", inputs: ["mask", "specialCharacters", "patterns", "prefix", "suffix", "thousandSeparator", "decimalMarker", "dropSpecialCharacters", "hiddenInput", "showMaskTyped", "placeHolderCharacter", "shownMaskExpression", "clearIfNotMatch", "validation", "separatorLimit", "allowNegativeNumbers", "leadZeroDateTime", "leadZero", "triggerOnMaskChange", "apm", "inputTransformFn", "outputTransformFn", "keepCharacterPositions", "instantPrefix"], outputs: ["maskFilled"], exportAs: ["mask", "ngxMask"] }, { kind: "directive", type: MapaMaskAutofillSyncDirective, selector: "input[mask], textarea[mask]", inputs: ["mapaMaskAutofillSync"], exportAs: ["mapaMaskAutofillSync"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i3$3.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i3$3.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i3$3.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: MapaFormErrorsComponent, selector: "mapa-form-errors", inputs: ["control", "errors"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1061
- }
1062
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImport: i0, type: MapaDatepicker, decorators: [{
1063
- type: Component,
1064
- args: [{ selector: "mapa-datepicker", changeDetection: ChangeDetectionStrategy.OnPush, imports: [
1065
- CommonModule,
1066
- ReactiveFormsModule,
1067
- NgxMaskDirective,
1068
- MapaMaskAutofillSyncDirective,
1069
- MatDatepickerModule,
1070
- MatFormFieldModule,
1071
- MatIconModule,
1072
- MatInputModule,
1073
- MapaFormErrorsComponent,
1074
- ], providers: [
1075
- provideNgxMask(),
1076
- provideNativeDateAdapter(MAPA_DATEPICKER_FORMATS),
1077
- ], standalone: true, template: "@if (element && formGroup) {\n <section class=\"mapa-datepicker\" [formGroup]=\"formGroup\">\n @if (element.label) {\n <label class=\"mapa-datepicker__label\">\n {{ element.label }}\n </label>\n }\n\n <section class=\"mapa-datepicker__field\" [formGroup]=\"formGroup\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input\n matInput\n [formControlName]=\"element.key\"\n [placeholder]=\"element.placeholder || element.label || ''\"\n [mask]=\"element.mask\"\n [dropSpecialCharacters]=\"false\"\n [readonly]=\"element.readonly\"\n />\n <button\n *ngIf=\"hasValue()\"\n type=\"button\"\n matSuffix\n aria-label=\"Limpar\"\n class=\"mapa-datepicker__clear\"\n (click)=\"cleanDatepicker()\"\n tabindex=\"-1\"\n >\n &times;\n </button>\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker touchUi=\"true\" #picker></mat-datepicker>\n @if (element.hint) {\n <mat-hint>{{ element.hint }}</mat-hint>\n }\n <mat-error>\n <mapa-form-errors\n [control]=\"formControl\"\n [errors]=\"element.errors\"\n ></mapa-form-errors>\n </mat-error>\n </mat-form-field>\n </section>\n\n <section class=\"mapa-datepicker--hidden\">\n <mat-form-field [formGroup]=\"formDatepicker\">\n <input\n matInput\n formControlName=\"date\"\n [min]=\"minDate\"\n [max]=\"maxDate\"\n [matDatepicker]=\"picker\"\n (dateChange)=\"closePicker(picker)\"\n />\n </mat-form-field>\n </section>\n </section>\n}\n", styles: [":host{display:inline-block;width:310px;max-width:100%;min-width:0;box-sizing:border-box}:host ::ng-deep .mapa-datepicker{display:flex;flex-direction:column;gap:8px}:host ::ng-deep .mapa-datepicker__label{font-family:var(--mapa-font-heading, \"Asap\", \"Inter\", sans-serif);display:block;font-size:12px;font-style:normal;font-weight:600;line-height:16px;text-transform:uppercase;margin-bottom:16px}:host ::ng-deep .mapa-datepicker .mdc-text-field{padding:0}:host ::ng-deep .mapa-datepicker__field .mat-mdc-form-field{width:100%;max-width:100%!important}:host ::ng-deep .mapa-datepicker__field .mat-mdc-text-field-wrapper{height:48px;border-radius:var(--mapa-radius-sm, 12px);background-color:var(--mapa-color-surface, #ffffff)}:host ::ng-deep .mapa-datepicker__field .mat-mdc-form-field-flex{height:48px!important}:host ::ng-deep .mapa-datepicker__field .mat-mdc-form-field-icon-suffix{display:flex;align-items:center}:host ::ng-deep .mapa-datepicker__field .mdc-text-field--outlined{--mat-form-field-outlined-container-shape: var(--mapa-radius-sm, 12px);--mat-form-field-outlined-outline-color: var( --mapa-color-border, rgba(26, 26, 26, .18) );--mat-form-field-outlined-hover-outline-color: var( --mapa-color-border, rgba(26, 26, 26, .18) );--mat-form-field-outlined-focus-outline-color: var( --mapa-color-accent, #ff560b );--mat-form-field-outlined-outline-width: 1px;--mat-form-field-outlined-focus-outline-width: 1px}:host ::ng-deep .mapa-datepicker__field .mat-mdc-form-field-infix{padding-bottom:12px;--mat-form-field-container-height: 48px}:host ::ng-deep .mapa-datepicker__field .mdc-notched-outline{border-radius:var(--mapa-radius-sm, 12px)}:host ::ng-deep .mapa-datepicker__field .mdc-notched-outline__leading,:host ::ng-deep .mapa-datepicker__field .mdc-notched-outline__notch,:host ::ng-deep .mapa-datepicker__field .mdc-notched-outline__trailing{border-width:1px!important}:host ::ng-deep .mapa-datepicker__field .mat-mdc-form-field-subscript-wrapper{min-height:22px}:host ::ng-deep .mapa-datepicker__clear{display:flex;flex:0 0 20px;align-items:center;justify-content:center;width:20px;height:20px;padding:0;border:0;border-radius:50%;background:transparent;color:var(--mapa-color-muted, #555555);font-family:inherit;font-size:16px;line-height:1;cursor:pointer}:host ::ng-deep .mapa-datepicker__clear:hover{background:#1a1a1a14;color:var(--mapa-color-ink, #1a1a1a)}:host ::ng-deep .mapa-datepicker--hidden{display:none}:host ::ng-deep .mapa-datepicker .mat-mdc-form-field-error-wrapper,:host ::ng-deep .mapa-datepicker .mat-mdc-form-field-hint-wrapper,:host ::ng-deep .mapa-datepicker .mat-mdc-form-field-subscript-wrapper{padding:0!important}:host ::ng-deep .mapa-datepicker .mat-mdc-form-field-error{margin:8px 0 0;padding-left:4px;color:#b54242;font-size:13px;line-height:18px}:host ::ng-deep .mapa-datepicker .mat-mdc-form-field-error:before{display:none}\n"] }]
1078
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { formGroup: [{
1079
- type: Input
1080
- }], element: [{
1081
- type: Input
1082
- }] } });
1083
-
1084
- /*
1085
- * Public API Surface of mapa-library-ui datepicker (single)
1086
- */
1087
-
1088
- function getMapaDatepickerRangeFormats() {
1089
- const dateInput = getActiveMaterialDateFormat();
1090
- return {
1091
- parse: {
1092
- dateInput,
1093
- },
1094
- display: {
1095
- dateInput,
1096
- monthYearLabel: "MMM YYYY",
1097
- dateA11yLabel: "LL",
1098
- monthYearA11yLabel: "MMMM YYYY",
1099
- },
1100
- };
1101
- }
1102
- class MapaDatepickerRange {
1103
- constructor(i18n, cdr) {
1104
- this.i18n = i18n;
1105
- this.cdr = cdr;
1106
- this.destroyRef = inject(DestroyRef);
1107
- this.dateAdapter = inject((DateAdapter));
1108
- this.emptyValue = {
1109
- startDate: null,
1110
- endDate: null,
1111
- };
1112
- this.currentLocale = null;
1113
- this.formDatepicker = new FormGroup({
1114
- startDate: new FormControl(null),
1115
- endDate: new FormControl(null),
1116
- });
1117
- this.formDisplay = new FormGroup({
1118
- startDate: new FormControl(null),
1119
- endDate: new FormControl(null),
1120
- });
1121
1247
  }
1122
- get texts() {
1123
- return this.i18n.textsSignal();
1248
+ closeCalendar() {
1249
+ if (this.isOpenState()) {
1250
+ this.setOpenState(false);
1251
+ }
1252
+ this.control?.markAsTouched();
1124
1253
  }
1125
- get dateInputMask() {
1126
- return getDateInputMask(this.getLocale());
1254
+ handleOverlayOutsideClick(event) {
1255
+ if (this.toggleButton?.nativeElement.contains(event.target)) {
1256
+ return;
1257
+ }
1258
+ this.closeCalendar();
1127
1259
  }
1128
- get activeDateFormat() {
1129
- return getActiveDateFormat(this.getLocale());
1260
+ handleEscape() {
1261
+ // Dois estágios: o Escape fecha primeiro o dropdown de presets, e só o
1262
+ // segundo fecha o calendário.
1263
+ if (this.isPresetsOpenState()) {
1264
+ this.closePresets();
1265
+ return;
1266
+ }
1267
+ if (this.isOpenState()) {
1268
+ this.closeCalendar();
1269
+ this.toggleButton?.nativeElement.focus();
1270
+ }
1130
1271
  }
1131
- ngOnInit() {
1132
- this.syncLocaleSettings();
1133
- if (!this.element?.key) {
1134
- throw new Error("mapa-datepicker-range requires element.key to resolve the target control.");
1272
+ /** Seleção vinda do calendário. */
1273
+ handlePickerValue(value) {
1274
+ const next = this.toExternal(value, this.locale());
1275
+ this.closePresets();
1276
+ this.patchDisplay(this.toDisplayValue(next));
1277
+ this.pickerValue.set(value);
1278
+ // Um range pela metade nunca chega ao consumidor: o ngxsmk emite
1279
+ // `{ start, end: null }` já no primeiro clique.
1280
+ if (this.mode() === 'range' && !this.isCompleteRange(next)) {
1281
+ this.cdr.markForCheck();
1282
+ return;
1135
1283
  }
1136
- this.rangeControl = this.formGroup.get(this.element.key);
1137
- if (!this.rangeControl) {
1138
- throw new Error(`mapa-datepicker-range could not find control '${this.element.key}' in formGroup.`);
1284
+ this.emitExternal(next);
1285
+ if (this.element.closeOnSelect && this.shouldCloseAfterSelect(next)) {
1286
+ this.closeCalendar();
1139
1287
  }
1140
- this.syncFromExternal(this.rangeControl.value);
1141
- this.rangeControl.valueChanges
1142
- .pipe(takeUntilDestroyed(this.destroyRef))
1143
- .subscribe((value) => {
1144
- this.syncFromExternal(value);
1145
- });
1146
- this.formDisplay.valueChanges
1147
- .pipe(takeUntilDestroyed(this.destroyRef))
1148
- .subscribe((value) => {
1149
- this.updateExternalFromDisplay(value);
1150
- });
1151
- this.formDatepicker.valueChanges
1152
- .pipe(takeUntilDestroyed(this.destroyRef))
1153
- .subscribe((value) => {
1154
- this.updateExternalFromDatepicker(value);
1155
- });
1156
1288
  }
1157
- ngDoCheck() {
1158
- this.syncLocaleSettings();
1289
+ clear(event) {
1290
+ event?.stopPropagation();
1291
+ if (this.isDisabled()) {
1292
+ return;
1293
+ }
1294
+ this.patchDisplay({ startDate: null, endDate: null });
1295
+ this.pickerValue.set(null);
1296
+ this.emitExternal(this.emptyValue());
1297
+ this.control.markAsTouched();
1298
+ }
1299
+ // --- sincronização --------------------------------------------------------
1300
+ locale() {
1301
+ return this.localeState ?? this.dateLocale.localeSignal();
1302
+ }
1303
+ handleLocaleChange(locale) {
1304
+ const previousLocale = this.localeState;
1305
+ this.localeState = locale;
1306
+ // O effect roda uma primeira vez antes de haver troca real de idioma, e
1307
+ // pode rodar antes do ngOnInit resolver o controle.
1308
+ if (!this.control || previousLocale === null || previousLocale === locale) {
1309
+ this.cdr.markForCheck();
1310
+ return;
1311
+ }
1312
+ const picker = this.pickerValue();
1313
+ // Reformatamos a partir das datas já resolvidas, nunca reinterpretando o
1314
+ // texto: assim um valor meio digitado ou inválido sobrevive à troca.
1315
+ if (!picker) {
1316
+ this.cdr.markForCheck();
1317
+ return;
1318
+ }
1319
+ const next = this.toExternal(picker, locale);
1320
+ this.patchDisplay(this.toDisplayValue(next));
1321
+ this.emitExternal(next);
1159
1322
  }
1160
- get startDatePlaceholder() {
1161
- return this.texts.datepicker.startDatePlaceholder;
1323
+ /** Digitação no campo mascarado. Passa o texto adiante verbatim. */
1324
+ handleDisplayChange() {
1325
+ if (this.syncing || this.mode() === 'multiple' || !this.control) {
1326
+ return;
1327
+ }
1328
+ const display = this.formDisplay.getRawValue();
1329
+ const next = this.mode() === 'range'
1330
+ ? {
1331
+ startDate: display.startDate || null,
1332
+ endDate: display.endDate || null,
1333
+ }
1334
+ : (display.startDate ?? '');
1335
+ this.pickerValue.set(this.toPickerValue(next, this.locale()));
1336
+ this.emitExternal(next);
1162
1337
  }
1163
- get endDatePlaceholder() {
1164
- return this.texts.datepicker.endDatePlaceholder;
1165
- }
1166
- syncFromExternal(value) {
1167
- this.syncLocaleSettings();
1168
- const nextValue = value ?? this.emptyValue;
1169
- const displayValue = {
1170
- startDate: nextValue.startDate,
1171
- endDate: nextValue.endDate,
1172
- };
1173
- const datepickerValue = {
1174
- startDate: parseDateFieldValue(nextValue.startDate, this.getLocale()),
1175
- endDate: parseDateFieldValue(nextValue.endDate, this.getLocale()),
1176
- };
1177
- const currentDisplay = this.formDisplay.getRawValue();
1178
- if (currentDisplay.startDate !== displayValue.startDate ||
1179
- currentDisplay.endDate !== displayValue.endDate) {
1180
- this.formDisplay.patchValue(displayValue, { emitEvent: false });
1338
+ applyExternal(value) {
1339
+ if (this.syncing) {
1340
+ return;
1181
1341
  }
1182
- const currentDatepicker = this.formDatepicker.getRawValue();
1183
- if (!this.areDatesEqual(currentDatepicker.startDate, datepickerValue.startDate) ||
1184
- !this.areDatesEqual(currentDatepicker.endDate, datepickerValue.endDate)) {
1185
- this.formDatepicker.patchValue(datepickerValue, { emitEvent: false });
1342
+ const display = this.toDisplayValue(value);
1343
+ const current = this.formDisplay.getRawValue();
1344
+ if (current.startDate !== display.startDate ||
1345
+ current.endDate !== display.endDate) {
1346
+ this.patchDisplay(display);
1186
1347
  }
1348
+ this.pickerValue.set(this.toPickerValue(value, this.locale()));
1187
1349
  this.cdr.markForCheck();
1188
1350
  }
1189
- updateExternalFromDisplay(value) {
1190
- this.syncLocaleSettings();
1191
- const nextValue = {
1192
- startDate: value.startDate ?? null,
1193
- endDate: value.endDate ?? null,
1194
- };
1195
- this.patchExternalValue(nextValue);
1196
- const nextDatepickerValue = {
1197
- startDate: parseDateFieldValue(nextValue.startDate, this.getLocale()),
1198
- endDate: parseDateFieldValue(nextValue.endDate, this.getLocale()),
1199
- };
1200
- this.formDatepicker.patchValue(nextDatepickerValue, { emitEvent: false });
1201
- this.cdr.markForCheck();
1202
- }
1203
- updateExternalFromDatepicker(value) {
1204
- this.syncLocaleSettings();
1205
- if (!value.startDate || !value.endDate) {
1351
+ emitExternal(next) {
1352
+ // Comparação pela string formatada, não por `Date`: presets devolvem o fim
1353
+ // do range às 23:59:59.999 e um guard por `getTime()` reemitiria em loop.
1354
+ if (this.serializeExternal(this.control.value) ===
1355
+ this.serializeExternal(next)) {
1356
+ this.cdr.markForCheck();
1206
1357
  return;
1207
1358
  }
1208
- const nextValue = {
1209
- startDate: formatDateForLocale(value.startDate, this.getLocale()),
1210
- endDate: formatDateForLocale(value.endDate, this.getLocale()),
1211
- };
1212
- this.patchExternalValue(nextValue);
1213
- this.formDisplay.patchValue(nextValue, { emitEvent: false });
1359
+ this.syncing = true;
1360
+ try {
1361
+ this.control.patchValue(next);
1362
+ this.control.markAsDirty();
1363
+ }
1364
+ finally {
1365
+ this.syncing = false;
1366
+ }
1214
1367
  this.cdr.markForCheck();
1215
1368
  }
1216
- patchExternalValue(nextValue) {
1217
- const currentValue = this.rangeControl.value;
1218
- if (currentValue?.startDate === nextValue.startDate &&
1219
- currentValue?.endDate === nextValue.endDate) {
1220
- return;
1369
+ patchDisplay(display) {
1370
+ this.syncing = true;
1371
+ try {
1372
+ this.formDisplay.patchValue(display, { emitEvent: false });
1373
+ }
1374
+ finally {
1375
+ this.syncing = false;
1221
1376
  }
1222
- this.rangeControl.patchValue(nextValue);
1223
1377
  }
1224
- areDatesEqual(first, second) {
1225
- if (first === second) {
1226
- return true;
1378
+ // --- conversões -----------------------------------------------------------
1379
+ toPickerValue(value, locale) {
1380
+ switch (this.mode()) {
1381
+ case 'range': {
1382
+ const range = this.asRangeValue(value);
1383
+ const start = parseDateFieldValue(range.startDate, locale);
1384
+ const end = parseDateFieldValue(range.endDate, locale);
1385
+ return start || end ? { start, end } : null;
1386
+ }
1387
+ case 'multiple': {
1388
+ const dates = (Array.isArray(value) ? value : [])
1389
+ .map((item) => parseDateFieldValue(item, locale))
1390
+ .filter((date) => !!date);
1391
+ return dates.length ? dates : null;
1392
+ }
1393
+ default:
1394
+ return parseDateFieldValue(value, locale);
1227
1395
  }
1228
- if (!first || !second) {
1229
- return false;
1396
+ }
1397
+ toExternal(value, locale) {
1398
+ switch (this.mode()) {
1399
+ case 'range': {
1400
+ const range = this.asPickerRange(value);
1401
+ return {
1402
+ startDate: range.start
1403
+ ? formatDateForLocale(range.start, locale)
1404
+ : null,
1405
+ endDate: range.end ? formatDateForLocale(range.end, locale) : null,
1406
+ };
1407
+ }
1408
+ case 'multiple':
1409
+ return (Array.isArray(value) ? value : []).map((date) => formatDateForLocale(date, locale));
1410
+ default:
1411
+ return value instanceof Date ? formatDateForLocale(value, locale) : '';
1230
1412
  }
1231
- return first.getTime() === second.getTime();
1232
1413
  }
1233
- cleanDatepicker() {
1234
- const defaultRange = {
1235
- startDate: null,
1236
- endDate: null,
1237
- };
1238
- this.formDatepicker.patchValue(defaultRange, { emitEvent: false });
1239
- this.formDisplay.patchValue(defaultRange, { emitEvent: false });
1240
- this.patchExternalValue(defaultRange);
1241
- this.cdr.markForCheck();
1414
+ toDisplayValue(value) {
1415
+ switch (this.mode()) {
1416
+ case 'range': {
1417
+ const range = this.asRangeValue(value);
1418
+ return { startDate: range.startDate, endDate: range.endDate };
1419
+ }
1420
+ case 'multiple':
1421
+ return { startDate: null, endDate: null };
1422
+ default:
1423
+ return {
1424
+ startDate: typeof value === 'string' ? value : '',
1425
+ endDate: null,
1426
+ };
1427
+ }
1242
1428
  }
1243
- getLocale() {
1244
- return this.currentLocale ?? getActiveDateLocale();
1429
+ /** Forma canônica usada só para comparar — nunca é gravada no controle. */
1430
+ serializeExternal(value) {
1431
+ switch (this.mode()) {
1432
+ case 'range': {
1433
+ const range = this.asRangeValue(value);
1434
+ const serialized = `${range.startDate ?? ''}|${range.endDate ?? ''}`;
1435
+ return serialized === '|' ? '' : serialized;
1436
+ }
1437
+ case 'multiple':
1438
+ return (Array.isArray(value) ? value : []).join('|');
1439
+ default:
1440
+ return typeof value === 'string' ? value : '';
1441
+ }
1245
1442
  }
1246
- syncLocaleSettings() {
1247
- const nextLocale = getActiveDateLocale();
1248
- if (this.currentLocale === nextLocale) {
1249
- return;
1443
+ emptyValue() {
1444
+ switch (this.mode()) {
1445
+ case 'range':
1446
+ return { startDate: null, endDate: null };
1447
+ case 'multiple':
1448
+ return [];
1449
+ default:
1450
+ return '';
1250
1451
  }
1251
- this.currentLocale = nextLocale;
1252
- this.dateAdapter.setLocale(nextLocale);
1253
- const datepickerValue = this.formDatepicker.getRawValue();
1254
- const hasDateRange = !!datepickerValue.startDate && !!datepickerValue.endDate;
1255
- if (hasDateRange) {
1256
- const formattedRange = {
1257
- startDate: formatDateForLocale(datepickerValue.startDate, nextLocale),
1258
- endDate: formatDateForLocale(datepickerValue.endDate, nextLocale),
1452
+ }
1453
+ asRangeValue(value) {
1454
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
1455
+ return {
1456
+ startDate: value.startDate ?? null,
1457
+ endDate: value.endDate ?? null,
1259
1458
  };
1260
- this.formDisplay.patchValue(formattedRange, { emitEvent: false });
1261
- if (this.rangeControl) {
1262
- this.patchExternalValue(formattedRange);
1263
- }
1264
1459
  }
1265
- this.cdr.markForCheck();
1460
+ return { startDate: null, endDate: null };
1266
1461
  }
1267
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.21", ngImport: i0, type: MapaDatepickerRange, deps: [{ token: MapaI18nService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
1268
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.21", type: MapaDatepickerRange, isStandalone: true, selector: "mapa-datepicker-range", inputs: { formGroup: "formGroup", element: "element" }, providers: [
1269
- provideNgxMask(),
1270
- provideNativeDateAdapter(getMapaDatepickerRangeFormats()),
1271
- ], ngImport: i0, template: "@if (element.label) {\n <div class=\"mapa-datepicker-range__label\">\n {{ element.label }}\n </div>\n}\n<section class=\"mapa-datepicker-range\" [formGroup]=\"formDisplay\">\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"mapa-datepicker-range__start-date\"\n >\n <input\n matInput\n formControlName=\"startDate\"\n [placeholder]=\"startDatePlaceholder\"\n [mask]=\"dateInputMask\"\n [dropSpecialCharacters]=\"false\"\n [attr.data-date-format]=\"activeDateFormat\"\n />\n </mat-form-field>\n <div class=\"mapa-datepicker-range__divider\">&ndash;</div>\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"mapa-datepicker-range__end-date\"\n >\n <input\n matInput\n formControlName=\"endDate\"\n [placeholder]=\"endDatePlaceholder\"\n [mask]=\"dateInputMask\"\n [dropSpecialCharacters]=\"false\"\n [attr.data-date-format]=\"activeDateFormat\"\n />\n <button\n type=\"button\"\n matSuffix\n aria-label=\"Limpar\"\n class=\"mapa-datepicker-range__clear\"\n (click)=\"cleanDatepicker()\"\n tabindex=\"-1\"\n >\n &times;\n </button>\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-date-range-picker touchUi=\"true\" #picker></mat-date-range-picker>\n </mat-form-field>\n</section>\n<section class=\"mapa--hidden\">\n <mat-form-field [formGroup]=\"formDatepicker\">\n <mat-date-range-input [rangePicker]=\"picker\">\n <input matStartDate formControlName=\"startDate\" />\n <input matEndDate formControlName=\"endDate\" />\n </mat-date-range-input>\n </mat-form-field>\n</section>\n", styles: [":host{display:inline-block;width:310px;max-width:100%;min-width:0;box-sizing:border-box}:host ::ng-deep .mat-mdc-form-field-type-mat-date-range-input .mdc-text-field--outlined{background-color:#fff}:host ::ng-deep .mat-mdc-form-field-type-mat-date-range-input .mat-mdc-text-field-wrapper{min-height:48px!important;height:48px!important}:host ::ng-deep .mat-mdc-form-field-type-mat-date-range-input .mat-mdc-text-field-wrapper.mdc-text-field--outlined{padding-left:unset!important;padding-right:unset!important}:host ::ng-deep .mapa-datepicker-range{display:flex;align-items:center;justify-content:flex-start;background-color:var(--mapa-color-surface, #ffffff);border:1px solid var(--mapa-color-border, rgba(26, 26, 26, .18));border-radius:var(--mapa-radius-sm, 12px);overflow:hidden;box-sizing:border-box;padding:0 0 0 16px;min-height:48px;height:48px;width:100%}:host ::ng-deep .mapa-datepicker-range__label{font-family:var(--mapa-font-heading, \"Asap\", \"Inter\", sans-serif);display:block;font-size:12px;font-style:normal;font-weight:600;line-height:16px;text-transform:uppercase;margin-bottom:16px}:host ::ng-deep .mapa-datepicker-range__start-date,:host ::ng-deep .mapa-datepicker-range__end-date{display:flex;flex:1 1 0;align-items:center;align-self:stretch;min-width:0}:host ::ng-deep .mapa-datepicker-range__start-date .mat-mdc-input-element,:host ::ng-deep .mapa-datepicker-range__start-date .mat-mdc-text-field-wrapper,:host ::ng-deep .mapa-datepicker-range__end-date .mat-mdc-input-element,:host ::ng-deep .mapa-datepicker-range__end-date .mat-mdc-text-field-wrapper{width:100%;min-width:0}:host ::ng-deep .mapa-datepicker-range__end-date{flex-basis:72px}:host ::ng-deep .mapa-datepicker-range__divider{flex:none;margin:0 8px}:host ::ng-deep .mapa-datepicker-range__clear{display:flex;flex:0 0 20px;align-items:center;justify-content:center;width:20px;height:20px;padding:0;border:0;border-radius:50%;background:transparent;color:var(--mapa-color-muted, #555555);font-family:inherit;font-size:16px;line-height:1;cursor:pointer}:host ::ng-deep .mapa-datepicker-range__clear:hover{background:#1a1a1a14;color:var(--mapa-color-ink, #1a1a1a)}:host ::ng-deep .mapa-datepicker-range .mat-mdc-form-field-icon-suffix{display:flex;flex:none;align-items:center;gap:4px;margin-left:0;padding:unset!important}:host ::ng-deep .mapa-datepicker-range .mat-mdc-form-field-icon-suffix .mat-datepicker-toggle{margin:0}:host ::ng-deep .mapa-datepicker-range .mat-mdc-form-field-flex{display:flex;align-items:center;min-height:100%;height:48px!important}:host ::ng-deep .mapa-datepicker-range .mat-mdc-text-field-wrapper{padding:0!important;align-items:center!important;display:flex;background:var(--mapa-color-surface, #ffffff);min-height:100%}:host ::ng-deep .mapa-datepicker-range .mdc-notched-outline{display:none}:host ::ng-deep .mapa-datepicker-range .mat-mdc-form-field-infix{padding:0!important;margin-left:0!important;min-height:unset!important;border-top:unset!important;display:flex;align-items:center;height:100%}:host ::ng-deep .mapa-datepicker-range .mat-mdc-input-element{align-self:center;height:100%;line-height:24px;margin:0!important;padding:0 8px 0 0!important;text-align:left;vertical-align:middle}:host ::ng-deep .mapa-datepicker-range .mat-mdc-form-field-error-wrapper,:host ::ng-deep .mapa-datepicker-range .mat-mdc-form-field-hint-wrapper,:host ::ng-deep .mapa-datepicker-range .mat-mdc-form-field-subscript-wrapper{padding:0!important}:host ::ng-deep .mapa--hidden{display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: NgxMaskDirective, selector: "input[mask], textarea[mask]", inputs: ["mask", "specialCharacters", "patterns", "prefix", "suffix", "thousandSeparator", "decimalMarker", "dropSpecialCharacters", "hiddenInput", "showMaskTyped", "placeHolderCharacter", "shownMaskExpression", "clearIfNotMatch", "validation", "separatorLimit", "allowNegativeNumbers", "leadZeroDateTime", "leadZero", "triggerOnMaskChange", "apm", "inputTransformFn", "outputTransformFn", "keepCharacterPositions", "instantPrefix"], outputs: ["maskFilled"], exportAs: ["mask", "ngxMask"] }, { kind: "directive", type: MapaMaskAutofillSyncDirective, selector: "input[mask], textarea[mask]", inputs: ["mapaMaskAutofillSync"], exportAs: ["mapaMaskAutofillSync"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i3$3.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i3$3.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i3$3.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i3$3.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i3$3.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1462
+ asPickerRange(value) {
1463
+ if (value && !Array.isArray(value) && !(value instanceof Date)) {
1464
+ return { start: value.start ?? null, end: value.end ?? null };
1465
+ }
1466
+ return { start: null, end: null };
1467
+ }
1468
+ isCompleteRange(value) {
1469
+ const range = this.asRangeValue(value);
1470
+ return !!range.startDate && !!range.endDate;
1471
+ }
1472
+ shouldCloseAfterSelect(value) {
1473
+ switch (this.mode()) {
1474
+ case 'multiple':
1475
+ return false;
1476
+ case 'range':
1477
+ return this.isCompleteRange(value);
1478
+ default:
1479
+ return typeof value === 'string' && !!value;
1480
+ }
1481
+ }
1482
+ buildPresetEntries(presets) {
1483
+ if (this.mode() !== 'range' || !presets?.length) {
1484
+ return [];
1485
+ }
1486
+ return presets.map((preset) => ({
1487
+ label: preset.label,
1488
+ range: this.resolvePreset(preset),
1489
+ }));
1490
+ }
1491
+ resolvePreset(preset) {
1492
+ if (preset.startDate && preset.endDate) {
1493
+ return [preset.startDate, preset.endDate];
1494
+ }
1495
+ // Atenção: `getRelativeDateRange` devolve o fim às 23:59:59.999. Só o
1496
+ // guard por string formatada de `emitExternal` tolera isso — um guard por
1497
+ // `getTime()` reemitiria em loop.
1498
+ const { startDate, endDate } = getRelativeDateRange(preset.daysBack ?? 0);
1499
+ return [startDate, endDate];
1500
+ }
1501
+ setOpenState(isOpen) {
1502
+ this.isOpenState.set(isOpen);
1503
+ this.isPresetsOpenState.set(false);
1504
+ this.openedChange.emit(isOpen);
1505
+ }
1506
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.21", ngImport: i0, type: MapaDatepicker, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1507
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.21", type: MapaDatepicker, isStandalone: true, selector: "mapa-datepicker, mapa-datepicker-range", inputs: { formGroup: "formGroup", element: "element" }, outputs: { openedChange: "openedChange" }, host: { listeners: { "document:keydown.escape": "handleEscape()" } }, providers: [provideNgxMask()], viewQueries: [{ propertyName: "toggleButton", first: true, predicate: ["toggleButton"], descendants: true }, { propertyName: "picker", first: true, predicate: NgxsmkDatepickerComponent, descendants: true }], ngImport: i0, template: "@if (element && formGroup) {\n <div\n class=\"mapa-datepicker\"\n [class.mapa-datepicker--open]=\"isOpen()\"\n [class.mapa-datepicker--disabled]=\"isDisabled()\"\n >\n @if (element.label) {\n <label class=\"mapa-datepicker__label\" [attr.for]=\"element.key || null\">\n {{ element.label }}\n </label>\n }\n\n <!-- A origem do overlay precisa ficar fora do @if: refer\u00EAncias de template\n n\u00E3o atravessam blocos de controle de fluxo. -->\n <div\n class=\"mapa-datepicker__origin\"\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n [formGroup]=\"formDisplay\"\n >\n @if (mode() === \"range\") {\n <div class=\"mapa-datepicker__range\">\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"mapa-datepicker__range-start\"\n >\n <input\n matInput\n formControlName=\"startDate\"\n [attr.id]=\"element.key || null\"\n [placeholder]=\"startDatePlaceholder\"\n [mask]=\"mask()\"\n [dropSpecialCharacters]=\"false\"\n [readonly]=\"isReadonly()\"\n />\n </mat-form-field>\n\n <span class=\"mapa-datepicker__divider\">&ndash;</span>\n\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"mapa-datepicker__range-end\"\n >\n <input\n matInput\n formControlName=\"endDate\"\n [placeholder]=\"endDatePlaceholder\"\n [mask]=\"mask()\"\n [dropSpecialCharacters]=\"false\"\n [readonly]=\"isReadonly()\"\n />\n\n @if (showClear()) {\n <button\n matSuffix\n type=\"button\"\n class=\"mapa-datepicker__clear\"\n aria-label=\"Limpar\"\n tabindex=\"-1\"\n (click)=\"clear($event)\"\n >\n &times;\n </button>\n }\n\n <button\n #toggleButton\n matSuffix\n type=\"button\"\n class=\"mapa-datepicker__toggle\"\n [disabled]=\"isDisabled() || isReadonly()\"\n [attr.aria-expanded]=\"isOpen()\"\n aria-haspopup=\"dialog\"\n aria-label=\"Abrir calend\u00E1rio\"\n (click)=\"toggleCalendar()\"\n >\n <ng-container [ngTemplateOutlet]=\"calendarIcon\"></ng-container>\n </button>\n </mat-form-field>\n </div>\n } @else {\n <div class=\"mapa-datepicker__field\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n @if (mode() === \"multiple\") {\n <input\n matInput\n [attr.id]=\"element.key || null\"\n [value]=\"selectedLabel()\"\n [placeholder]=\"singlePlaceholder()\"\n readonly\n (click)=\"toggleCalendar()\"\n />\n } @else {\n <input\n matInput\n formControlName=\"startDate\"\n [attr.id]=\"element.key || null\"\n [placeholder]=\"singlePlaceholder()\"\n [mask]=\"mask()\"\n [dropSpecialCharacters]=\"false\"\n [readonly]=\"isReadonly()\"\n />\n }\n\n @if (showClear()) {\n <button\n matSuffix\n type=\"button\"\n class=\"mapa-datepicker__clear\"\n aria-label=\"Limpar\"\n tabindex=\"-1\"\n (click)=\"clear($event)\"\n >\n &times;\n </button>\n }\n\n <button\n #toggleButton\n matSuffix\n type=\"button\"\n class=\"mapa-datepicker__toggle\"\n [disabled]=\"isDisabled() || isReadonly()\"\n [attr.aria-expanded]=\"isOpen()\"\n aria-haspopup=\"dialog\"\n aria-label=\"Abrir calend\u00E1rio\"\n (click)=\"toggleCalendar()\"\n >\n <ng-container [ngTemplateOutlet]=\"calendarIcon\"></ng-container>\n </button>\n </mat-form-field>\n </div>\n }\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayPush]=\"true\"\n cdkConnectedOverlayPanelClass=\"mapa-datepicker__overlay-pane\"\n (overlayOutsideClick)=\"handleOverlayOutsideClick($event)\"\n >\n <div class=\"mapa-datepicker__panel\" role=\"dialog\">\n @if (hasPresets()) {\n <div class=\"mapa-datepicker__presets\">\n <button\n type=\"button\"\n class=\"mapa-datepicker__presets-trigger\"\n [class.mapa-datepicker__presets-trigger--open]=\"isPresetsOpen()\"\n [attr.aria-expanded]=\"isPresetsOpen()\"\n aria-haspopup=\"listbox\"\n (click)=\"togglePresets()\"\n >\n <span>{{ presetsTriggerLabel() }}</span>\n <svg\n class=\"mapa-datepicker__presets-chevron\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path d=\"M6 9l6 6 6-6\"></path>\n </svg>\n </button>\n\n @if (isPresetsOpen()) {\n <ul class=\"mapa-datepicker__presets-list\" role=\"listbox\">\n @for (preset of presetList(); track preset.label) {\n <li role=\"option\" [attr.aria-selected]=\"isPresetActive(preset)\">\n <button\n type=\"button\"\n class=\"mapa-datepicker__presets-option\"\n [class.mapa-datepicker__presets-option--active]=\"\n isPresetActive(preset)\n \"\n (click)=\"applyPreset(preset)\"\n >\n {{ preset.label }}\n </button>\n </li>\n }\n </ul>\n }\n </div>\n }\n\n <ngxsmk-datepicker\n [inline]=\"true\"\n [mode]=\"mode()\"\n [value]=\"pickerValue()\"\n [locale]=\"ngxsmkLocale()\"\n [displayFormat]=\"displayFormat()\"\n [theme]=\"'light'\"\n [minDate]=\"minDate()\"\n [maxDate]=\"maxDate()\"\n [disabledDates]=\"disabledDates()\"\n [isInvalidDate]=\"isInvalidDate()\"\n [showRanges]=\"false\"\n [calendars]=\"calendars()\"\n [weekStart]=\"weekStart()\"\n [showCalendarButton]=\"false\"\n [classes]=\"ngxsmkClasses\"\n (valueChange)=\"handlePickerValue($event)\"\n ></ngxsmk-datepicker>\n </div>\n </ng-template>\n\n @if (shouldShowError()) {\n <p class=\"mapa-datepicker__error\">\n <mapa-form-errors\n [control]=\"control\"\n [errors]=\"element.errors\"\n ></mapa-form-errors>\n </p>\n } @else if (element.hint) {\n <p class=\"mapa-datepicker__hint\">{{ element.hint }}</p>\n }\n </div>\n}\n\n<ng-template #calendarIcon>\n <svg\n class=\"mapa-datepicker__icon\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"3\"></rect>\n <path d=\"M3 10h18M8 3v4M16 3v4\"></path>\n </svg>\n</ng-template>\n", styles: [":host{display:inline-block;width:310px;max-width:100%;min-width:0;box-sizing:border-box}:host ::ng-deep .mapa-datepicker{display:flex;flex-direction:column;gap:8px}:host ::ng-deep .mapa-datepicker__label{font-family:var(--mapa-font-heading, \"Asap\", \"Inter\", sans-serif);display:block;font-size:12px;font-style:normal;font-weight:600;line-height:16px;text-transform:uppercase;margin-bottom:16px}:host ::ng-deep .mapa-datepicker .mdc-text-field{padding:0}:host ::ng-deep .mapa-datepicker__origin{display:block;width:100%;min-width:0}:host ::ng-deep .mapa-datepicker__field .mat-mdc-form-field{width:100%;max-width:100%!important}:host ::ng-deep .mapa-datepicker__field .mat-mdc-text-field-wrapper{height:48px;border-radius:var(--mapa-radius-sm, 12px);background-color:var(--mapa-color-surface, #ffffff)}:host ::ng-deep .mapa-datepicker__field .mat-mdc-form-field-flex{height:48px!important}:host ::ng-deep .mapa-datepicker__field .mat-mdc-form-field-icon-suffix{display:flex;align-items:center;gap:4px;margin-right:12px}:host ::ng-deep .mapa-datepicker__field .mdc-text-field--outlined{--mat-form-field-outlined-container-shape: var(--mapa-radius-sm, 12px);--mat-form-field-outlined-outline-color: var( --mapa-color-border, rgba(26, 26, 26, .18) );--mat-form-field-outlined-hover-outline-color: var( --mapa-color-border, rgba(26, 26, 26, .18) );--mat-form-field-outlined-focus-outline-color: var( --mapa-color-accent, #ff560b );--mat-form-field-outlined-outline-width: 1px;--mat-form-field-outlined-focus-outline-width: 1px}:host ::ng-deep .mapa-datepicker__field .mat-mdc-form-field-infix{padding-bottom:12px;--mat-form-field-container-height: 48px}:host ::ng-deep .mapa-datepicker__field .mdc-notched-outline{border-radius:var(--mapa-radius-sm, 12px)}:host ::ng-deep .mapa-datepicker__field .mdc-notched-outline__leading,:host ::ng-deep .mapa-datepicker__field .mdc-notched-outline__notch,:host ::ng-deep .mapa-datepicker__field .mdc-notched-outline__trailing{border-width:1px!important}:host ::ng-deep .mapa-datepicker__field .mat-mdc-form-field-subscript-wrapper{min-height:0}:host ::ng-deep .mapa-datepicker__range{display:flex;align-items:center;justify-content:flex-start;background-color:var(--mapa-color-surface, #ffffff);border:1px solid var(--mapa-color-border, rgba(26, 26, 26, .18));border-radius:var(--mapa-radius-sm, 12px);overflow:hidden;box-sizing:border-box;padding:0 8px 0 16px;min-height:48px;height:48px;width:100%}:host ::ng-deep .mapa-datepicker__range-start,:host ::ng-deep .mapa-datepicker__range-end{display:flex;flex:1 1 0;align-items:center;align-self:stretch;min-width:0}:host ::ng-deep .mapa-datepicker__range-start .mat-mdc-input-element,:host ::ng-deep .mapa-datepicker__range-start .mat-mdc-text-field-wrapper,:host ::ng-deep .mapa-datepicker__range-end .mat-mdc-input-element,:host ::ng-deep .mapa-datepicker__range-end .mat-mdc-text-field-wrapper{width:100%;min-width:0}:host ::ng-deep .mapa-datepicker__range-end{flex-basis:72px}:host ::ng-deep .mapa-datepicker__range .mat-mdc-form-field-icon-suffix{display:flex;flex:none;align-items:center;gap:4px;margin-left:0;padding:unset!important}:host ::ng-deep .mapa-datepicker__range .mat-mdc-form-field-flex{display:flex;align-items:center;min-height:100%;height:48px!important}:host ::ng-deep .mapa-datepicker__range .mat-mdc-text-field-wrapper{padding:0!important;align-items:center!important;display:flex;background:var(--mapa-color-surface, #ffffff);min-height:100%}:host ::ng-deep .mapa-datepicker__range .mdc-notched-outline{display:none}:host ::ng-deep .mapa-datepicker__range .mat-mdc-form-field-infix{padding:0!important;margin-left:0!important;min-height:unset!important;border-top:unset!important;display:flex;align-items:center;height:100%}:host ::ng-deep .mapa-datepicker__range .mat-mdc-input-element{align-self:center;height:100%;line-height:24px;margin:0!important;padding:0 8px 0 0!important;text-align:left;vertical-align:middle}:host ::ng-deep .mapa-datepicker__divider{flex:none;margin:0 8px;color:var(--mapa-color-muted, #555555)}:host ::ng-deep .mapa-datepicker__clear{display:flex;flex:0 0 20px;align-items:center;justify-content:center;width:20px;height:20px;padding:0;border:0;border-radius:50%;background:transparent;color:var(--mapa-color-muted, #555555);font-family:inherit;font-size:16px;line-height:1;cursor:pointer}:host ::ng-deep .mapa-datepicker__clear:hover{background:#1a1a1a14;color:var(--mapa-color-ink, #1a1a1a)}:host ::ng-deep .mapa-datepicker__toggle{display:flex;flex:0 0 24px;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:0;border-radius:50%;background:transparent;color:var(--mapa-color-muted, #555555);cursor:pointer}:host ::ng-deep .mapa-datepicker__toggle:hover:not(:disabled){background:#1a1a1a14;color:var(--mapa-color-ink, #1a1a1a)}:host ::ng-deep .mapa-datepicker__toggle:disabled{cursor:default;opacity:.5}:host ::ng-deep .mapa-datepicker__icon{display:block;pointer-events:none}:host ::ng-deep .mapa-datepicker__error,:host ::ng-deep .mapa-datepicker__hint{margin:8px 0 0;padding-left:4px;font-size:13px;line-height:18px}:host ::ng-deep .mapa-datepicker__error{color:#b54242}:host ::ng-deep .mapa-datepicker__hint{color:var(--mapa-color-muted, #555555)}:host ::ng-deep .mapa-datepicker .mat-mdc-form-field-error-wrapper,:host ::ng-deep .mapa-datepicker .mat-mdc-form-field-hint-wrapper,:host ::ng-deep .mapa-datepicker .mat-mdc-form-field-subscript-wrapper{padding:0!important}:host ::ng-deep .mapa-datepicker--open :host ::ng-deep .mapa-datepicker__toggle{color:var(--mapa-color-accent, #ff560b)}.mapa-datepicker__panel{display:block;max-width:calc(100vw - 32px);overflow-x:auto;padding:8px;border:1px solid var(--mapa-color-border-soft, rgba(26, 26, 26, .08));border-radius:var(--mapa-radius-md, 16px);background:var(--mapa-color-surface, #ffffff);box-shadow:var(--mapa-shadow-panel, 0 18px 40px rgba(26, 26, 26, .08));font-family:var(--mapa-font-body, \"Asap\", \"Roboto\", \"Inter\", sans-serif);box-sizing:border-box}.mapa-datepicker__panel ::ng-deep ngxsmk-datepicker,.mapa-datepicker__panel ::ng-deep .ngxsmk-popover-container,.mapa-datepicker__panel ::ng-deep .ngxsmk-backdrop{--datepicker-primary-color: var(--mapa-color-accent, #ff560b);--datepicker-primary-contrast: var(--mapa-color-surface, #ffffff);--datepicker-background: var(--mapa-color-surface, #ffffff);--datepicker-text-color: var(--mapa-color-ink, #1a1a1a);--datepicker-subtle-text-color: var(--mapa-color-muted, #555555);--datepicker-border-color: var( --mapa-color-border-soft, rgba(26, 26, 26, .08) );--datepicker-hover-background: rgba(255, 86, 11, .08);--datepicker-range-background: rgba(255, 86, 11, .12);--datepicker-radius-sm: 8px;--datepicker-radius-md: var(--mapa-radius-sm, 12px);--datepicker-radius-lg: var(--mapa-radius-md, 16px);--datepicker-border-radius: var(--mapa-radius-md, 16px);--datepicker-spacing-xs: 2px;--datepicker-spacing-sm: 6px;--datepicker-spacing-md: 8px;--datepicker-spacing-lg: 12px;--datepicker-spacing-xl: 12px;--datepicker-spacing-2xl: 16px;--datepicker-font-size-xs: 10px;--datepicker-font-size-sm: 11px;--datepicker-font-size-base: 13px;--datepicker-font-size-lg: 15px;--datepicker-font-family: var( --mapa-font-body, \"Asap\", \"Roboto\", \"Inter\", sans-serif );--ngxsmk-cell-size-desktop: 36px;--ngxsmk-touch-target: 36px;--ngxsmk-space-sm: 6px;--ngxsmk-space-md: 8px;--ngxsmk-font-size-sm: 11px;--datepicker-shadow-sm: none;--datepicker-shadow-md: none;--datepicker-shadow-lg: none;--datepicker-z-index-base: 0;display:block}.mapa-datepicker__panel ::ng-deep .mapa-datepicker__ngxsmk-group{display:none}.mapa-datepicker__panel ::ng-deep .ngxsmk-datepicker-wrapper,.mapa-datepicker__panel ::ng-deep .ngxsmk-datepicker-container{box-shadow:none;border:0;background:transparent}.mapa-datepicker__panel ::ng-deep .ngxsmk-day-number{width:36px;height:36px;min-width:36px;min-height:36px;max-width:36px;max-height:36px}.mapa-datepicker__panel ::ng-deep .ngxsmk-popover-container{min-width:0}.mapa-datepicker__panel ::ng-deep .ngxsmk-calendar-month-multi{min-width:0}.mapa-datepicker__presets{position:relative;z-index:10;margin-bottom:8px}.mapa-datepicker__presets-trigger{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;min-height:36px;padding:0 12px;border:1px solid var(--mapa-color-border, rgba(26, 26, 26, .18));border-radius:var(--mapa-radius-sm, 12px);background:var(--mapa-color-surface, #ffffff);color:var(--mapa-color-ink, #1a1a1a);font-family:inherit;font-size:13px;line-height:18px;text-align:left;cursor:pointer}.mapa-datepicker__presets-trigger:hover,.mapa-datepicker__presets-trigger--open{border-color:var(--mapa-color-accent, #ff560b)}.mapa-datepicker__presets-chevron{flex:none;color:var(--mapa-color-muted, #555555);transition:transform .12s ease}.mapa-datepicker__presets-trigger--open .mapa-datepicker__presets-chevron{transform:rotate(180deg)}.mapa-datepicker__presets-list{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:11;max-height:240px;margin:0;padding:4px;overflow-y:auto;list-style:none;border:1px solid var(--mapa-color-border-soft, rgba(26, 26, 26, .08));border-radius:var(--mapa-radius-sm, 12px);background:var(--mapa-color-surface, #ffffff);box-shadow:var(--mapa-shadow-panel, 0 18px 40px rgba(26, 26, 26, .08));box-sizing:border-box}.mapa-datepicker__presets-option{display:block;width:100%;padding:8px 12px;border:0;border-radius:8px;background:transparent;color:var(--mapa-color-ink, #1a1a1a);font-family:inherit;font-size:13px;line-height:18px;text-align:left;cursor:pointer}.mapa-datepicker__presets-option:hover{background:#1a1a1a0f}.mapa-datepicker__presets-option--active{background:#ff560b1f;color:var(--mapa-color-accent, #ff560b);font-weight:600}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: NgxMaskDirective, selector: "input[mask], textarea[mask]", inputs: ["mask", "specialCharacters", "patterns", "prefix", "suffix", "thousandSeparator", "decimalMarker", "dropSpecialCharacters", "hiddenInput", "showMaskTyped", "placeHolderCharacter", "shownMaskExpression", "clearIfNotMatch", "validation", "separatorLimit", "allowNegativeNumbers", "leadZeroDateTime", "leadZero", "triggerOnMaskChange", "apm", "inputTransformFn", "outputTransformFn", "keepCharacterPositions", "instantPrefix"], outputs: ["maskFilled"], exportAs: ["mask", "ngxMask"] }, { kind: "directive", type: MapaMaskAutofillSyncDirective, selector: "input[mask], textarea[mask]", inputs: ["mapaMaskAutofillSync"], exportAs: ["mapaMaskAutofillSync"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i1$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: NgxsmkDatepickerComponent, selector: "ngxsmk-datepicker", inputs: ["mode", "calendarViewMode", "isInvalidDate", "asyncDateFilter", "showRanges", "showTime", "timeOnly", "timeRangeMode", "showCalendarButton", "minuteInterval", "use24Hour", "secondInterval", "showSeconds", "holidayProvider", "disableHolidays", "disabledDates", "disabledRanges", "recurringPattern", "dateTemplate", "placeholder", "inline", "responsive", "inputId", "name", "autocomplete", "translations", "translationService", "clearLabel", "closeLabel", "prevMonthAriaLabel", "nextMonthAriaLabel", "clearAriaLabel", "closeAriaLabel", "weekStart", "yearRange", "timezone", "showOtherMonths", "hooks", "enableKeyboardShortcuts", "customShortcuts", "autoApplyClose", "allowSameDay", "displayFormat", "allowTyping", "inputMask", "enableNaturalLanguage", "naturalLanguagePreviewTemplate", "calendars", "rangePresetFactory", "showTimezoneSelector", "defaultTimezone", "calendarCount", "calendarLayout", "changeActiveMonthOnSelection", "showWeekNumbers", "weekNumberLabel", "secondaryCalendar", "dayMetadata", "calendarHeaderTemplate", "calendarFooterTemplate", "defaultMonthOffset", "syncScroll", "align", "useNativePicker", "enableHapticFeedback", "mobileModalStyle", "mobileTimePickerStyle", "enablePullToRefresh", "mobileTheme", "enableVoiceInput", "autoDetectMobile", "disableFocusTrap", "appendToBody", "value", "field", "startAt", "locale", "theme", "dateFormatPattern", "animationConfig", "rtl", "classes", "disabledState", "required", "errorState", "userAriaDescribedBy", "minDate", "maxDate", "ranges", "comparisonRange"], outputs: ["asyncDateFilterLoading", "asyncDateFilterError", "naturalLanguageResolved", "invalidRange", "timezoneChange", "valueChange", "action", "validationError"] }, { kind: "component", type: MapaFormErrorsComponent, selector: "mapa-form-errors", inputs: ["control", "errors"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1272
1508
  }
1273
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImport: i0, type: MapaDatepickerRange, decorators: [{
1509
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImport: i0, type: MapaDatepicker, decorators: [{
1274
1510
  type: Component,
1275
- args: [{ selector: "mapa-datepicker-range", changeDetection: ChangeDetectionStrategy.OnPush, imports: [
1276
- CommonModule,
1511
+ args: [{ selector: 'mapa-datepicker, mapa-datepicker-range', standalone: true, imports: [
1512
+ NgTemplateOutlet,
1277
1513
  ReactiveFormsModule,
1278
1514
  NgxMaskDirective,
1279
1515
  MapaMaskAutofillSyncDirective,
1280
- MatDatepickerModule,
1281
1516
  MatFormFieldModule,
1282
- MatIconModule,
1283
1517
  MatInputModule,
1284
- ], providers: [
1285
- provideNgxMask(),
1286
- provideNativeDateAdapter(getMapaDatepickerRangeFormats()),
1287
- ], standalone: true, template: "@if (element.label) {\n <div class=\"mapa-datepicker-range__label\">\n {{ element.label }}\n </div>\n}\n<section class=\"mapa-datepicker-range\" [formGroup]=\"formDisplay\">\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"mapa-datepicker-range__start-date\"\n >\n <input\n matInput\n formControlName=\"startDate\"\n [placeholder]=\"startDatePlaceholder\"\n [mask]=\"dateInputMask\"\n [dropSpecialCharacters]=\"false\"\n [attr.data-date-format]=\"activeDateFormat\"\n />\n </mat-form-field>\n <div class=\"mapa-datepicker-range__divider\">&ndash;</div>\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"mapa-datepicker-range__end-date\"\n >\n <input\n matInput\n formControlName=\"endDate\"\n [placeholder]=\"endDatePlaceholder\"\n [mask]=\"dateInputMask\"\n [dropSpecialCharacters]=\"false\"\n [attr.data-date-format]=\"activeDateFormat\"\n />\n <button\n type=\"button\"\n matSuffix\n aria-label=\"Limpar\"\n class=\"mapa-datepicker-range__clear\"\n (click)=\"cleanDatepicker()\"\n tabindex=\"-1\"\n >\n &times;\n </button>\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-date-range-picker touchUi=\"true\" #picker></mat-date-range-picker>\n </mat-form-field>\n</section>\n<section class=\"mapa--hidden\">\n <mat-form-field [formGroup]=\"formDatepicker\">\n <mat-date-range-input [rangePicker]=\"picker\">\n <input matStartDate formControlName=\"startDate\" />\n <input matEndDate formControlName=\"endDate\" />\n </mat-date-range-input>\n </mat-form-field>\n</section>\n", styles: [":host{display:inline-block;width:310px;max-width:100%;min-width:0;box-sizing:border-box}:host ::ng-deep .mat-mdc-form-field-type-mat-date-range-input .mdc-text-field--outlined{background-color:#fff}:host ::ng-deep .mat-mdc-form-field-type-mat-date-range-input .mat-mdc-text-field-wrapper{min-height:48px!important;height:48px!important}:host ::ng-deep .mat-mdc-form-field-type-mat-date-range-input .mat-mdc-text-field-wrapper.mdc-text-field--outlined{padding-left:unset!important;padding-right:unset!important}:host ::ng-deep .mapa-datepicker-range{display:flex;align-items:center;justify-content:flex-start;background-color:var(--mapa-color-surface, #ffffff);border:1px solid var(--mapa-color-border, rgba(26, 26, 26, .18));border-radius:var(--mapa-radius-sm, 12px);overflow:hidden;box-sizing:border-box;padding:0 0 0 16px;min-height:48px;height:48px;width:100%}:host ::ng-deep .mapa-datepicker-range__label{font-family:var(--mapa-font-heading, \"Asap\", \"Inter\", sans-serif);display:block;font-size:12px;font-style:normal;font-weight:600;line-height:16px;text-transform:uppercase;margin-bottom:16px}:host ::ng-deep .mapa-datepicker-range__start-date,:host ::ng-deep .mapa-datepicker-range__end-date{display:flex;flex:1 1 0;align-items:center;align-self:stretch;min-width:0}:host ::ng-deep .mapa-datepicker-range__start-date .mat-mdc-input-element,:host ::ng-deep .mapa-datepicker-range__start-date .mat-mdc-text-field-wrapper,:host ::ng-deep .mapa-datepicker-range__end-date .mat-mdc-input-element,:host ::ng-deep .mapa-datepicker-range__end-date .mat-mdc-text-field-wrapper{width:100%;min-width:0}:host ::ng-deep .mapa-datepicker-range__end-date{flex-basis:72px}:host ::ng-deep .mapa-datepicker-range__divider{flex:none;margin:0 8px}:host ::ng-deep .mapa-datepicker-range__clear{display:flex;flex:0 0 20px;align-items:center;justify-content:center;width:20px;height:20px;padding:0;border:0;border-radius:50%;background:transparent;color:var(--mapa-color-muted, #555555);font-family:inherit;font-size:16px;line-height:1;cursor:pointer}:host ::ng-deep .mapa-datepicker-range__clear:hover{background:#1a1a1a14;color:var(--mapa-color-ink, #1a1a1a)}:host ::ng-deep .mapa-datepicker-range .mat-mdc-form-field-icon-suffix{display:flex;flex:none;align-items:center;gap:4px;margin-left:0;padding:unset!important}:host ::ng-deep .mapa-datepicker-range .mat-mdc-form-field-icon-suffix .mat-datepicker-toggle{margin:0}:host ::ng-deep .mapa-datepicker-range .mat-mdc-form-field-flex{display:flex;align-items:center;min-height:100%;height:48px!important}:host ::ng-deep .mapa-datepicker-range .mat-mdc-text-field-wrapper{padding:0!important;align-items:center!important;display:flex;background:var(--mapa-color-surface, #ffffff);min-height:100%}:host ::ng-deep .mapa-datepicker-range .mdc-notched-outline{display:none}:host ::ng-deep .mapa-datepicker-range .mat-mdc-form-field-infix{padding:0!important;margin-left:0!important;min-height:unset!important;border-top:unset!important;display:flex;align-items:center;height:100%}:host ::ng-deep .mapa-datepicker-range .mat-mdc-input-element{align-self:center;height:100%;line-height:24px;margin:0!important;padding:0 8px 0 0!important;text-align:left;vertical-align:middle}:host ::ng-deep .mapa-datepicker-range .mat-mdc-form-field-error-wrapper,:host ::ng-deep .mapa-datepicker-range .mat-mdc-form-field-hint-wrapper,:host ::ng-deep .mapa-datepicker-range .mat-mdc-form-field-subscript-wrapper{padding:0!important}:host ::ng-deep .mapa--hidden{display:none}\n"] }]
1288
- }], ctorParameters: () => [{ type: MapaI18nService }, { type: i0.ChangeDetectorRef }], propDecorators: { formGroup: [{
1289
- type: Input
1518
+ CdkConnectedOverlay,
1519
+ CdkOverlayOrigin,
1520
+ NgxsmkDatepickerComponent,
1521
+ MapaFormErrorsComponent,
1522
+ ], providers: [provideNgxMask()], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (element && formGroup) {\n <div\n class=\"mapa-datepicker\"\n [class.mapa-datepicker--open]=\"isOpen()\"\n [class.mapa-datepicker--disabled]=\"isDisabled()\"\n >\n @if (element.label) {\n <label class=\"mapa-datepicker__label\" [attr.for]=\"element.key || null\">\n {{ element.label }}\n </label>\n }\n\n <!-- A origem do overlay precisa ficar fora do @if: refer\u00EAncias de template\n n\u00E3o atravessam blocos de controle de fluxo. -->\n <div\n class=\"mapa-datepicker__origin\"\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n [formGroup]=\"formDisplay\"\n >\n @if (mode() === \"range\") {\n <div class=\"mapa-datepicker__range\">\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"mapa-datepicker__range-start\"\n >\n <input\n matInput\n formControlName=\"startDate\"\n [attr.id]=\"element.key || null\"\n [placeholder]=\"startDatePlaceholder\"\n [mask]=\"mask()\"\n [dropSpecialCharacters]=\"false\"\n [readonly]=\"isReadonly()\"\n />\n </mat-form-field>\n\n <span class=\"mapa-datepicker__divider\">&ndash;</span>\n\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"mapa-datepicker__range-end\"\n >\n <input\n matInput\n formControlName=\"endDate\"\n [placeholder]=\"endDatePlaceholder\"\n [mask]=\"mask()\"\n [dropSpecialCharacters]=\"false\"\n [readonly]=\"isReadonly()\"\n />\n\n @if (showClear()) {\n <button\n matSuffix\n type=\"button\"\n class=\"mapa-datepicker__clear\"\n aria-label=\"Limpar\"\n tabindex=\"-1\"\n (click)=\"clear($event)\"\n >\n &times;\n </button>\n }\n\n <button\n #toggleButton\n matSuffix\n type=\"button\"\n class=\"mapa-datepicker__toggle\"\n [disabled]=\"isDisabled() || isReadonly()\"\n [attr.aria-expanded]=\"isOpen()\"\n aria-haspopup=\"dialog\"\n aria-label=\"Abrir calend\u00E1rio\"\n (click)=\"toggleCalendar()\"\n >\n <ng-container [ngTemplateOutlet]=\"calendarIcon\"></ng-container>\n </button>\n </mat-form-field>\n </div>\n } @else {\n <div class=\"mapa-datepicker__field\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n @if (mode() === \"multiple\") {\n <input\n matInput\n [attr.id]=\"element.key || null\"\n [value]=\"selectedLabel()\"\n [placeholder]=\"singlePlaceholder()\"\n readonly\n (click)=\"toggleCalendar()\"\n />\n } @else {\n <input\n matInput\n formControlName=\"startDate\"\n [attr.id]=\"element.key || null\"\n [placeholder]=\"singlePlaceholder()\"\n [mask]=\"mask()\"\n [dropSpecialCharacters]=\"false\"\n [readonly]=\"isReadonly()\"\n />\n }\n\n @if (showClear()) {\n <button\n matSuffix\n type=\"button\"\n class=\"mapa-datepicker__clear\"\n aria-label=\"Limpar\"\n tabindex=\"-1\"\n (click)=\"clear($event)\"\n >\n &times;\n </button>\n }\n\n <button\n #toggleButton\n matSuffix\n type=\"button\"\n class=\"mapa-datepicker__toggle\"\n [disabled]=\"isDisabled() || isReadonly()\"\n [attr.aria-expanded]=\"isOpen()\"\n aria-haspopup=\"dialog\"\n aria-label=\"Abrir calend\u00E1rio\"\n (click)=\"toggleCalendar()\"\n >\n <ng-container [ngTemplateOutlet]=\"calendarIcon\"></ng-container>\n </button>\n </mat-form-field>\n </div>\n }\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayPush]=\"true\"\n cdkConnectedOverlayPanelClass=\"mapa-datepicker__overlay-pane\"\n (overlayOutsideClick)=\"handleOverlayOutsideClick($event)\"\n >\n <div class=\"mapa-datepicker__panel\" role=\"dialog\">\n @if (hasPresets()) {\n <div class=\"mapa-datepicker__presets\">\n <button\n type=\"button\"\n class=\"mapa-datepicker__presets-trigger\"\n [class.mapa-datepicker__presets-trigger--open]=\"isPresetsOpen()\"\n [attr.aria-expanded]=\"isPresetsOpen()\"\n aria-haspopup=\"listbox\"\n (click)=\"togglePresets()\"\n >\n <span>{{ presetsTriggerLabel() }}</span>\n <svg\n class=\"mapa-datepicker__presets-chevron\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path d=\"M6 9l6 6 6-6\"></path>\n </svg>\n </button>\n\n @if (isPresetsOpen()) {\n <ul class=\"mapa-datepicker__presets-list\" role=\"listbox\">\n @for (preset of presetList(); track preset.label) {\n <li role=\"option\" [attr.aria-selected]=\"isPresetActive(preset)\">\n <button\n type=\"button\"\n class=\"mapa-datepicker__presets-option\"\n [class.mapa-datepicker__presets-option--active]=\"\n isPresetActive(preset)\n \"\n (click)=\"applyPreset(preset)\"\n >\n {{ preset.label }}\n </button>\n </li>\n }\n </ul>\n }\n </div>\n }\n\n <ngxsmk-datepicker\n [inline]=\"true\"\n [mode]=\"mode()\"\n [value]=\"pickerValue()\"\n [locale]=\"ngxsmkLocale()\"\n [displayFormat]=\"displayFormat()\"\n [theme]=\"'light'\"\n [minDate]=\"minDate()\"\n [maxDate]=\"maxDate()\"\n [disabledDates]=\"disabledDates()\"\n [isInvalidDate]=\"isInvalidDate()\"\n [showRanges]=\"false\"\n [calendars]=\"calendars()\"\n [weekStart]=\"weekStart()\"\n [showCalendarButton]=\"false\"\n [classes]=\"ngxsmkClasses\"\n (valueChange)=\"handlePickerValue($event)\"\n ></ngxsmk-datepicker>\n </div>\n </ng-template>\n\n @if (shouldShowError()) {\n <p class=\"mapa-datepicker__error\">\n <mapa-form-errors\n [control]=\"control\"\n [errors]=\"element.errors\"\n ></mapa-form-errors>\n </p>\n } @else if (element.hint) {\n <p class=\"mapa-datepicker__hint\">{{ element.hint }}</p>\n }\n </div>\n}\n\n<ng-template #calendarIcon>\n <svg\n class=\"mapa-datepicker__icon\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"3\"></rect>\n <path d=\"M3 10h18M8 3v4M16 3v4\"></path>\n </svg>\n</ng-template>\n", styles: [":host{display:inline-block;width:310px;max-width:100%;min-width:0;box-sizing:border-box}:host ::ng-deep .mapa-datepicker{display:flex;flex-direction:column;gap:8px}:host ::ng-deep .mapa-datepicker__label{font-family:var(--mapa-font-heading, \"Asap\", \"Inter\", sans-serif);display:block;font-size:12px;font-style:normal;font-weight:600;line-height:16px;text-transform:uppercase;margin-bottom:16px}:host ::ng-deep .mapa-datepicker .mdc-text-field{padding:0}:host ::ng-deep .mapa-datepicker__origin{display:block;width:100%;min-width:0}:host ::ng-deep .mapa-datepicker__field .mat-mdc-form-field{width:100%;max-width:100%!important}:host ::ng-deep .mapa-datepicker__field .mat-mdc-text-field-wrapper{height:48px;border-radius:var(--mapa-radius-sm, 12px);background-color:var(--mapa-color-surface, #ffffff)}:host ::ng-deep .mapa-datepicker__field .mat-mdc-form-field-flex{height:48px!important}:host ::ng-deep .mapa-datepicker__field .mat-mdc-form-field-icon-suffix{display:flex;align-items:center;gap:4px;margin-right:12px}:host ::ng-deep .mapa-datepicker__field .mdc-text-field--outlined{--mat-form-field-outlined-container-shape: var(--mapa-radius-sm, 12px);--mat-form-field-outlined-outline-color: var( --mapa-color-border, rgba(26, 26, 26, .18) );--mat-form-field-outlined-hover-outline-color: var( --mapa-color-border, rgba(26, 26, 26, .18) );--mat-form-field-outlined-focus-outline-color: var( --mapa-color-accent, #ff560b );--mat-form-field-outlined-outline-width: 1px;--mat-form-field-outlined-focus-outline-width: 1px}:host ::ng-deep .mapa-datepicker__field .mat-mdc-form-field-infix{padding-bottom:12px;--mat-form-field-container-height: 48px}:host ::ng-deep .mapa-datepicker__field .mdc-notched-outline{border-radius:var(--mapa-radius-sm, 12px)}:host ::ng-deep .mapa-datepicker__field .mdc-notched-outline__leading,:host ::ng-deep .mapa-datepicker__field .mdc-notched-outline__notch,:host ::ng-deep .mapa-datepicker__field .mdc-notched-outline__trailing{border-width:1px!important}:host ::ng-deep .mapa-datepicker__field .mat-mdc-form-field-subscript-wrapper{min-height:0}:host ::ng-deep .mapa-datepicker__range{display:flex;align-items:center;justify-content:flex-start;background-color:var(--mapa-color-surface, #ffffff);border:1px solid var(--mapa-color-border, rgba(26, 26, 26, .18));border-radius:var(--mapa-radius-sm, 12px);overflow:hidden;box-sizing:border-box;padding:0 8px 0 16px;min-height:48px;height:48px;width:100%}:host ::ng-deep .mapa-datepicker__range-start,:host ::ng-deep .mapa-datepicker__range-end{display:flex;flex:1 1 0;align-items:center;align-self:stretch;min-width:0}:host ::ng-deep .mapa-datepicker__range-start .mat-mdc-input-element,:host ::ng-deep .mapa-datepicker__range-start .mat-mdc-text-field-wrapper,:host ::ng-deep .mapa-datepicker__range-end .mat-mdc-input-element,:host ::ng-deep .mapa-datepicker__range-end .mat-mdc-text-field-wrapper{width:100%;min-width:0}:host ::ng-deep .mapa-datepicker__range-end{flex-basis:72px}:host ::ng-deep .mapa-datepicker__range .mat-mdc-form-field-icon-suffix{display:flex;flex:none;align-items:center;gap:4px;margin-left:0;padding:unset!important}:host ::ng-deep .mapa-datepicker__range .mat-mdc-form-field-flex{display:flex;align-items:center;min-height:100%;height:48px!important}:host ::ng-deep .mapa-datepicker__range .mat-mdc-text-field-wrapper{padding:0!important;align-items:center!important;display:flex;background:var(--mapa-color-surface, #ffffff);min-height:100%}:host ::ng-deep .mapa-datepicker__range .mdc-notched-outline{display:none}:host ::ng-deep .mapa-datepicker__range .mat-mdc-form-field-infix{padding:0!important;margin-left:0!important;min-height:unset!important;border-top:unset!important;display:flex;align-items:center;height:100%}:host ::ng-deep .mapa-datepicker__range .mat-mdc-input-element{align-self:center;height:100%;line-height:24px;margin:0!important;padding:0 8px 0 0!important;text-align:left;vertical-align:middle}:host ::ng-deep .mapa-datepicker__divider{flex:none;margin:0 8px;color:var(--mapa-color-muted, #555555)}:host ::ng-deep .mapa-datepicker__clear{display:flex;flex:0 0 20px;align-items:center;justify-content:center;width:20px;height:20px;padding:0;border:0;border-radius:50%;background:transparent;color:var(--mapa-color-muted, #555555);font-family:inherit;font-size:16px;line-height:1;cursor:pointer}:host ::ng-deep .mapa-datepicker__clear:hover{background:#1a1a1a14;color:var(--mapa-color-ink, #1a1a1a)}:host ::ng-deep .mapa-datepicker__toggle{display:flex;flex:0 0 24px;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:0;border-radius:50%;background:transparent;color:var(--mapa-color-muted, #555555);cursor:pointer}:host ::ng-deep .mapa-datepicker__toggle:hover:not(:disabled){background:#1a1a1a14;color:var(--mapa-color-ink, #1a1a1a)}:host ::ng-deep .mapa-datepicker__toggle:disabled{cursor:default;opacity:.5}:host ::ng-deep .mapa-datepicker__icon{display:block;pointer-events:none}:host ::ng-deep .mapa-datepicker__error,:host ::ng-deep .mapa-datepicker__hint{margin:8px 0 0;padding-left:4px;font-size:13px;line-height:18px}:host ::ng-deep .mapa-datepicker__error{color:#b54242}:host ::ng-deep .mapa-datepicker__hint{color:var(--mapa-color-muted, #555555)}:host ::ng-deep .mapa-datepicker .mat-mdc-form-field-error-wrapper,:host ::ng-deep .mapa-datepicker .mat-mdc-form-field-hint-wrapper,:host ::ng-deep .mapa-datepicker .mat-mdc-form-field-subscript-wrapper{padding:0!important}:host ::ng-deep .mapa-datepicker--open :host ::ng-deep .mapa-datepicker__toggle{color:var(--mapa-color-accent, #ff560b)}.mapa-datepicker__panel{display:block;max-width:calc(100vw - 32px);overflow-x:auto;padding:8px;border:1px solid var(--mapa-color-border-soft, rgba(26, 26, 26, .08));border-radius:var(--mapa-radius-md, 16px);background:var(--mapa-color-surface, #ffffff);box-shadow:var(--mapa-shadow-panel, 0 18px 40px rgba(26, 26, 26, .08));font-family:var(--mapa-font-body, \"Asap\", \"Roboto\", \"Inter\", sans-serif);box-sizing:border-box}.mapa-datepicker__panel ::ng-deep ngxsmk-datepicker,.mapa-datepicker__panel ::ng-deep .ngxsmk-popover-container,.mapa-datepicker__panel ::ng-deep .ngxsmk-backdrop{--datepicker-primary-color: var(--mapa-color-accent, #ff560b);--datepicker-primary-contrast: var(--mapa-color-surface, #ffffff);--datepicker-background: var(--mapa-color-surface, #ffffff);--datepicker-text-color: var(--mapa-color-ink, #1a1a1a);--datepicker-subtle-text-color: var(--mapa-color-muted, #555555);--datepicker-border-color: var( --mapa-color-border-soft, rgba(26, 26, 26, .08) );--datepicker-hover-background: rgba(255, 86, 11, .08);--datepicker-range-background: rgba(255, 86, 11, .12);--datepicker-radius-sm: 8px;--datepicker-radius-md: var(--mapa-radius-sm, 12px);--datepicker-radius-lg: var(--mapa-radius-md, 16px);--datepicker-border-radius: var(--mapa-radius-md, 16px);--datepicker-spacing-xs: 2px;--datepicker-spacing-sm: 6px;--datepicker-spacing-md: 8px;--datepicker-spacing-lg: 12px;--datepicker-spacing-xl: 12px;--datepicker-spacing-2xl: 16px;--datepicker-font-size-xs: 10px;--datepicker-font-size-sm: 11px;--datepicker-font-size-base: 13px;--datepicker-font-size-lg: 15px;--datepicker-font-family: var( --mapa-font-body, \"Asap\", \"Roboto\", \"Inter\", sans-serif );--ngxsmk-cell-size-desktop: 36px;--ngxsmk-touch-target: 36px;--ngxsmk-space-sm: 6px;--ngxsmk-space-md: 8px;--ngxsmk-font-size-sm: 11px;--datepicker-shadow-sm: none;--datepicker-shadow-md: none;--datepicker-shadow-lg: none;--datepicker-z-index-base: 0;display:block}.mapa-datepicker__panel ::ng-deep .mapa-datepicker__ngxsmk-group{display:none}.mapa-datepicker__panel ::ng-deep .ngxsmk-datepicker-wrapper,.mapa-datepicker__panel ::ng-deep .ngxsmk-datepicker-container{box-shadow:none;border:0;background:transparent}.mapa-datepicker__panel ::ng-deep .ngxsmk-day-number{width:36px;height:36px;min-width:36px;min-height:36px;max-width:36px;max-height:36px}.mapa-datepicker__panel ::ng-deep .ngxsmk-popover-container{min-width:0}.mapa-datepicker__panel ::ng-deep .ngxsmk-calendar-month-multi{min-width:0}.mapa-datepicker__presets{position:relative;z-index:10;margin-bottom:8px}.mapa-datepicker__presets-trigger{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;min-height:36px;padding:0 12px;border:1px solid var(--mapa-color-border, rgba(26, 26, 26, .18));border-radius:var(--mapa-radius-sm, 12px);background:var(--mapa-color-surface, #ffffff);color:var(--mapa-color-ink, #1a1a1a);font-family:inherit;font-size:13px;line-height:18px;text-align:left;cursor:pointer}.mapa-datepicker__presets-trigger:hover,.mapa-datepicker__presets-trigger--open{border-color:var(--mapa-color-accent, #ff560b)}.mapa-datepicker__presets-chevron{flex:none;color:var(--mapa-color-muted, #555555);transition:transform .12s ease}.mapa-datepicker__presets-trigger--open .mapa-datepicker__presets-chevron{transform:rotate(180deg)}.mapa-datepicker__presets-list{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:11;max-height:240px;margin:0;padding:4px;overflow-y:auto;list-style:none;border:1px solid var(--mapa-color-border-soft, rgba(26, 26, 26, .08));border-radius:var(--mapa-radius-sm, 12px);background:var(--mapa-color-surface, #ffffff);box-shadow:var(--mapa-shadow-panel, 0 18px 40px rgba(26, 26, 26, .08));box-sizing:border-box}.mapa-datepicker__presets-option{display:block;width:100%;padding:8px 12px;border:0;border-radius:8px;background:transparent;color:var(--mapa-color-ink, #1a1a1a);font-family:inherit;font-size:13px;line-height:18px;text-align:left;cursor:pointer}.mapa-datepicker__presets-option:hover{background:#1a1a1a0f}.mapa-datepicker__presets-option--active{background:#ff560b1f;color:var(--mapa-color-accent, #ff560b);font-weight:600}\n"] }]
1523
+ }], propDecorators: { formGroup: [{
1524
+ type: Input,
1525
+ args: [{ required: true }]
1290
1526
  }], element: [{
1291
- type: Input
1527
+ type: Input,
1528
+ args: [{ required: true }]
1529
+ }], openedChange: [{
1530
+ type: Output
1531
+ }], toggleButton: [{
1532
+ type: ViewChild,
1533
+ args: ['toggleButton']
1534
+ }], picker: [{
1535
+ type: ViewChild,
1536
+ args: [NgxsmkDatepickerComponent]
1537
+ }], handleEscape: [{
1538
+ type: HostListener,
1539
+ args: ['document:keydown.escape']
1292
1540
  }] } });
1293
1541
 
1294
1542
  /*
1295
- * Public API Surface of mapa-library-ui datepicker-range
1543
+ * Public API Surface of mapa-library-ui datepicker
1296
1544
  */
1297
1545
 
1298
1546
  function sanitizeHtmlContent(sanitizer, value) {
@@ -1305,7 +1553,7 @@ class HtmlSanitizerService {
1305
1553
  sanitize(value) {
1306
1554
  return sanitizeHtmlContent(this.sanitizer, value);
1307
1555
  }
1308
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.21", ngImport: i0, type: HtmlSanitizerService, deps: [{ token: i1$1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Injectable }); }
1556
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.21", ngImport: i0, type: HtmlSanitizerService, deps: [{ token: i1$2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Injectable }); }
1309
1557
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.21", ngImport: i0, type: HtmlSanitizerService, providedIn: "root" }); }
1310
1558
  }
1311
1559
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImport: i0, type: HtmlSanitizerService, decorators: [{
@@ -1313,7 +1561,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImpo
1313
1561
  args: [{
1314
1562
  providedIn: "root",
1315
1563
  }]
1316
- }], ctorParameters: () => [{ type: i1$1.DomSanitizer }] });
1564
+ }], ctorParameters: () => [{ type: i1$2.DomSanitizer }] });
1317
1565
 
1318
1566
  class SafeHtmlPipe {
1319
1567
  constructor(htmlSanitizer) {
@@ -1739,7 +1987,7 @@ class MapaFormComponent {
1739
1987
  element.openedChange?.emit(event);
1740
1988
  }
1741
1989
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.21", ngImport: i0, type: MapaFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1742
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.21", type: MapaFormComponent, isStandalone: true, selector: "mapa-form", inputs: { formGroup: "formGroup", elements: "elements" }, outputs: { emitter: "emitter" }, ngImport: i0, template: "<section class=\"mapa-form\">\n @for (element of elements; track element.key) {\n <div class=\"mapa-form__element\">\n <div class=\"mapa-form__element--type\">\n @switch (element.controlType) {\n @case (\"input\") {\n <mapa-input\n [formControl]=\"getFormControl(element)\"\n [element]=\"element\"\n (suffix)=\"emitSuffix(element)\"\n ></mapa-input>\n }\n @case (\"dropdown\") {\n <mapa-dropdown\n [formControl]=\"getFormControl(element)\"\n [element]=\"element\"\n (openedChange)=\"triggerOpenedChange(element, $event)\"\n ></mapa-dropdown>\n }\n @case (\"dropdown-tree\") {\n <mapa-dropdown-tree\n [formGroup]=\"formGroup\"\n [element]=\"element\"\n ></mapa-dropdown-tree>\n }\n @case (\"datepicker\") {\n <mapa-datepicker\n [formGroup]=\"$any(formGroup)\"\n [element]=\"$any(element)\"\n ></mapa-datepicker>\n }\n @case (\"datepicker-range\") {\n <mapa-datepicker-range\n [formGroup]=\"$any(formGroup)\"\n [element]=\"$any(element)\"\n ></mapa-datepicker-range>\n }\n @case (\"radio-button\") {\n <mapa-radio-button\n [formControl]=\"getFormControl(element)\"\n [element]=\"element\"\n (optionSelected)=\"onOptionSelected($event)\"\n ></mapa-radio-button>\n }\n @case (\"slide-toggle\") {\n <mapa-slide-toggle\n [formControl]=\"getFormControl(element)\"\n [element]=\"element\"\n ></mapa-slide-toggle>\n }\n @case (\"textarea\") {\n <mapa-textarea\n [formControl]=\"getFormControl(element)\"\n [element]=\"element\"\n ></mapa-textarea>\n }\n }\n </div>\n </div>\n }\n</section>\n", styles: [":host ::ng-deep .mapa-form{display:flex;flex-direction:column;margin-top:40px;gap:24px;width:100%}:host ::ng-deep .mapa-form__element{width:100%;min-width:0}:host ::ng-deep .mapa-form__element--type{width:100%;min-width:0}:host ::ng-deep .mapa-form mapa-textarea .mat-mdc-form-field{width:100%;max-width:100%!important}:host ::ng-deep .mapa-form--inline{display:flex;flex-direction:row;align-items:baseline}:host ::ng-deep .mapa-form--action{margin-left:24px}:host ::ng-deep .mapa-form--action button{white-space:nowrap}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MapaDatepicker, selector: "mapa-datepicker", inputs: ["formGroup", "element"] }, { kind: "component", type: MapaDatepickerRange, selector: "mapa-datepicker-range", inputs: ["formGroup", "element"] }, { kind: "component", type: MapaInputComponent, selector: "mapa-input", inputs: ["formControl", "element", "type"], outputs: ["suffix"] }, { kind: "component", type: MapaDropdownComponent, selector: "mapa-dropdown", inputs: ["element", "formControl", "formControlSearch", "border"], outputs: ["openedChange"] }, { kind: "component", type: MapaDropdownTreeComponent, selector: "mapa-dropdown-tree", inputs: ["formGroup", "element"], outputs: ["openedChange"] }, { kind: "component", type: RadioButtonComponent, selector: "mapa-radio-button", inputs: ["formControl", "element"], outputs: ["optionSelected"] }, { kind: "component", type: SlideToggleComponent, selector: "mapa-slide-toggle", inputs: ["formControl", "element"], outputs: ["optionSelected"] }, { kind: "component", type: MapaTextareaComponent, selector: "mapa-textarea", inputs: ["formControl", "element"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1990
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.21", type: MapaFormComponent, isStandalone: true, selector: "mapa-form", inputs: { formGroup: "formGroup", elements: "elements" }, outputs: { emitter: "emitter" }, ngImport: i0, template: "<section class=\"mapa-form\">\n @for (element of elements; track element.key) {\n <div class=\"mapa-form__element\">\n <div class=\"mapa-form__element--type\">\n @switch (element.controlType) {\n @case (\"input\") {\n <mapa-input\n [formControl]=\"getFormControl(element)\"\n [element]=\"element\"\n (suffix)=\"emitSuffix(element)\"\n ></mapa-input>\n }\n @case (\"dropdown\") {\n <mapa-dropdown\n [formControl]=\"getFormControl(element)\"\n [element]=\"element\"\n (openedChange)=\"triggerOpenedChange(element, $event)\"\n ></mapa-dropdown>\n }\n @case (\"dropdown-tree\") {\n <mapa-dropdown-tree\n [formGroup]=\"formGroup\"\n [element]=\"element\"\n ></mapa-dropdown-tree>\n }\n @case (\"datepicker\") {\n <mapa-datepicker\n [formGroup]=\"$any(formGroup)\"\n [element]=\"$any(element)\"\n ></mapa-datepicker>\n }\n @case (\"radio-button\") {\n <mapa-radio-button\n [formControl]=\"getFormControl(element)\"\n [element]=\"element\"\n (optionSelected)=\"onOptionSelected($event)\"\n ></mapa-radio-button>\n }\n @case (\"slide-toggle\") {\n <mapa-slide-toggle\n [formControl]=\"getFormControl(element)\"\n [element]=\"element\"\n ></mapa-slide-toggle>\n }\n @case (\"textarea\") {\n <mapa-textarea\n [formControl]=\"getFormControl(element)\"\n [element]=\"element\"\n ></mapa-textarea>\n }\n }\n </div>\n </div>\n }\n</section>\n", styles: [":host ::ng-deep .mapa-form{display:flex;flex-direction:column;margin-top:40px;gap:24px;width:100%}:host ::ng-deep .mapa-form__element{width:100%;min-width:0}:host ::ng-deep .mapa-form__element--type{width:100%;min-width:0}:host ::ng-deep .mapa-form mapa-textarea .mat-mdc-form-field{width:100%;max-width:100%!important}:host ::ng-deep .mapa-form--inline{display:flex;flex-direction:row;align-items:baseline}:host ::ng-deep .mapa-form--action{margin-left:24px}:host ::ng-deep .mapa-form--action button{white-space:nowrap}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MapaDatepicker, selector: "mapa-datepicker, mapa-datepicker-range", inputs: ["formGroup", "element"], outputs: ["openedChange"] }, { kind: "component", type: MapaInputComponent, selector: "mapa-input", inputs: ["formControl", "element", "type"], outputs: ["suffix"] }, { kind: "component", type: MapaDropdownComponent, selector: "mapa-dropdown", inputs: ["element", "formControl", "formControlSearch", "border"], outputs: ["openedChange"] }, { kind: "component", type: MapaDropdownTreeComponent, selector: "mapa-dropdown-tree", inputs: ["formGroup", "element"], outputs: ["openedChange"] }, { kind: "component", type: RadioButtonComponent, selector: "mapa-radio-button", inputs: ["formControl", "element"], outputs: ["optionSelected"] }, { kind: "component", type: SlideToggleComponent, selector: "mapa-slide-toggle", inputs: ["formControl", "element"], outputs: ["optionSelected"] }, { kind: "component", type: MapaTextareaComponent, selector: "mapa-textarea", inputs: ["formControl", "element"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1743
1991
  }
1744
1992
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImport: i0, type: MapaFormComponent, decorators: [{
1745
1993
  type: Component,
@@ -1747,14 +1995,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImpo
1747
1995
  CommonModule,
1748
1996
  ReactiveFormsModule,
1749
1997
  MapaDatepicker,
1750
- MapaDatepickerRange,
1751
1998
  MapaInputComponent,
1752
1999
  MapaDropdownComponent,
1753
2000
  MapaDropdownTreeComponent,
1754
2001
  RadioButtonComponent,
1755
2002
  SlideToggleComponent,
1756
2003
  MapaTextareaComponent,
1757
- ], standalone: true, template: "<section class=\"mapa-form\">\n @for (element of elements; track element.key) {\n <div class=\"mapa-form__element\">\n <div class=\"mapa-form__element--type\">\n @switch (element.controlType) {\n @case (\"input\") {\n <mapa-input\n [formControl]=\"getFormControl(element)\"\n [element]=\"element\"\n (suffix)=\"emitSuffix(element)\"\n ></mapa-input>\n }\n @case (\"dropdown\") {\n <mapa-dropdown\n [formControl]=\"getFormControl(element)\"\n [element]=\"element\"\n (openedChange)=\"triggerOpenedChange(element, $event)\"\n ></mapa-dropdown>\n }\n @case (\"dropdown-tree\") {\n <mapa-dropdown-tree\n [formGroup]=\"formGroup\"\n [element]=\"element\"\n ></mapa-dropdown-tree>\n }\n @case (\"datepicker\") {\n <mapa-datepicker\n [formGroup]=\"$any(formGroup)\"\n [element]=\"$any(element)\"\n ></mapa-datepicker>\n }\n @case (\"datepicker-range\") {\n <mapa-datepicker-range\n [formGroup]=\"$any(formGroup)\"\n [element]=\"$any(element)\"\n ></mapa-datepicker-range>\n }\n @case (\"radio-button\") {\n <mapa-radio-button\n [formControl]=\"getFormControl(element)\"\n [element]=\"element\"\n (optionSelected)=\"onOptionSelected($event)\"\n ></mapa-radio-button>\n }\n @case (\"slide-toggle\") {\n <mapa-slide-toggle\n [formControl]=\"getFormControl(element)\"\n [element]=\"element\"\n ></mapa-slide-toggle>\n }\n @case (\"textarea\") {\n <mapa-textarea\n [formControl]=\"getFormControl(element)\"\n [element]=\"element\"\n ></mapa-textarea>\n }\n }\n </div>\n </div>\n }\n</section>\n", styles: [":host ::ng-deep .mapa-form{display:flex;flex-direction:column;margin-top:40px;gap:24px;width:100%}:host ::ng-deep .mapa-form__element{width:100%;min-width:0}:host ::ng-deep .mapa-form__element--type{width:100%;min-width:0}:host ::ng-deep .mapa-form mapa-textarea .mat-mdc-form-field{width:100%;max-width:100%!important}:host ::ng-deep .mapa-form--inline{display:flex;flex-direction:row;align-items:baseline}:host ::ng-deep .mapa-form--action{margin-left:24px}:host ::ng-deep .mapa-form--action button{white-space:nowrap}\n"] }]
2004
+ ], standalone: true, template: "<section class=\"mapa-form\">\n @for (element of elements; track element.key) {\n <div class=\"mapa-form__element\">\n <div class=\"mapa-form__element--type\">\n @switch (element.controlType) {\n @case (\"input\") {\n <mapa-input\n [formControl]=\"getFormControl(element)\"\n [element]=\"element\"\n (suffix)=\"emitSuffix(element)\"\n ></mapa-input>\n }\n @case (\"dropdown\") {\n <mapa-dropdown\n [formControl]=\"getFormControl(element)\"\n [element]=\"element\"\n (openedChange)=\"triggerOpenedChange(element, $event)\"\n ></mapa-dropdown>\n }\n @case (\"dropdown-tree\") {\n <mapa-dropdown-tree\n [formGroup]=\"formGroup\"\n [element]=\"element\"\n ></mapa-dropdown-tree>\n }\n @case (\"datepicker\") {\n <mapa-datepicker\n [formGroup]=\"$any(formGroup)\"\n [element]=\"$any(element)\"\n ></mapa-datepicker>\n }\n @case (\"radio-button\") {\n <mapa-radio-button\n [formControl]=\"getFormControl(element)\"\n [element]=\"element\"\n (optionSelected)=\"onOptionSelected($event)\"\n ></mapa-radio-button>\n }\n @case (\"slide-toggle\") {\n <mapa-slide-toggle\n [formControl]=\"getFormControl(element)\"\n [element]=\"element\"\n ></mapa-slide-toggle>\n }\n @case (\"textarea\") {\n <mapa-textarea\n [formControl]=\"getFormControl(element)\"\n [element]=\"element\"\n ></mapa-textarea>\n }\n }\n </div>\n </div>\n }\n</section>\n", styles: [":host ::ng-deep .mapa-form{display:flex;flex-direction:column;margin-top:40px;gap:24px;width:100%}:host ::ng-deep .mapa-form__element{width:100%;min-width:0}:host ::ng-deep .mapa-form__element--type{width:100%;min-width:0}:host ::ng-deep .mapa-form mapa-textarea .mat-mdc-form-field{width:100%;max-width:100%!important}:host ::ng-deep .mapa-form--inline{display:flex;flex-direction:row;align-items:baseline}:host ::ng-deep .mapa-form--action{margin-left:24px}:host ::ng-deep .mapa-form--action button{white-space:nowrap}\n"] }]
1758
2005
  }], propDecorators: { formGroup: [{
1759
2006
  type: Input
1760
2007
  }], elements: [{