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.
- package/README.md +2 -3
- package/fesm2022/mapa-library-ui-src-lib-components-capability.mjs +42 -35
- package/fesm2022/mapa-library-ui-src-lib-components-capability.mjs.map +1 -1
- package/fesm2022/mapa-library-ui-src-lib-components-chart.mjs +42 -35
- package/fesm2022/mapa-library-ui-src-lib-components-chart.mjs.map +1 -1
- package/fesm2022/mapa-library-ui-src-lib-components-datepicker.mjs +648 -125
- package/fesm2022/mapa-library-ui-src-lib-components-datepicker.mjs.map +1 -1
- package/fesm2022/mapa-library-ui-src-lib-components-dropdown-tree.mjs +42 -35
- package/fesm2022/mapa-library-ui-src-lib-components-dropdown-tree.mjs.map +1 -1
- package/fesm2022/mapa-library-ui-src-lib-components-dropdown.mjs +42 -35
- package/fesm2022/mapa-library-ui-src-lib-components-dropdown.mjs.map +1 -1
- package/fesm2022/mapa-library-ui-src-lib-components-filters.mjs +42 -35
- package/fesm2022/mapa-library-ui-src-lib-components-filters.mjs.map +1 -1
- package/fesm2022/mapa-library-ui-src-lib-components-form.mjs +569 -322
- package/fesm2022/mapa-library-ui-src-lib-components-form.mjs.map +1 -1
- package/fesm2022/mapa-library-ui-src-lib-components-input.mjs +42 -35
- package/fesm2022/mapa-library-ui-src-lib-components-input.mjs.map +1 -1
- package/fesm2022/mapa-library-ui-src-lib-components-scale-parameterization.mjs +42 -35
- package/fesm2022/mapa-library-ui-src-lib-components-scale-parameterization.mjs.map +1 -1
- package/fesm2022/mapa-library-ui-src-lib-components-scale.mjs +42 -35
- package/fesm2022/mapa-library-ui-src-lib-components-scale.mjs.map +1 -1
- package/fesm2022/mapa-library-ui-src-lib-components-table.mjs +522 -581
- package/fesm2022/mapa-library-ui-src-lib-components-table.mjs.map +1 -1
- package/fesm2022/mapa-library-ui-src-lib-components-textarea.mjs +42 -35
- package/fesm2022/mapa-library-ui-src-lib-components-textarea.mjs.map +1 -1
- package/fesm2022/mapa-library-ui-src-lib-components-warning.mjs +42 -35
- package/fesm2022/mapa-library-ui-src-lib-components-warning.mjs.map +1 -1
- package/fesm2022/mapa-library-ui-src-lib-core-utils.mjs +1 -4
- package/fesm2022/mapa-library-ui-src-lib-core-utils.mjs.map +1 -1
- package/fesm2022/mapa-library-ui.mjs +1272 -1018
- package/fesm2022/mapa-library-ui.mjs.map +1 -1
- package/index.d.ts +350 -187
- package/mapa-library-ui-2.0.0.tgz +0 -0
- package/package.json +3 -10
- package/src/lib/components/datepicker/index.d.ts +165 -27
- package/src/lib/components/group-report/index.d.ts +6 -1
- package/src/lib/components/menu/index.d.ts +3 -1
- package/src/lib/components/report-item/index.d.ts +3 -1
- package/src/lib/components/table/index.d.ts +153 -100
- package/src/lib/core/utils/index.d.ts +1 -2
- package/fesm2022/mapa-library-ui-src-lib-components-datepicker-range.mjs +0 -733
- package/fesm2022/mapa-library-ui-src-lib-components-datepicker-range.mjs.map +0 -1
- package/mapa-library-ui-1.7.3.tgz +0 -0
- 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,
|
|
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
|
|
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
|
|
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
|
|
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(
|
|
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
|
|
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 ?
|
|
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:
|
|
79
|
+
selectAll: 'Selecionar todos',
|
|
80
|
+
retry: 'Tentar novamente',
|
|
82
81
|
},
|
|
83
82
|
filters: {
|
|
84
|
-
clear:
|
|
85
|
-
submit:
|
|
83
|
+
clear: 'Limpar filtros',
|
|
84
|
+
submit: 'Filtrar',
|
|
86
85
|
},
|
|
87
86
|
datepicker: {
|
|
88
|
-
startDatePlaceholder:
|
|
89
|
-
endDatePlaceholder:
|
|
87
|
+
startDatePlaceholder: 'Data inicial',
|
|
88
|
+
endDatePlaceholder: 'Data final',
|
|
90
89
|
},
|
|
91
90
|
capability: {
|
|
92
|
-
groupAverageTitle:
|
|
93
|
-
individualAverageTitle:
|
|
94
|
-
conceptTitle:
|
|
95
|
-
resultTitle:
|
|
96
|
-
positiveIndicatorsTitle:
|
|
97
|
-
negativeIndicatorsTitle:
|
|
98
|
-
riskIndicatorsTitle:
|
|
99
|
-
precipitationRiskTitle:
|
|
100
|
-
negligenceRiskTitle:
|
|
101
|
-
negativeDirectionLabel:
|
|
102
|
-
positiveDirectionLabel:
|
|
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:
|
|
106
|
-
nextPage:
|
|
107
|
-
previousPage:
|
|
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:
|
|
113
|
-
expirationLimitTitle:
|
|
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:
|
|
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:
|
|
121
|
-
cpf:
|
|
122
|
-
email:
|
|
123
|
-
max: (context) => `O valor máximo permitido é ${context?.max ??
|
|
124
|
-
maxLength: (context) => `O máximo permitido é ${context?.requiredLength ??
|
|
125
|
-
min: (context) => `O valor mínimo permitido é ${context?.min ??
|
|
126
|
-
minLength: (context) => `O mínimo permitido é ${context?.requiredLength ??
|
|
127
|
-
pattern:
|
|
128
|
-
required:
|
|
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:
|
|
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:
|
|
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 ×\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:
|
|
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 ×\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:
|
|
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
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
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(
|
|
980
|
-
this.cdr =
|
|
1027
|
+
constructor() {
|
|
1028
|
+
this.cdr = inject(ChangeDetectorRef);
|
|
981
1029
|
this.destroyRef = inject(DestroyRef);
|
|
982
|
-
this.
|
|
983
|
-
|
|
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
|
-
|
|
988
|
-
|
|
989
|
-
|
|
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
|
-
|
|
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((
|
|
997
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1156
|
+
maxDate() {
|
|
1004
1157
|
return parseDateValue(this.element.maxDate);
|
|
1005
1158
|
}
|
|
1006
|
-
|
|
1007
|
-
return
|
|
1159
|
+
disabledDates() {
|
|
1160
|
+
return this.element.disabledDates ?? this.emptyDisabledDates;
|
|
1008
1161
|
}
|
|
1009
|
-
|
|
1010
|
-
this.
|
|
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
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
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
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
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
|
-
|
|
1038
|
-
|
|
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.
|
|
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
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1234
|
+
// --- interação ------------------------------------------------------------
|
|
1235
|
+
toggleCalendar() {
|
|
1236
|
+
if (this.isDisabled() || this.isReadonly()) {
|
|
1237
|
+
return;
|
|
1050
1238
|
}
|
|
1051
|
-
|
|
1052
|
-
|
|
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 ×\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 ×\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
|
-
|
|
1123
|
-
|
|
1248
|
+
closeCalendar() {
|
|
1249
|
+
if (this.isOpenState()) {
|
|
1250
|
+
this.setOpenState(false);
|
|
1251
|
+
}
|
|
1252
|
+
this.control?.markAsTouched();
|
|
1124
1253
|
}
|
|
1125
|
-
|
|
1126
|
-
|
|
1254
|
+
handleOverlayOutsideClick(event) {
|
|
1255
|
+
if (this.toggleButton?.nativeElement.contains(event.target)) {
|
|
1256
|
+
return;
|
|
1257
|
+
}
|
|
1258
|
+
this.closeCalendar();
|
|
1127
1259
|
}
|
|
1128
|
-
|
|
1129
|
-
|
|
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
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
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.
|
|
1137
|
-
if (
|
|
1138
|
-
|
|
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
|
-
|
|
1158
|
-
|
|
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
|
-
|
|
1161
|
-
|
|
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
|
-
|
|
1164
|
-
|
|
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
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
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
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
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
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
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
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
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
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
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
|
-
|
|
1229
|
-
|
|
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
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
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
|
-
|
|
1244
|
-
|
|
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
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
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
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
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
|
-
|
|
1460
|
+
return { startDate: null, endDate: null };
|
|
1266
1461
|
}
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
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\">–</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 ×\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 ×\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:
|
|
1509
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImport: i0, type: MapaDatepicker, decorators: [{
|
|
1274
1510
|
type: Component,
|
|
1275
|
-
args: [{ selector:
|
|
1276
|
-
|
|
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
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
}], ctorParameters: () => [{ type: MapaI18nService }, { type: i0.ChangeDetectorRef }], propDecorators: { formGroup: [{
|
|
1289
|
-
|
|
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\">–</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 ×\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 ×\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
|
|
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$
|
|
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$
|
|
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 (\"
|
|
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 (\"
|
|
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: [{
|