@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.
Files changed (102) hide show
  1. package/accordion/README.md +95 -59
  2. package/calendar-mask/lib/calendar-mask/calendar-mask.directive.d.ts +4 -0
  3. package/datepicker/README.md +175 -0
  4. package/datepicker/index.d.ts +5 -0
  5. package/datepicker/lib/datepicker/date.utils.d.ts +21 -0
  6. package/datepicker/lib/datepicker/datepicker.component.d.ts +254 -0
  7. package/datepicker/lib/datepicker/models/index.d.ts +16 -0
  8. package/datepicker/public-api.d.ts +2 -0
  9. package/dynamic-form/dynamic-form/components/lookup/lookup.component.d.ts +3 -1
  10. package/dynamic-form/dynamic-form/components/lookup/models/lookup-alert-config.d.ts +5 -0
  11. package/dynamic-form/dynamic-form/form-field/configurations/fields/calendar-field.d.ts +119 -24
  12. package/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.d.ts +6 -0
  13. package/dynamic-form/dynamic-form/form-field/fields/calendar/calendar-field.component.d.ts +6 -23
  14. package/dynamic-form/public-api.d.ts +1 -0
  15. package/editor/README.md +229 -0
  16. package/editor/index.d.ts +5 -0
  17. package/editor/lib/editor/editor.component.d.ts +127 -0
  18. package/editor/lib/editor/link-dialog/link-dialog.component.d.ts +18 -0
  19. package/editor/lib/editor/models/index.d.ts +12 -0
  20. package/editor/lib/editor/toolbar-button/editor-toolbar-button.component.d.ts +10 -0
  21. package/editor/public-api.d.ts +2 -0
  22. package/esm2022/calendar-mask/lib/calendar-mask/calendar-mask.directive.mjs +5 -1
  23. package/esm2022/datepicker/lib/datepicker/date.utils.mjs +182 -0
  24. package/esm2022/datepicker/lib/datepicker/datepicker.component.mjs +1062 -0
  25. package/esm2022/datepicker/lib/datepicker/models/index.mjs +2 -0
  26. package/esm2022/datepicker/public-api.mjs +2 -0
  27. package/esm2022/datepicker/seniorsistemas-angular-components-datepicker.mjs +5 -0
  28. package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +11 -5
  29. package/esm2022/dynamic-form/dynamic-form/components/lookup/models/lookup-alert-config.mjs +2 -0
  30. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/calendar-field.mjs +1 -1
  31. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.mjs +1 -1
  32. package/esm2022/dynamic-form/dynamic-form/form-field/fields/autocomplete/autocomplete-field.component.mjs +2 -2
  33. package/esm2022/dynamic-form/dynamic-form/form-field/fields/calendar/calendar-field.component.mjs +23 -116
  34. package/esm2022/dynamic-form/dynamic-form/form-field/fields/lookup/lookup-field.component.mjs +3 -3
  35. package/esm2022/dynamic-form/public-api.mjs +1 -1
  36. package/esm2022/editor/lib/editor/editor.component.mjs +375 -0
  37. package/esm2022/editor/lib/editor/link-dialog/link-dialog.component.mjs +48 -0
  38. package/esm2022/editor/lib/editor/models/index.mjs +3 -0
  39. package/esm2022/editor/lib/editor/toolbar-button/editor-toolbar-button.component.mjs +17 -0
  40. package/esm2022/editor/public-api.mjs +3 -0
  41. package/esm2022/editor/seniorsistemas-angular-components-editor.mjs +5 -0
  42. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-calendar/inline-edit-calendar.component.mjs +22 -12
  43. package/esm2022/inline-edit/lib/inline-edit/inline-edit.module.mjs +5 -5
  44. package/esm2022/lib/locale/fallback.mjs +82 -3
  45. package/esm2022/optional-fields/editor/editor-field/editor-field.component.mjs +5 -6
  46. package/esm2022/optional-fields/editor/editor-field.mjs +1 -1
  47. package/esm2022/panel/lib/panel/panel.component.mjs +7 -3
  48. package/esm2022/select/lib/select/select.component.mjs +4 -8
  49. package/esm2022/shared/lib/accessibility/datepicker-no-period-tab.directive.mjs +5 -1
  50. package/esm2022/stats-card/lib/stats-card/stats-card.component.mjs +2 -2
  51. package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs +4 -0
  52. package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs.map +1 -1
  53. package/fesm2022/seniorsistemas-angular-components-datepicker.mjs +1250 -0
  54. package/fesm2022/seniorsistemas-angular-components-datepicker.mjs.map +1 -0
  55. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +49 -135
  56. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  57. package/fesm2022/seniorsistemas-angular-components-editor.mjs +437 -0
  58. package/fesm2022/seniorsistemas-angular-components-editor.mjs.map +1 -0
  59. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +24 -15
  60. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
  61. package/fesm2022/seniorsistemas-angular-components-optional-fields-editor.mjs +4 -5
  62. package/fesm2022/seniorsistemas-angular-components-optional-fields-editor.mjs.map +1 -1
  63. package/fesm2022/seniorsistemas-angular-components-panel.mjs +6 -2
  64. package/fesm2022/seniorsistemas-angular-components-panel.mjs.map +1 -1
  65. package/fesm2022/seniorsistemas-angular-components-select.mjs +3 -7
  66. package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
  67. package/fesm2022/seniorsistemas-angular-components-shared.mjs +4 -0
  68. package/fesm2022/seniorsistemas-angular-components-shared.mjs.map +1 -1
  69. package/fesm2022/seniorsistemas-angular-components-stats-card.mjs +1 -1
  70. package/fesm2022/seniorsistemas-angular-components-stats-card.mjs.map +1 -1
  71. package/fesm2022/seniorsistemas-angular-components.mjs +81 -2
  72. package/fesm2022/seniorsistemas-angular-components.mjs.map +1 -1
  73. package/inline-edit/lib/inline-edit/components/fields/inline-edit-calendar/inline-edit-calendar.component.d.ts +6 -4
  74. package/inline-edit/lib/inline-edit/inline-edit.module.d.ts +2 -2
  75. package/loading-state/README.md +57 -17
  76. package/optional-fields/editor/editor-field.d.ts +9 -6
  77. package/package.json +68 -2
  78. package/panel/README.md +12 -1
  79. package/panel/lib/panel/panel.component.d.ts +3 -1
  80. package/schematics/collection.json +4 -0
  81. package/schematics/migrations/migrate-p-datepicker/index.d.ts +2 -0
  82. package/schematics/migrations/migrate-p-datepicker/index.js +141 -0
  83. package/schematics/migrations/migrate-p-datepicker/index.js.map +1 -0
  84. package/schematics/migrations/migrate-p-datepicker/index.test.d.ts +1 -0
  85. package/schematics/migrations/migrate-p-datepicker/index.test.js +392 -0
  86. package/schematics/migrations/migrate-p-datepicker/index.test.js.map +1 -0
  87. package/schematics/migrations.json +10 -0
  88. package/schematics/utils/ast-utils.d.ts +28 -0
  89. package/schematics/utils/ast-utils.js +116 -0
  90. package/schematics/utils/ast-utils.js.map +1 -0
  91. package/schematics/utils/ast-utils.test.d.ts +1 -0
  92. package/schematics/utils/ast-utils.test.js +138 -0
  93. package/schematics/utils/ast-utils.test.js.map +1 -0
  94. package/schematics/utils/workspace-utils.d.ts +6 -0
  95. package/schematics/utils/workspace-utils.js +37 -0
  96. package/schematics/utils/workspace-utils.js.map +1 -0
  97. package/schematics/utils/workspace-utils.test.d.ts +1 -0
  98. package/schematics/utils/workspace-utils.test.js +152 -0
  99. package/schematics/utils/workspace-utils.test.js.map +1 -0
  100. package/shared/lib/accessibility/datepicker-no-period-tab.directive.d.ts +4 -0
  101. package/stats-card/README.md +80 -45
  102. package/stats-card/lib/stats-card/stats-card.component.d.ts +1 -0
