@seniorsistemas/angular-components 19.5.5 → 19.6.0-fix-sds-552-80a83369
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/accordion/README.md +95 -59
- package/calendar-mask/lib/calendar-mask/calendar-mask.directive.d.ts +4 -0
- package/datepicker/README.md +175 -0
- package/datepicker/index.d.ts +5 -0
- package/datepicker/lib/datepicker/date.utils.d.ts +21 -0
- package/datepicker/lib/datepicker/datepicker.component.d.ts +254 -0
- package/datepicker/lib/datepicker/models/index.d.ts +16 -0
- package/datepicker/public-api.d.ts +2 -0
- package/dynamic-form/dynamic-form/components/lookup/lookup.component.d.ts +3 -1
- package/dynamic-form/dynamic-form/components/lookup/models/lookup-alert-config.d.ts +5 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/calendar-field.d.ts +119 -24
- package/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.d.ts +6 -0
- package/dynamic-form/dynamic-form/form-field/fields/calendar/calendar-field.component.d.ts +6 -23
- package/dynamic-form/public-api.d.ts +1 -0
- package/editor/README.md +229 -0
- package/editor/index.d.ts +5 -0
- package/editor/lib/editor/editor.component.d.ts +127 -0
- package/editor/lib/editor/link-dialog/link-dialog.component.d.ts +18 -0
- package/editor/lib/editor/models/index.d.ts +12 -0
- package/editor/lib/editor/toolbar-button/editor-toolbar-button.component.d.ts +10 -0
- package/editor/public-api.d.ts +2 -0
- package/esm2022/calendar-mask/lib/calendar-mask/calendar-mask.directive.mjs +5 -1
- package/esm2022/datepicker/lib/datepicker/date.utils.mjs +182 -0
- package/esm2022/datepicker/lib/datepicker/datepicker.component.mjs +1062 -0
- package/esm2022/datepicker/lib/datepicker/models/index.mjs +2 -0
- package/esm2022/datepicker/public-api.mjs +2 -0
- package/esm2022/datepicker/seniorsistemas-angular-components-datepicker.mjs +5 -0
- package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +11 -5
- package/esm2022/dynamic-form/dynamic-form/components/lookup/models/lookup-alert-config.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/calendar-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/autocomplete/autocomplete-field.component.mjs +2 -2
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/calendar/calendar-field.component.mjs +23 -116
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/lookup/lookup-field.component.mjs +3 -3
- package/esm2022/dynamic-form/public-api.mjs +1 -1
- package/esm2022/editor/lib/editor/editor.component.mjs +375 -0
- package/esm2022/editor/lib/editor/link-dialog/link-dialog.component.mjs +48 -0
- package/esm2022/editor/lib/editor/models/index.mjs +3 -0
- package/esm2022/editor/lib/editor/toolbar-button/editor-toolbar-button.component.mjs +17 -0
- package/esm2022/editor/public-api.mjs +3 -0
- package/esm2022/editor/seniorsistemas-angular-components-editor.mjs +5 -0
- package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-calendar/inline-edit-calendar.component.mjs +22 -12
- package/esm2022/inline-edit/lib/inline-edit/inline-edit.module.mjs +5 -5
- package/esm2022/lib/locale/fallback.mjs +82 -3
- package/esm2022/optional-fields/editor/editor-field/editor-field.component.mjs +5 -6
- package/esm2022/optional-fields/editor/editor-field.mjs +1 -1
- package/esm2022/panel/lib/panel/panel.component.mjs +7 -3
- package/esm2022/select/lib/select/select.component.mjs +4 -8
- package/esm2022/shared/lib/accessibility/datepicker-no-period-tab.directive.mjs +5 -1
- package/esm2022/stats-card/lib/stats-card/stats-card.component.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs +4 -0
- package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-datepicker.mjs +1250 -0
- package/fesm2022/seniorsistemas-angular-components-datepicker.mjs.map +1 -0
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +49 -135
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-editor.mjs +437 -0
- package/fesm2022/seniorsistemas-angular-components-editor.mjs.map +1 -0
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +24 -15
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-optional-fields-editor.mjs +4 -5
- package/fesm2022/seniorsistemas-angular-components-optional-fields-editor.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-panel.mjs +6 -2
- package/fesm2022/seniorsistemas-angular-components-panel.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-select.mjs +3 -7
- package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-shared.mjs +4 -0
- package/fesm2022/seniorsistemas-angular-components-shared.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-stats-card.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-stats-card.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components.mjs +81 -2
- package/fesm2022/seniorsistemas-angular-components.mjs.map +1 -1
- package/inline-edit/lib/inline-edit/components/fields/inline-edit-calendar/inline-edit-calendar.component.d.ts +6 -4
- package/inline-edit/lib/inline-edit/inline-edit.module.d.ts +2 -2
- package/loading-state/README.md +57 -17
- package/optional-fields/editor/editor-field.d.ts +9 -6
- package/package.json +68 -2
- package/panel/README.md +12 -1
- package/panel/lib/panel/panel.component.d.ts +3 -1
- package/schematics/collection.json +4 -0
- package/schematics/migrations/migrate-p-datepicker/index.d.ts +2 -0
- package/schematics/migrations/migrate-p-datepicker/index.js +141 -0
- package/schematics/migrations/migrate-p-datepicker/index.js.map +1 -0
- package/schematics/migrations/migrate-p-datepicker/index.test.d.ts +1 -0
- package/schematics/migrations/migrate-p-datepicker/index.test.js +392 -0
- package/schematics/migrations/migrate-p-datepicker/index.test.js.map +1 -0
- package/schematics/migrations.json +10 -0
- package/schematics/utils/ast-utils.d.ts +28 -0
- package/schematics/utils/ast-utils.js +116 -0
- package/schematics/utils/ast-utils.js.map +1 -0
- package/schematics/utils/ast-utils.test.d.ts +1 -0
- package/schematics/utils/ast-utils.test.js +138 -0
- package/schematics/utils/ast-utils.test.js.map +1 -0
- package/schematics/utils/workspace-utils.d.ts +6 -0
- package/schematics/utils/workspace-utils.js +37 -0
- package/schematics/utils/workspace-utils.js.map +1 -0
- package/schematics/utils/workspace-utils.test.d.ts +1 -0
- package/schematics/utils/workspace-utils.test.js +152 -0
- package/schematics/utils/workspace-utils.test.js.map +1 -0
- package/shared/lib/accessibility/datepicker-no-period-tab.directive.d.ts +4 -0
- package/stats-card/README.md +80 -45
- package/stats-card/lib/stats-card/stats-card.component.d.ts +1 -0
package/accordion/README.md
CHANGED
|
@@ -23,7 +23,7 @@ Componente de acordeão para organizar conteúdo em painéis expansíveis e cola
|
|
|
23
23
|
import { AccordionModule } from '@seniorsistemas/angular-components/accordion';
|
|
24
24
|
|
|
25
25
|
@NgModule({
|
|
26
|
-
|
|
26
|
+
imports: [AccordionModule],
|
|
27
27
|
})
|
|
28
28
|
export class MeuModule {}
|
|
29
29
|
```
|
|
@@ -32,8 +32,8 @@ export class MeuModule {}
|
|
|
32
32
|
|
|
33
33
|
```html
|
|
34
34
|
<s-accordion>
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
<s-accordion-panel header="Seção 1">Conteúdo 1</s-accordion-panel>
|
|
36
|
+
<s-accordion-panel header="Seção 2">Conteúdo 2</s-accordion-panel>
|
|
37
37
|
</s-accordion>
|
|
38
38
|
```
|
|
39
39
|
|
|
@@ -41,40 +41,43 @@ export class MeuModule {}
|
|
|
41
41
|
|
|
42
42
|
### s-accordion — Inputs
|
|
43
43
|
|
|
44
|
-
| Propriedade
|
|
45
|
-
|
|
46
|
-
| `multiple`
|
|
47
|
-
| `activeIndex` | `number \| number[]` | `undefined` |
|
|
44
|
+
| Propriedade | Tipo | Padrão | Obrigatório | Descrição |
|
|
45
|
+
| ------------- | -------------------- | ----------- | :---------: | ---------------------------------------------------- |
|
|
46
|
+
| `multiple` | `boolean` | `false` | não | Permite múltiplos painéis abertos ao mesmo tempo |
|
|
47
|
+
| `activeIndex` | `number \| number[]` | `undefined` | não | Índice(s) do(s) painel(is) que devem iniciar abertos |
|
|
48
48
|
|
|
49
49
|
### s-accordion-panel — Inputs
|
|
50
50
|
|
|
51
|
-
| Propriedade
|
|
52
|
-
|
|
53
|
-
| `header`
|
|
54
|
-
| `
|
|
55
|
-
| `
|
|
56
|
-
| `
|
|
57
|
-
| `
|
|
58
|
-
| `
|
|
59
|
-
| `
|
|
60
|
-
| `
|
|
51
|
+
| Propriedade | Tipo | Padrão | Obrigatório | Descrição |
|
|
52
|
+
| ---------------------------- | -------------------------------------- | ----------------------------- | :---------: | -------------------------------------------------- |
|
|
53
|
+
| `header` | `string` | — | **sim** | Título exibido no cabeçalho do painel |
|
|
54
|
+
| `badgeConfig` | `{ text: string; color: BadgeColors }` | `undefined` | não | Badge exibido no cabeçalho, à direita do título |
|
|
55
|
+
| `disabled` | `boolean` | `false` | não | Impede abertura e fechamento do painel |
|
|
56
|
+
| `buttons` | `AccordionButtonSettings[]` | `undefined` | não | Botões de ação exibidos no cabeçalho |
|
|
57
|
+
| `switchControl` | `UntypedFormControl` | `undefined` | não | FormControl vinculado a um switch no cabeçalho |
|
|
58
|
+
| `validationMessage` | `string` | `undefined` | não | Mensagem de validação exibida abaixo do cabeçalho |
|
|
59
|
+
| `validationMessageIcon` | `string` | `'fas fa-exclamation-circle'` | não | Classe do ícone da mensagem de validação |
|
|
60
|
+
| `validationMessageIconColor` | `ValidationMessageIconColor` | `'Red'` | não | Cor do ícone da mensagem de validação |
|
|
61
|
+
| `cache` | `boolean` | `false` | não | Mantém o conteúdo no DOM quando o painel é fechado |
|
|
61
62
|
|
|
62
63
|
### s-accordion-panel — Outputs
|
|
63
64
|
|
|
64
|
-
| Evento
|
|
65
|
-
|
|
66
|
-
| `panelOpened` | `EventEmitter<void>` | Emitido quando o painel é aberto
|
|
65
|
+
| Evento | Tipo | Descrição |
|
|
66
|
+
| ------------- | -------------------- | --------------------------------- |
|
|
67
|
+
| `panelOpened` | `EventEmitter<void>` | Emitido quando o painel é aberto |
|
|
67
68
|
| `panelClosed` | `EventEmitter<void>` | Emitido quando o painel é fechado |
|
|
68
69
|
|
|
69
70
|
### Tipos
|
|
70
71
|
|
|
71
72
|
```typescript
|
|
72
73
|
interface AccordionButtonSettings {
|
|
73
|
-
|
|
74
|
-
|
|
74
|
+
icon: string;
|
|
75
|
+
onClick: VoidFunction;
|
|
75
76
|
}
|
|
76
77
|
|
|
77
78
|
type ValidationMessageIconColor = 'Red' | 'Orange' | 'Yellow' | 'Green' | 'Blue';
|
|
79
|
+
|
|
80
|
+
type BadgeColors = 'red' | 'orange' | 'yellow' | 'blue' | 'green' | 'gray';
|
|
78
81
|
```
|
|
79
82
|
|
|
80
83
|
## Exemplos
|
|
@@ -82,30 +85,57 @@ type ValidationMessageIconColor = 'Red' | 'Orange' | 'Yellow' | 'Green' | 'Blue'
|
|
|
82
85
|
### Modo padrão (painel único)
|
|
83
86
|
|
|
84
87
|
```html
|
|
85
|
-
<s-accordion
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
88
|
+
<s-accordion
|
|
89
|
+
[multiple]="false"
|
|
90
|
+
[activeIndex]="0"
|
|
91
|
+
>
|
|
92
|
+
<s-accordion-panel header="Informações Pessoais">
|
|
93
|
+
<div class="p-4">
|
|
94
|
+
<p>Nome completo, data de nascimento, CPF e outros dados pessoais.</p>
|
|
95
|
+
</div>
|
|
96
|
+
</s-accordion-panel>
|
|
97
|
+
<s-accordion-panel header="Endereço">
|
|
98
|
+
<div class="p-4">
|
|
99
|
+
<p>Rua, número, complemento, cidade, estado e CEP.</p>
|
|
100
|
+
</div>
|
|
101
|
+
</s-accordion-panel>
|
|
96
102
|
</s-accordion>
|
|
97
103
|
```
|
|
98
104
|
|
|
99
105
|
### Modo múltiplo
|
|
100
106
|
|
|
101
107
|
```html
|
|
102
|
-
<s-accordion
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
108
|
+
<s-accordion
|
|
109
|
+
[multiple]="true"
|
|
110
|
+
[activeIndex]="[0, 1]"
|
|
111
|
+
>
|
|
112
|
+
<s-accordion-panel header="Configurações Gerais">
|
|
113
|
+
<div class="p-4">Idioma, tema e notificações.</div>
|
|
114
|
+
</s-accordion-panel>
|
|
115
|
+
<s-accordion-panel header="Configurações de Privacidade">
|
|
116
|
+
<div class="p-4">Visibilidade do perfil e compartilhamento.</div>
|
|
117
|
+
</s-accordion-panel>
|
|
118
|
+
</s-accordion>
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Com badge no cabeçalho
|
|
122
|
+
|
|
123
|
+
O `badgeConfig` exibe um `BadgeComponent` à direita do título, útil para indicar contagens, status ou alertas por seção.
|
|
124
|
+
|
|
125
|
+
```html
|
|
126
|
+
<s-accordion>
|
|
127
|
+
<s-accordion-panel
|
|
128
|
+
header="Notificações"
|
|
129
|
+
[badgeConfig]="{ text: '3', color: 'red' }"
|
|
130
|
+
>
|
|
131
|
+
<div class="p-4">Você tem 3 notificações não lidas.</div>
|
|
132
|
+
</s-accordion-panel>
|
|
133
|
+
<s-accordion-panel
|
|
134
|
+
header="Tarefas Atribuídas"
|
|
135
|
+
[badgeConfig]="{ text: 'Novo', color: 'blue' }"
|
|
136
|
+
>
|
|
137
|
+
<div class="p-4">Novas tarefas atribuídas a você.</div>
|
|
138
|
+
</s-accordion-panel>
|
|
109
139
|
</s-accordion>
|
|
110
140
|
```
|
|
111
141
|
|
|
@@ -113,16 +143,19 @@ type ValidationMessageIconColor = 'Red' | 'Orange' | 'Yellow' | 'Green' | 'Blue'
|
|
|
113
143
|
|
|
114
144
|
```html
|
|
115
145
|
<s-accordion>
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
146
|
+
<s-accordion-panel
|
|
147
|
+
header="Projeto Alpha"
|
|
148
|
+
[buttons]="buttons"
|
|
149
|
+
>
|
|
150
|
+
<div class="p-4">Descrição e detalhes do Projeto Alpha.</div>
|
|
151
|
+
</s-accordion-panel>
|
|
119
152
|
</s-accordion>
|
|
120
153
|
```
|
|
121
154
|
|
|
122
155
|
```typescript
|
|
123
156
|
buttons = [
|
|
124
|
-
|
|
125
|
-
|
|
157
|
+
{ icon: 'fas fa-edit', onClick: () => this.editar() },
|
|
158
|
+
{ icon: 'fas fa-trash', onClick: () => this.excluir() },
|
|
126
159
|
];
|
|
127
160
|
```
|
|
128
161
|
|
|
@@ -130,14 +163,15 @@ buttons = [
|
|
|
130
163
|
|
|
131
164
|
```html
|
|
132
165
|
<s-accordion>
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
166
|
+
<s-accordion-panel
|
|
167
|
+
header="Notificações por E-mail"
|
|
168
|
+
[switchControl]="switchControl"
|
|
169
|
+
validationMessage="Preencha todos os campos obrigatórios"
|
|
170
|
+
validationMessageIcon="fas fa-exclamation-circle"
|
|
171
|
+
validationMessageIconColor="Red"
|
|
172
|
+
>
|
|
173
|
+
<div class="p-4">Receba atualizações por e-mail.</div>
|
|
174
|
+
</s-accordion-panel>
|
|
141
175
|
</s-accordion>
|
|
142
176
|
```
|
|
143
177
|
|
|
@@ -145,12 +179,13 @@ buttons = [
|
|
|
145
179
|
|
|
146
180
|
```html
|
|
147
181
|
<s-accordion>
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
182
|
+
<s-accordion-panel header="Etapa 1 - Concluída"> Conteúdo disponível. </s-accordion-panel>
|
|
183
|
+
<s-accordion-panel
|
|
184
|
+
header="Etapa 2 - Bloqueada"
|
|
185
|
+
[disabled]="true"
|
|
186
|
+
>
|
|
187
|
+
Disponível após concluir a etapa 1.
|
|
188
|
+
</s-accordion-panel>
|
|
154
189
|
</s-accordion>
|
|
155
190
|
```
|
|
156
191
|
|
|
@@ -164,3 +199,4 @@ buttons = [
|
|
|
164
199
|
## Componentes relacionados
|
|
165
200
|
|
|
166
201
|
- [`CollapseLink`](../collapse-link/README.md) — quando há apenas uma seção expansível simples, sem cabeçalho estruturado
|
|
202
|
+
|
|
@@ -2,6 +2,10 @@ import { AfterViewChecked, OnDestroy, OnInit, Renderer2 } from '@angular/core';
|
|
|
2
2
|
import { Calendar } from 'primeng/calendar';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
/**
|
|
5
|
+
* @deprecated
|
|
6
|
+
* @since 19.6.0
|
|
7
|
+
* Favor utilizar o componente: s-datepicker, que é o calendário oficial do Design System da Senior.
|
|
8
|
+
*
|
|
5
9
|
* @description Diretiva que aplica máscara de entrada a um componente `p-calendar` do PrimeNG,
|
|
6
10
|
* formatando automaticamente a data conforme o formato configurado no calendário.
|
|
7
11
|
* Intercepta os eventos de teclado e input do campo interno do calendar para garantir
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
# Datepicker
|
|
2
|
+
|
|
3
|
+

|
|
4
|
+
|
|
5
|
+
Componente completo de seleção de datas com campo de input e painel flutuante. Substituto direto do `p-datepicker` do PrimeNG, com API moderna baseada em Angular Signals e posicionamento nativo via CDK Overlay.
|
|
6
|
+
|
|
7
|
+
## Quando usar
|
|
8
|
+
|
|
9
|
+
- Formulários que exigem seleção de data, hora ou intervalo de datas
|
|
10
|
+
- Filtros de período com seleção de data de início e fim (`mode="range"`)
|
|
11
|
+
- Campos de hora isolados sem calendário (`mode="time"`)
|
|
12
|
+
- Seleção de competência (mês/ano) sem necessidade de escolher o dia (`mode="month"`)
|
|
13
|
+
|
|
14
|
+
## Quando não usar
|
|
15
|
+
|
|
16
|
+
- Para exibir datas sem interação — use `DatePipe` do Angular diretamente
|
|
17
|
+
- Para seleção de múltiplas datas avulsas — este componente não suporta `selectionMode="multiple"`
|
|
18
|
+
- Quando o campo está dentro de um modal e o painel precisa escapar do `overflow: hidden` — o CDK Overlay já trata isso nativamente; não é necessário configuração extra
|
|
19
|
+
|
|
20
|
+
## Instalação
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
import { DatepickerComponent } from '@seniorsistemas/angular-components/datepicker';
|
|
24
|
+
|
|
25
|
+
@Component({
|
|
26
|
+
standalone: true,
|
|
27
|
+
imports: [DatepickerComponent],
|
|
28
|
+
})
|
|
29
|
+
export class MeuComponent {}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Uso básico
|
|
33
|
+
|
|
34
|
+
```html
|
|
35
|
+
<s-datepicker [formControl]="dataCtrl" mode="date" />
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## API
|
|
39
|
+
|
|
40
|
+
### Inputs
|
|
41
|
+
|
|
42
|
+
| Propriedade | Tipo | Padrão | Obrigatório | Descrição |
|
|
43
|
+
|---|---|---|:-----------:|---|
|
|
44
|
+
| `inputId` | `string` | auto-gerado | Não | HTML `id` aplicado ao elemento `<input>`. |
|
|
45
|
+
| `name` | `string` | `undefined` | Não | Atributo `name` do `<input>` nativo. |
|
|
46
|
+
| `placeholder` | `string` | `undefined` | Não | Texto exibido quando nenhum valor está selecionado. |
|
|
47
|
+
| `mode` | `DatePickerMode` | `'date'` | Não | Modo de seleção do componente. Ver tabela de modos abaixo. |
|
|
48
|
+
| `showIcon` | `boolean` | `true` | Não | Exibe o botão de ícone ao lado do campo. |
|
|
49
|
+
| `icon` | `string` | `'fas fa-calendar'` | Não | Classe CSS do ícone. No modo `time`, usa `'fas fa-clock'` automaticamente. |
|
|
50
|
+
| `showOnFocus` | `boolean` | `false` | Não | Abre o painel ao focar o campo. |
|
|
51
|
+
| `min` | `Date \| null` | `null` | Não | Data mínima selecionável. Dias anteriores ficam desabilitados. |
|
|
52
|
+
| `max` | `Date \| null` | `null` | Não | Data máxima selecionável. Dias posteriores ficam desabilitados. |
|
|
53
|
+
| `defaultDate` | `Date \| null` | `null` | Não | Data exibida ao abrir o painel quando nenhuma data está selecionada. |
|
|
54
|
+
| `dateFormat` | `string` | `'dd/MM/yyyy'` | Não | Formato de exibição da data no campo. |
|
|
55
|
+
| `hourFormat` | `'12' \| '24'` | `'24'` | Não | Formato de exibição das horas. |
|
|
56
|
+
| `minuteStep` | `number` | `5` | Não | Incremento em minutos ao usar as setas do time picker. |
|
|
57
|
+
| `showSeconds` | `boolean` | `false` | Não | Exibe o campo de segundos no time picker. |
|
|
58
|
+
| `rangeSeparator` | `string` | `' — '` | Não | Separador exibido entre as datas no modo `range`. |
|
|
59
|
+
| `disabled` | `boolean` | `false` | Não | Desabilita o componente (model two-way). |
|
|
60
|
+
|
|
61
|
+
### Outputs
|
|
62
|
+
|
|
63
|
+
| Evento | Tipo emitido | Descrição |
|
|
64
|
+
|---|---|---|
|
|
65
|
+
| `blur` | `Event` | Emitido quando o campo perde o foco. |
|
|
66
|
+
| `focus` | `Event` | Emitido quando o campo recebe o foco. |
|
|
67
|
+
| `select` | `Date \| DateRange \| null` | Emitido ao selecionar uma data, mês, horário ou intervalo. |
|
|
68
|
+
| `close` | `void` | Emitido quando o painel do calendário fecha. |
|
|
69
|
+
| `todayClick` | `Date` | Emitido ao clicar no botão "Hoje". |
|
|
70
|
+
| `clearClick` | `void` | Emitido ao clicar no botão "Limpar". |
|
|
71
|
+
| `monthChange` | `{ month: number; year: number }` | Emitido quando o mês visualizado muda. |
|
|
72
|
+
| `yearChange` | `{ month: number; year: number }` | Emitido quando o ano visualizado muda. |
|
|
73
|
+
|
|
74
|
+
### Tipos
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
type DatePickerMode = 'date' | 'month' | 'datetime' | 'time' | 'range';
|
|
78
|
+
|
|
79
|
+
interface DateRange {
|
|
80
|
+
start: Date | null;
|
|
81
|
+
end: Date | null;
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Modos (`DatePickerMode`)
|
|
86
|
+
|
|
87
|
+
| Modo | Valor emitido | Descrição |
|
|
88
|
+
|---|---|---|
|
|
89
|
+
| `date` | `Date` | Calendário com seleção de dia (padrão). |
|
|
90
|
+
| `month` | `Date` | Seleção de mês e ano — o `Date` emitido aponta para o primeiro dia do mês. |
|
|
91
|
+
| `datetime` | `Date` | Calendário + time picker. O painel só fecha ao clicar em "Confirmar". |
|
|
92
|
+
| `time` | `Date` | Apenas seletor de hora, sem calendário. |
|
|
93
|
+
| `range` | `DateRange` | Seleção de intervalo com data de início e fim. |
|
|
94
|
+
|
|
95
|
+
## Exemplos
|
|
96
|
+
|
|
97
|
+
### Com `formControl`
|
|
98
|
+
|
|
99
|
+
```html
|
|
100
|
+
<s-datepicker [formControl]="dataCtrl" mode="date" />
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
```typescript
|
|
104
|
+
dataCtrl = new FormControl<Date | null>(null, Validators.required);
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Com `ngModel`
|
|
108
|
+
|
|
109
|
+
```html
|
|
110
|
+
<s-datepicker [(ngModel)]="dataSelecionada" mode="datetime" />
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Data e hora
|
|
114
|
+
|
|
115
|
+
```html
|
|
116
|
+
<s-datepicker [formControl]="ctrl" mode="datetime" [minuteStep]="15" [showSeconds]="true" />
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Intervalo de datas
|
|
120
|
+
|
|
121
|
+
```html
|
|
122
|
+
<s-datepicker [formControl]="periodoCtrl" mode="range" rangeSeparator=" até " />
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
```typescript
|
|
126
|
+
periodoCtrl = new FormControl<DateRange | null>(null);
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Com limites de data
|
|
130
|
+
|
|
131
|
+
```html
|
|
132
|
+
<s-datepicker [formControl]="ctrl" mode="date" [min]="dataMinima" [max]="dataMaxima" />
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Seleção de mês
|
|
136
|
+
|
|
137
|
+
```html
|
|
138
|
+
<s-datepicker [formControl]="competenciaCtrl" mode="month" placeholder="Selecione a competência" />
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Apenas hora
|
|
142
|
+
|
|
143
|
+
```html
|
|
144
|
+
<s-datepicker [formControl]="horaCtrl" mode="time" [minuteStep]="1" [showSeconds]="true" />
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Com Dynamic Form
|
|
148
|
+
|
|
149
|
+
```typescript
|
|
150
|
+
const config: CalendarFieldConfig = {
|
|
151
|
+
type: 'date',
|
|
152
|
+
name: 'dataNascimento',
|
|
153
|
+
label: 'Data de nascimento',
|
|
154
|
+
};
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
```html
|
|
158
|
+
<s-dynamic-form [config]="config" />
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## Acessibilidade
|
|
162
|
+
|
|
163
|
+
- O trigger usa `role="combobox"` com `aria-haspopup="grid"`, `aria-expanded` e `aria-controls` apontando para o painel
|
|
164
|
+
- O painel usa `role="dialog"` com `aria-label` traduzido e `cdkTrapFocus` para prender o foco dentro do popup
|
|
165
|
+
- Ao abrir o painel, o foco é movido automaticamente para o primeiro botão do calendário ou para o botão de incremento de horas no modo `time`
|
|
166
|
+
- Ao fechar o painel, o foco retorna ao botão de ícone do input trigger
|
|
167
|
+
- Tecla `Escape` fecha o painel e devolve o foco ao trigger
|
|
168
|
+
- Dias do calendário usam `role="gridcell"` com `aria-label` contendo a data por extenso, `aria-selected` e `aria-disabled`
|
|
169
|
+
- Cabeçalhos dos dias da semana usam `role="columnheader"` com `aria-label`
|
|
170
|
+
- Setas do time picker têm `aria-label` descritivos; as horas/minutos têm `aria-live="polite"`
|
|
171
|
+
- Todos os ícones decorativos têm `aria-hidden="true"`
|
|
172
|
+
|
|
173
|
+
## Componentes relacionados
|
|
174
|
+
|
|
175
|
+
- [`DynamicFormComponent`](../../src/lib/dynamic-form/README.md) — usa `s-datepicker` internamente para campos do tipo `date`, `time`, `dateTime` e `localDateTime`
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { DateRange } from './models';
|
|
2
|
+
export type { DateRange };
|
|
3
|
+
export declare function formatNativeDate(date: Date): string;
|
|
4
|
+
/**
|
|
5
|
+
* Formata uma data segundo um padrão simples contendo os tokens `dd`, `MM` e `yyyy`.
|
|
6
|
+
* Usado apenas para exibição em campos `type="text"` (modo `range`), onde o browser
|
|
7
|
+
* não controla o formato. Para `type="date"` nativo o formato é definido pelo browser.
|
|
8
|
+
*/
|
|
9
|
+
export declare function formatWithPattern(date: Date, pattern: string): string;
|
|
10
|
+
export declare function formatTime(h: number, m: number, s?: number): string;
|
|
11
|
+
/** Parses yyyy-MM-dd. Returns null when invalid. */
|
|
12
|
+
export declare function parseDate(raw: string): Date | null;
|
|
13
|
+
export declare function isSameDay(a: Date, b: Date): boolean;
|
|
14
|
+
export declare function stripTime(date: Date): number;
|
|
15
|
+
export declare function parseRangeInput(raw: string, separator?: string): DateRange | null;
|
|
16
|
+
export declare function parseTimeInput(raw: string, base: Date | null, maxHours: number, maxMinutes: number): Date | null;
|
|
17
|
+
export declare function parseYearInput(raw: string): Date | null;
|
|
18
|
+
export declare function parseMonthInput(raw: string): Date | null;
|
|
19
|
+
export declare function parseDateTimeInput(raw: string): Date | null;
|
|
20
|
+
export declare function parseInput(mode: string, raw: string, base: Date | null, maxHours: number, maxMinutes: number, rangeSeparator?: string): Date | DateRange | null;
|
|
21
|
+
export declare function formatValueForInput(mode: string, value: Date | DateRange | Date[] | null, rangeSeparator?: string, dateFormat?: string, multipleSeparator?: string): string;
|