@seniorsistemas/angular-components 19.3.2 → 19.3.3-fix-sds-513-cdb1ad53

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 (86) hide show
  1. package/accordion/README.md +166 -0
  2. package/alert/README.md +92 -0
  3. package/autocomplete/README.md +162 -0
  4. package/badge/README.md +126 -0
  5. package/bignumber-input/README.md +122 -0
  6. package/breadcrumb/README.md +144 -0
  7. package/button/README.md +159 -0
  8. package/calendar-mask/README.md +89 -0
  9. package/card/README.md +133 -0
  10. package/chat/README.md +130 -0
  11. package/checkbox/README.md +108 -0
  12. package/checkbox-list/README.md +149 -0
  13. package/chips/README.md +152 -0
  14. package/code-editor/README.md +149 -0
  15. package/collapse-link/README.md +128 -0
  16. package/confirm-dialog/README.md +105 -0
  17. package/content-generator/README.md +111 -0
  18. package/control-errors/README.md +92 -0
  19. package/country-phone-picker/README.md +121 -0
  20. package/currency/README.md +90 -0
  21. package/custom-fields/README.md +142 -0
  22. package/dialog/README.md +152 -0
  23. package/dynamic-form/README.md +176 -0
  24. package/dynamic-form/dynamic-form/components/lookup/lookup.component.d.ts +2 -2
  25. package/dynamic-form/dynamic-form/components/lookup/types/lookup-models.d.ts +4 -0
  26. package/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.d.ts +2 -1
  27. package/dynamic-form/public-api.d.ts +1 -0
  28. package/editable-overlay/README.md +98 -0
  29. package/empty-state/README.md +134 -0
  30. package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +7 -10
  31. package/esm2022/dynamic-form/dynamic-form/components/lookup/types/lookup-models.mjs +2 -0
  32. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.mjs +1 -1
  33. package/esm2022/dynamic-form/public-api.mjs +1 -1
  34. package/esm2022/loading-state/lib/loading-state/loading-state.component.mjs +4 -4
  35. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +4 -7
  36. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  37. package/fesm2022/seniorsistemas-angular-components-loading-state.mjs +3 -3
  38. package/fesm2022/seniorsistemas-angular-components-loading-state.mjs.map +1 -1
  39. package/fieldset/README.md +135 -0
  40. package/file-picker/README.md +162 -0
  41. package/file-upload/README.md +23 -7
  42. package/gantt/README.md +173 -0
  43. package/global-search/README.md +151 -0
  44. package/grid-menu/README.md +123 -0
  45. package/help-popover/README.md +134 -0
  46. package/ia-insight/README.md +24 -6
  47. package/image-cropper/README.md +140 -0
  48. package/infinite-scroll/README.md +130 -0
  49. package/info-sign/README.md +111 -0
  50. package/inline-edit/README.md +139 -0
  51. package/insights/README.md +159 -0
  52. package/interactive-content/README.md +120 -0
  53. package/kanban/README.md +184 -0
  54. package/label-value/README.md +154 -0
  55. package/loading-state/README.md +141 -0
  56. package/localized-number-input/README.md +128 -0
  57. package/mouse-events/README.md +157 -0
  58. package/navigation-button/README.md +160 -0
  59. package/numeric/README.md +147 -0
  60. package/numeric-mask/README.md +170 -0
  61. package/object-card/README.md +158 -0
  62. package/package.json +7 -7
  63. package/paginator/README.md +121 -0
  64. package/panel/README.md +147 -0
  65. package/password-strength/README.md +144 -0
  66. package/picklist/README.md +170 -0
  67. package/pin-code-field/README.md +137 -0
  68. package/product-header/README.md +33 -6
  69. package/profile-picture-picker/README.md +159 -0
  70. package/progressbar/README.md +136 -0
  71. package/radio-button/README.md +117 -0
  72. package/rating-scale/README.md +154 -0
  73. package/select/README.md +147 -0
  74. package/select-button/README.md +137 -0
  75. package/sidebar/README.md +117 -0
  76. package/slide-in-bar/README.md +122 -0
  77. package/slider/README.md +127 -0
  78. package/speech-recognition/README.md +104 -0
  79. package/split-button/README.md +126 -0
  80. package/spotlight/README.md +200 -0
  81. package/star-rating/README.md +127 -0
  82. package/stats-card/README.md +135 -0
  83. package/stepper/README.md +164 -0
  84. package/switch/README.md +125 -0
  85. package/table/README.md +185 -0
  86. package/text-area-ia/README.md +17 -6