@@ -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
- imports: [AccordionModule],
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
- <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>
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 | 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 |
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 | Tipo | Padrão | Obrigatório | Descrição |
52
- |-------------|------|--------|:-----------:|-----------|
53
- | `header` | `string` | — | **sim** | Título exibido no cabeçalho do painel |
54
- | `disabled` | `boolean` | `false` | não | Impede abertura e fechamento do painel |
55
- | `buttons` | `AccordionButtonSettings[]` | `undefined` | não | Botões de ação exibidos no cabeçalho |
56
- | `switchControl` | `UntypedFormControl` | `undefined` | não | FormControl vinculado a um switch no cabeçalho |
57
- | `validationMessage` | `string` | `undefined` | não | Mensagem de validação exibida abaixo do cabeçalho |
58
- | `validationMessageIcon` | `string` | `'fas fa-exclamation-circle'` | não | Classe do ícone da mensagem de validação |
59
- | `validationMessageIconColor` | `ValidationMessageIconColor` | `'Red'` | não | Cor do ícone da mensagem de validação |
60
- | `cache` | `boolean` | `false` | não | Mantém o conteúdo no DOM quando o painel é fechado |
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 | Tipo | Descrição |
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
- icon: string;
74
- onClick: VoidFunction;
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 [multiple]="false" [activeIndex]="0">
86
- <s-accordion-panel header="Informações Pessoais">
87
- <div class="p-4">
88
- <p>Nome completo, data de nascimento, CPF e outros dados pessoais.</p>
89
- </div>
90
- </s-accordion-panel>
91
- <s-accordion-panel header="Endereço">
92
- <div class="p-4">
93
- <p>Rua, número, complemento, cidade, estado e CEP.</p>
94
- </div>
95
- </s-accordion-panel>
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 [multiple]="true" [activeIndex]="[0, 1]">
103
- <s-accordion-panel header="Configurações Gerais">
104
- <div class="p-4">Idioma, tema e notificações.</div>
105
- </s-accordion-panel>
106
- <s-accordion-panel header="Configurações de Privacidade">
107
- <div class="p-4">Visibilidade do perfil e compartilhamento.</div>
108
- </s-accordion-panel>
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
- <s-accordion-panel header="Projeto Alpha" [buttons]="buttons">
117
- <div class="p-4">Descrição e detalhes do Projeto Alpha.</div>
118
- </s-accordion-panel>
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
- { icon: 'fas fa-edit', onClick: () => this.editar() },
125
- { icon: 'fas fa-trash', onClick: () => this.excluir() },
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
- <s-accordion-panel
134
- header="Notificações por E-mail"
135
- [switchControl]="switchControl"
136
- validationMessage="Preencha todos os campos obrigatórios"
137
- validationMessageIcon="fas fa-exclamation-circle"
138
- validationMessageIconColor="Red">
139
- <div class="p-4">Receba atualizações por e-mail.</div>
140
- </s-accordion-panel>
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
- <s-accordion-panel header="Etapa 1 - Concluída">
149
- Conteúdo disponível.
150
- </s-accordion-panel>
151
- <s-accordion-panel header="Etapa 2 - Bloqueada" [disabled]="true">
152
- Disponível após concluir a etapa 1.
153
- </s-accordion-panel>
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
+ ![Status](https://img.shields.io/badge/status-beta-yellow)
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,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@seniorsistemas/angular-components/datepicker" />
5
+ export * from './public-api';
@@ -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;