@@ -0,0 +1,166 @@
1
+ # Accordion
2
+
3
+ ![Status](https://img.shields.io/badge/status-stable-brightgreen)
4
+
5
+ Componente de acordeão para organizar conteúdo em painéis expansíveis e colapsáveis. Suporta modo de painel único ou múltiplos painéis abertos simultaneamente.
6
+
7
+ ## Quando usar
8
+
9
+ - Organizar conteúdo relacionado em seções para economizar espaço vertical
10
+ - Guiar o usuário por etapas sequenciais em um fluxo
11
+ - Comparar informações entre seções quando usado no modo múltiplo
12
+ - Exibir configurações agrupadas por categoria
13
+
14
+ ## Quando não usar
15
+
16
+ - Quando todo o conteúdo precisa estar sempre visível — use seções simples com separadores
17
+ - Para navegação entre páginas — prefira abas (`Tab`) ou roteamento Angular
18
+ - Quando há apenas uma seção expansível — use `CollapseLink` em vez disso
19
+
20
+ ## Instalação
21
+
22
+ ```typescript
23
+ import { AccordionModule } from '@seniorsistemas/angular-components/accordion';
24
+
25
+ @NgModule({
26
+ imports: [AccordionModule],
27
+ })
28
+ export class MeuModule {}
29
+ ```
30
+
31
+ ## Uso básico
32
+
33
+ ```html
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>
37
+ </s-accordion>
38
+ ```
39
+
40
+ ## API
41
+
42
+ ### s-accordion — Inputs
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 |
48
+
49
+ ### s-accordion-panel — Inputs
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 |
61
+
62
+ ### s-accordion-panel — Outputs
63
+
64
+ | Evento | Tipo | Descrição |
65
+ |--------|------|-----------|
66
+ | `panelOpened` | `EventEmitter<void>` | Emitido quando o painel é aberto |
67
+ | `panelClosed` | `EventEmitter<void>` | Emitido quando o painel é fechado |
68
+
69
+ ### Tipos
70
+
71
+ ```typescript
72
+ interface AccordionButtonSettings {
73
+ icon: string;
74
+ onClick: VoidFunction;
75
+ }
76
+
77
+ type ValidationMessageIconColor = 'Red' | 'Orange' | 'Yellow' | 'Green' | 'Blue';
78
+ ```
79
+
80
+ ## Exemplos
81
+
82
+ ### Modo padrão (painel único)
83
+
84
+ ```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>
96
+ </s-accordion>
97
+ ```
98
+
99
+ ### Modo múltiplo
100
+
101
+ ```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>
109
+ </s-accordion>
110
+ ```
111
+
112
+ ### Com botões de ação no cabeçalho
113
+
114
+ ```html
115
+ <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>
119
+ </s-accordion>
120
+ ```
121
+
122
+ ```typescript
123
+ buttons = [
124
+ { icon: 'fas fa-edit', onClick: () => this.editar() },
125
+ { icon: 'fas fa-trash', onClick: () => this.excluir() },
126
+ ];
127
+ ```
128
+
129
+ ### Com switch e mensagem de validação
130
+
131
+ ```html
132
+ <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>
141
+ </s-accordion>
142
+ ```
143
+
144
+ ### Com painel desabilitado
145
+
146
+ ```html
147
+ <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>
154
+ </s-accordion>
155
+ ```
156
+
157
+ ## Acessibilidade
158
+
159
+ - Os cabeçalhos dos painéis são renderizados como `<button>`, sendo acessíveis via teclado
160
+ - Use **Tab** para navegar entre os cabeçalhos dos painéis
161
+ - Use **Enter** ou **Space** para abrir e fechar painéis
162
+ - O estado aberto/fechado é comunicado via `aria-expanded`
163
+
164
+ ## Componentes relacionados
165
+
166
+ - [`CollapseLink`](../collapse-link/README.md) — quando há apenas uma seção expansível simples, sem cabeçalho estruturado
@@ -0,0 +1,92 @@
1
+ # Alert
2
+
3
+ ![Status](https://img.shields.io/badge/status-stable-brightgreen)
4
+
5
+ Componente para exibir mensagens de feedback contextual ao usuário, com diferentes níveis de severidade: informação, sucesso, aviso e erro.
6
+
7
+ ## Quando usar
8
+
9
+ - Confirmar ações realizadas com sucesso (ex.: "Dados salvos com sucesso")
10
+ - Alertar o usuário sobre situações que requerem atenção antes de prosseguir
11
+ - Reportar erros ou falhas em operações
12
+ - Comunicar atualizações ou avisos permanentes do sistema
13
+
14
+ ## Quando não usar
15
+
16
+ - Para notificações efêmeras que somem automaticamente — use `Toast` em vez disso
17
+ - Para estados vazios de listas ou telas — use `Empty State`
18
+ - Para mensagens de validação de campos individuais de formulário — use mensagens inline
19
+
20
+ ## Instalação
21
+
22
+ ```typescript
23
+ import { AlertComponent } from '@seniorsistemas/angular-components/alert';
24
+
25
+ @Component({ standalone: true, imports: [AlertComponent] })
26
+ export class MeuComponent {}
27
+ ```
28
+
29
+ ## Uso básico
30
+
31
+ ```html
32
+ <s-alert severity="info" summary="Informação" detail="Esta é uma mensagem informativa." />
33
+ ```
34
+
35
+ ## API
36
+
37
+ ### Inputs
38
+
39
+ | Propriedade | Tipo | Padrão | Obrigatório | Descrição |
40
+ |-------------|------|--------|:-----------:|-----------|
41
+ | `severity` | `'info' \| 'success' \| 'warning' \| 'error'` | `'info'` | não | Nível de severidade — define cor e ícone |
42
+ | `summary` | `string` | — | **sim** | Título principal exibido em destaque |
43
+ | `detail` | `string` | — | **sim** | Mensagem detalhada exibida abaixo do título |
44
+ | `closable` | `boolean` | `true` | não | Exibe botão para fechar o alerta |
45
+
46
+ ### Outputs
47
+
48
+ | Evento | Tipo | Descrição |
49
+ |--------|------|-----------|
50
+ | `closed` | `EventEmitter<void>` | Emitido quando o usuário fecha o alerta |
51
+
52
+ ## Exemplos
53
+
54
+ ### Tipos de severidade
55
+
56
+ ```html
57
+ <s-alert severity="info" summary="Informação" detail="Mensagem informativa ao usuário." [closable]="false"></s-alert>
58
+ <s-alert severity="success" summary="Sucesso" detail="Operação realizada com sucesso." [closable]="false"></s-alert>
59
+ <s-alert severity="warning" summary="Atenção" detail="Esta ação requer atenção." [closable]="false"></s-alert>
60
+ <s-alert severity="error" summary="Erro" detail="Ocorreu um erro ao processar." [closable]="false"></s-alert>
61
+ ```
62
+
63
+ ### Alerta não fechável (permanente)
64
+
65
+ ```html
66
+ <s-alert
67
+ severity="warning"
68
+ summary="Manutenção Programada"
69
+ detail="O sistema entrará em manutenção às 22h. Salve seu trabalho."
70
+ [closable]="false">
71
+ </s-alert>
72
+ ```
73
+
74
+ ### Reagindo ao fechamento
75
+
76
+ ```html
77
+ <s-alert
78
+ severity="success"
79
+ summary="Salvo"
80
+ detail="Suas alterações foram salvas."
81
+ (closed)="onAlertClosed()">
82
+ </s-alert>
83
+ ```
84
+
85
+ ## Acessibilidade
86
+
87
+ - O botão de fechar possui `aria-label` adequado para leitores de tela
88
+ - A severidade é comunicada visualmente por cor e ícone; use `summary` e `detail` descritivos para garantir que a informação seja acessível sem depender apenas da cor
89
+
90
+ ## Componentes relacionados
91
+
92
+ - [`Toast`](../toast/README.md) — notificações efêmeras que aparecem na borda da tela e somem automaticamente
@@ -0,0 +1,162 @@
1
+ # Autocomplete
2
+
3
+ ![Status](https://img.shields.io/badge/status-stable-brightgreen)
4
+
5
+ Componente de autocompletar com sugestões dinâmicas. Suporta seleção simples e múltipla (chips), carregamento lazy, virtualização de lista e acessibilidade ARIA completa. Implementa `ControlValueAccessor` para integração com Angular Forms.
6
+
7
+ ## Quando usar
8
+
9
+ - Campos de busca onde o usuário precisa selecionar um valor de uma lista grande
10
+ - Seleção de países, cidades, categorias ou qualquer entidade com muitas opções
11
+ - Campos onde o usuário pode adicionar múltiplos itens (modo múltiplo com chips)
12
+ - Quando a lista é carregada de uma API e não é viável trazê-la completa de uma vez (modo lazy)
13
+
14
+ ## Quando não usar
15
+
16
+ - Quando há poucas opções fixas e conhecidas — use `Select` em vez disso, que é mais simples e acessível
17
+ - Quando o usuário não precisa digitar para filtrar — use `Dropdown` com lista completa
18
+ - Quando a entrada é livre (qualquer texto) — use `Input` simples
19
+
20
+ ## Instalação
21
+
22
+ ```typescript
23
+ import { AutocompleteComponent } from '@seniorsistemas/angular-components/autocomplete';
24
+
25
+ @Component({ standalone: true, imports: [AutocompleteComponent] })
26
+ export class MeuComponent {}
27
+ ```
28
+
29
+ ## Uso básico
30
+
31
+ ```html
32
+ <s-autocomplete
33
+ formControlName="pais"
34
+ [suggestions]="sugestoesFiltradas"
35
+ suggestionLabel="nome"
36
+ placeholder="Buscar país..."
37
+ (completeMethod)="filtrar($event)">
38
+ </s-autocomplete>
39
+ ```
40
+
41
+ ## API
42
+
43
+ ### Inputs
44
+
45
+ | Propriedade | Tipo | Padrão | Obrigatório | Descrição |
46
+ |-------------|------|--------|:-----------:|-----------|
47
+ | `suggestions` | `T[]` | `[]` | não | Lista estática de sugestões exibidas no dropdown |
48
+ | `placeholder` | `string` | `undefined` | não | Texto de placeholder do campo |
49
+ | `suggestionLabel` | `keyof T` | `undefined` | não | Chave do objeto usada como texto de exibição |
50
+ | `suggestionValue` | `keyof T` | `undefined` | não | Chave do objeto cujo valor é emitido ao formulário |
51
+ | `delay` | `number` | `300` | não | Debounce em ms antes de acionar a busca |
52
+ | `minLengthToSearch` | `number` | `1` | não | Mínimo de caracteres para acionar a busca |
53
+ | `forceSelection` | `boolean` | `false` | não | Exige que o valor seja uma das sugestões |
54
+ | `multiple` | `boolean` | `false` | não | Habilita seleção de múltiplos itens como chips |
55
+ | `dropdown` | `boolean` | `false` | não | Exibe botão de seta para abrir a lista sem digitar |
56
+ | `checkmark` | `boolean` | `false` | não | Exibe ícone de check na opção selecionada |
57
+ | `lazy` | `boolean` | `false` | não | Ativa carregamento assíncrono via output `lazyLoad` |
58
+ | `virtualScroll` | `boolean` | `false` | não | Virtualiza a lista para melhor performance |
59
+ | `virtualScrollItemSize` | `number` | `37` | não | Altura em pixels de cada item no virtual scroll |
60
+ | `readonly` | `boolean` | `false` | não | Torna o campo somente leitura |
61
+ | `invalid` | `boolean` | `false` | não | Exibe estado de erro visual |
62
+ | `emptyMessage` | `string` | `undefined` | não | Mensagem quando nenhuma sugestão é encontrada |
63
+ | `dataKey` | `keyof T` | `undefined` | não | Chave para comparação de identidade entre opções |
64
+ | `inputClass` | `string` | `''` | não | Classe CSS adicional no `<input>` interno |
65
+ | `value` | `T \| null` | `undefined` | não | Valor selecionado (two-way binding, modo simples) |
66
+ | `values` | `T[]` | `[]` | não | Valores selecionados (two-way binding, modo múltiplo) |
67
+ | `disabled` | `boolean` | `false` | não | Estado desabilitado (two-way binding) |
68
+
69
+ ### Outputs
70
+
71
+ | Evento | Tipo | Descrição |
72
+ |--------|------|-----------|
73
+ | `completeMethod` | `OutputEmitterRef<{ query: string }>` | Emitido ao digitar — use para filtrar sugestões localmente |
74
+ | `lazyLoad` | `OutputEmitterRef<{ query: string; response: (data: T[]) => void }>` | Emitido no modo lazy — chame `response(data)` para fornecer os dados |
75
+ | `selected` | `OutputEmitterRef<T>` | Emitido ao selecionar uma sugestão |
76
+ | `unselected` | `OutputEmitterRef<T>` | Emitido ao remover uma sugestão (modo múltiplo) |
77
+ | `blurred` | `OutputEmitterRef<Event>` | Emitido quando o campo perde foco |
78
+ | `focused` | `OutputEmitterRef<Event>` | Emitido quando o campo recebe foco |
79
+ | `cleared` | `OutputEmitterRef<void>` | Emitido quando o campo é limpo |
80
+ | `keyUp` | `OutputEmitterRef<Event>` | Emitido a cada tecla pressionada |
81
+
82
+ ## Exemplos
83
+
84
+ ### Seleção simples com filtragem local
85
+
86
+ ```html
87
+ <form [formGroup]="form">
88
+ <s-autocomplete
89
+ formControlName="pais"
90
+ [suggestions]="sugestoesFiltradas"
91
+ suggestionLabel="nome"
92
+ placeholder="Buscar país..."
93
+ (completeMethod)="filtrar($event)">
94
+ </s-autocomplete>
95
+ </form>
96
+ ```
97
+
98
+ ```typescript
99
+ filtrar(event: { query: string }) {
100
+ this.sugestoesFiltradas = this.paises.filter(p =>
101
+ p.nome.toLowerCase().includes(event.query.toLowerCase())
102
+ );
103
+ }
104
+ ```
105
+
106
+ ### Seleção múltipla (chips)
107
+
108
+ ```html
109
+ <s-autocomplete
110
+ formControlName="paises"
111
+ [suggestions]="sugestoesFiltradas"
112
+ suggestionLabel="nome"
113
+ dataKey="codigo"
114
+ [multiple]="true"
115
+ [checkmark]="true"
116
+ placeholder="Adicionar países..."
117
+ (completeMethod)="filtrar($event)">
118
+ </s-autocomplete>
119
+ ```
120
+
121
+ ### Lazy loading (dados de API)
122
+
123
+ ```html
124
+ <s-autocomplete
125
+ formControlName="pais"
126
+ [suggestions]="sugestoes"
127
+ suggestionLabel="nome"
128
+ [lazy]="true"
129
+ placeholder="Buscar país..."
130
+ (lazyLoad)="onLazyLoad($event)">
131
+ </s-autocomplete>
132
+ ```
133
+
134
+ ```typescript
135
+ onLazyLoad(event: { query: string; response: (data: Pais[]) => void }) {
136
+ this.apiService.buscar(event.query).subscribe(data => event.response(data));
137
+ }
138
+ ```
139
+
140
+ ### Com dropdown (lista sem digitar)
141
+
142
+ ```html
143
+ <s-autocomplete
144
+ formControlName="pais"
145
+ [suggestions]="paises"
146
+ suggestionLabel="nome"
147
+ [dropdown]="true"
148
+ placeholder="Selecione um país...">
149
+ </s-autocomplete>
150
+ ```
151
+
152
+ ## Acessibilidade
153
+
154
+ - O elemento host recebe `role="combobox"` com `aria-expanded` e `aria-haspopup="listbox"`
155
+ - Navegação com **Seta para baixo/cima** move o foco entre as sugestões
156
+ - **Enter** ou **Tab** confirma a sugestão em foco
157
+ - **Escape** fecha a lista sem selecionar
158
+ - O dropdown é associado ao input via `aria-owns`
159
+
160
+ ## Componentes relacionados
161
+
162
+ - [`Chips`](../chips/README.md) — entrada de múltiplos valores em formato de tags sem sugestões de busca
@@ -0,0 +1,126 @@
1
+ # Badge
2
+
3
+ ![Status](https://img.shields.io/badge/status-stable-brightgreen)
4
+
5
+ Componente para exibir rótulos visuais compactos, tags, status, categorias e contadores. Suporta múltiplas cores, ícones e interatividade.
6
+
7
+ ## Quando usar
8
+
9
+ - Indicar o status de um registro (ativo, inativo, pendente, erro)
10
+ - Exibir tags ou categorias associadas a um item
11
+ - Mostrar contadores ou indicadores numéricos compactos
12
+ - Criar filtros clicáveis em listas e tabelas
13
+
14
+ ## Quando não usar
15
+
16
+ - Para notificações de contador sobrepostas a outros elementos — use o `badge` embutido no `Button`
17
+ - Para botões de ação — mesmo que visual seja semelhante, use `Button` para garantir acessibilidade
18
+ - Para exibir textos longos — o badge é destinado a rótulos curtos; use outro componente para descrições
19
+
20
+ ## Instalação
21
+
22
+ ```typescript
23
+ import { BadgeModule } from '@seniorsistemas/angular-components/badge';
24
+
25
+ @NgModule({
26
+ imports: [BadgeModule],
27
+ })
28
+ export class MeuModule {}
29
+ ```
30
+
31
+ ## Uso básico
32
+
33
+ ```html
34
+ <s-badge color="blue" type="pill" text="Ativo" />
35
+ ```
36
+
37
+ ## API
38
+
39
+ ### Inputs
40
+
41
+ | Propriedade | Tipo | Padrão | Obrigatório | Descrição |
42
+ |-------------|------|--------|:-----------:|-----------|
43
+ | `text` | `string` | `undefined` | não | Texto principal exibido dentro do badge |
44
+ | `title` | `string` | `undefined` | não | Rótulo exibido antes do texto (com dois pontos) |
45
+ | `type` | `BadgeTypes` | `'pill'` | não | Estilo visual: `'pill'` (arredondado) ou `'chip'` (retangular) |
46
+ | `color` | `BadgeColors` | `'blue'` | não | Cor do badge |
47
+ | `iconClass` | `string` | `undefined` | não | Classe do ícone exibido no badge (ex.: `'fa fa-check'`) |
48
+ | `iconPosition` | `'left' \| 'right'` | `'left'` | não | Posição do ícone em relação ao texto |
49
+ | `selectable` | `boolean` | `false` | não | Habilita modo clicável — emite `selected` ao clicar |
50
+ | `enableTruncateText` | `boolean` | `false` | não | Trunca texto longo com reticências e exibe tooltip |
51
+ | `infoSign` | `{ text: string; displayTime?: number }` | `undefined` | não | Ícone de informação com tooltip ao lado do badge |
52
+
53
+ ### Outputs
54
+
55
+ | Evento | Tipo | Descrição |
56
+ |--------|------|-----------|
57
+ | `selected` | `EventEmitter<string>` | Emitido ao clicar no badge, enviando o valor de `text` |
58
+
59
+ ### Tipos
60
+
61
+ ```typescript
62
+ type BadgeColors = 'red' | 'orange' | 'yellow' | 'blue' | 'green' | 'gray';
63
+
64
+ type BadgeTypes = 'pill' | 'chip';
65
+ ```
66
+
67
+ ## Exemplos
68
+
69
+ ### Cores disponíveis
70
+
71
+ ```html
72
+ <s-badge text="Sucesso" color="green" iconClass="fa fa-check-circle"></s-badge>
73
+ <s-badge text="Erro" color="red" iconClass="fa fa-times"></s-badge>
74
+ <s-badge text="Atenção" color="orange" iconClass="fa fa-exclamation-triangle"></s-badge>
75
+ <s-badge text="Pendente" color="yellow" iconClass="fa fa-clock"></s-badge>
76
+ <s-badge text="Informação" color="blue" iconClass="fa fa-info-circle"></s-badge>
77
+ <s-badge text="Inativo" color="gray"></s-badge>
78
+ ```
79
+
80
+ ### Com título (par rótulo:valor)
81
+
82
+ ```html
83
+ <s-badge title="Status" text="Ativo" color="green"></s-badge>
84
+ <s-badge title="Prioridade" text="Alta" color="red"></s-badge>
85
+ ```
86
+
87
+ ### Badge clicável (filtro)
88
+
89
+ ```html
90
+ <s-badge
91
+ text="Angular"
92
+ color="blue"
93
+ [selectable]="true"
94
+ (selected)="filtrarPorTag($event)">
95
+ </s-badge>
96
+ ```
97
+
98
+ ### Texto truncado com tooltip
99
+
100
+ ```html
101
+ <s-badge
102
+ text="Este é um texto muito longo que será truncado automaticamente"
103
+ color="blue"
104
+ [enableTruncateText]="true">
105
+ </s-badge>
106
+ ```
107
+
108
+ ### Com ícone de informação
109
+
110
+ ```html
111
+ <s-badge
112
+ text="Premium"
113
+ color="blue"
114
+ [infoSign]="{ text: 'Plano com acesso completo a todos os recursos', displayTime: 3000 }">
115
+ </s-badge>
116
+ ```
117
+
118
+ ## Acessibilidade
119
+
120
+ - Quando `selectable` está ativo, o elemento recebe foco e emite evento ao clicar
121
+ - Use `title` para fornecer contexto semântico ao rótulo (ex.: "Status: Ativo")
122
+ - Quando `enableTruncateText` está ativo, o tooltip exibe o texto completo para leitores de tela
123
+
124
+ ## Componentes relacionados
125
+
126
+ - [`Button`](../button/README.md) — quando a ação clicável precisa ser claramente comunicada como botão
@@ -0,0 +1,122 @@
1
+ # BignumberInput
2
+
3
+ ![Status](https://img.shields.io/badge/status-deprecated-red)
4
+
5
+ > **Descontinuado** — Use a diretiva [`sNumericMask`](../numeric-mask/README.md) em novos projetos.
6
+
7
+ Diretiva de máscara para campos de entrada de números de grande precisão. Permite configurar precisão total, casas decimais, separadores e sinal negativo.
8
+
9
+ ## Quando usar
10
+
11
+ - Manutenção de formulários legados que já utilizam `sBignumberInput`
12
+
13
+ ## Quando não usar
14
+
15
+ - Em novos desenvolvimentos — use `sNumericMask` que é a diretiva recomendada e mantida ativamente
16
+ - Quando não há necessidade de controle de precisão total de dígitos — `sNumericMask` com `maxDecimalPlaces` atende a maioria dos casos
17
+
18
+ ## Migração
19
+
20
+ ```html
21
+ <!-- Antes -->
22
+ <input sBignumberInput [precision]="15" [scale]="2" [(ngModel)]="value" />
23
+
24
+ <!-- Depois -->
25
+ <input sNumericMask [maxDecimalPlaces]="2" [(ngModel)]="value" />
26
+ ```
27
+
28
+ ## Instalação (legado)
29
+
30
+ ```typescript
31
+ import { BignumberInputModule } from '@seniorsistemas/angular-components/bignumber-input';
32
+
33
+ @NgModule({
34
+ imports: [BignumberInputModule],
35
+ })
36
+ export class MeuModule {}
37
+ ```
38
+
39
+ ## Uso básico
40
+
41
+ ```html
42
+ <input sBignumberInput [precision]="15" [scale]="2" [allowNegative]="false" [(ngModel)]="valor" />
43
+ ```
44
+
45
+ ## API
46
+
47
+ ### Inputs
48
+
49
+ | Propriedade | Tipo | Padrão | Obrigatório | Descrição |
50
+ |-------------|------|--------|:-----------:|-----------|
51
+ | `precision` | `number` | `15` | não | Total de dígitos significativos aceitos (parte inteira + decimal) |
52
+ | `scale` | `number` | `0` | não | **Descontinuado** — use `minDecimalPlaces`/`maxDecimalPlaces`. Casas decimais |
53
+ | `minDecimalPlaces` | `number` | `0` | não | Mínimo de casas decimais exibidas |
54
+ | `maxDecimalPlaces` | `number` | `0` | não | Máximo de casas decimais aceitas |
55
+ | `allowNegative` | `boolean` | `true` | não | Permite entrada de valores negativos |
56
+ | `decimalSeparator` | `string` | locale | não | Separador decimal personalizado |
57
+ | `thousandSeparator` | `string` | locale | não | Separador de milhar (preferir `thousandSeparator`) |
58
+ | `thousandsSeparator` | `string` | `undefined` | não | **Descontinuado** — use `thousandSeparator` |
59
+ | `placeholder` | `string` | `undefined` | não | Texto de placeholder do campo |
60
+ | `alignTo` | `'left' \| 'right'` | `'right'` | não | **Descontinuado** — não tem mais efeito; alinhamento é sempre `right` |
61
+
62
+ ### Outputs
63
+
64
+ | Evento | Tipo | Descrição |
65
+ |--------|------|-----------|
66
+ | `pasteRejected` | `OutputEmitterRef<string>` | Emitido quando uma colagem é rejeitada por exceder `precision` |
67
+
68
+ ### Tipos
69
+
70
+ ```typescript
71
+ /** @deprecated */
72
+ enum BignumberAlignmentOption {
73
+ RIGHT = 'right',
74
+ LEFT = 'left',
75
+ }
76
+ ```
77
+
78
+ ## Exemplos
79
+
80
+ ### Campo inteiro
81
+
82
+ ```html
83
+ <input
84
+ sBignumberInput
85
+ [precision]="15"
86
+ [scale]="0"
87
+ [(ngModel)]="valor"
88
+ />
89
+ ```
90
+
91
+ ### Campo com 2 casas decimais
92
+
93
+ ```html
94
+ <input
95
+ sBignumberInput
96
+ [precision]="15"
97
+ [scale]="2"
98
+ [(ngModel)]="valor"
99
+ />
100
+ ```
101
+
102
+ ### Somente positivos, sem separador de milhar
103
+
104
+ ```html
105
+ <input
106
+ sBignumberInput
107
+ [precision]="10"
108
+ [scale]="2"
109
+ [allowNegative]="false"
110
+ thousandsSeparator=""
111
+ [(ngModel)]="valor"
112
+ />
113
+ ```
114
+
115
+ ## Acessibilidade
116
+
117
+ - A diretiva se aplica a um `<input>` nativo — certifique-se de associar um `<label>` via `for` ou `aria-label`
118
+ - O campo recebe `type="tel"` automaticamente para exibir teclado numérico em dispositivos móveis
119
+
120
+ ## Componentes relacionados
121
+
122
+ - [`sNumericMask`](../numeric-mask/README.md) — substituto recomendado, ativamente mantido