@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.
- package/accordion/README.md +166 -0
- package/alert/README.md +92 -0
- package/autocomplete/README.md +162 -0
- package/badge/README.md +126 -0
- package/bignumber-input/README.md +122 -0
- package/breadcrumb/README.md +144 -0
- package/button/README.md +159 -0
- package/calendar-mask/README.md +89 -0
- package/card/README.md +133 -0
- package/chat/README.md +130 -0
- package/checkbox/README.md +108 -0
- package/checkbox-list/README.md +149 -0
- package/chips/README.md +152 -0
- package/code-editor/README.md +149 -0
- package/collapse-link/README.md +128 -0
- package/confirm-dialog/README.md +105 -0
- package/content-generator/README.md +111 -0
- package/control-errors/README.md +92 -0
- package/country-phone-picker/README.md +121 -0
- package/currency/README.md +90 -0
- package/custom-fields/README.md +142 -0
- package/dialog/README.md +152 -0
- package/dynamic-form/README.md +176 -0
- package/dynamic-form/dynamic-form/components/lookup/lookup.component.d.ts +2 -2
- package/dynamic-form/dynamic-form/components/lookup/types/lookup-models.d.ts +4 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.d.ts +2 -1
- package/dynamic-form/public-api.d.ts +1 -0
- package/editable-overlay/README.md +98 -0
- package/empty-state/README.md +134 -0
- package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +7 -10
- package/esm2022/dynamic-form/dynamic-form/components/lookup/types/lookup-models.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.mjs +1 -1
- package/esm2022/dynamic-form/public-api.mjs +1 -1
- package/esm2022/loading-state/lib/loading-state/loading-state.component.mjs +4 -4
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +4 -7
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-loading-state.mjs +3 -3
- package/fesm2022/seniorsistemas-angular-components-loading-state.mjs.map +1 -1
- package/fieldset/README.md +135 -0
- package/file-picker/README.md +162 -0
- package/file-upload/README.md +23 -7
- package/gantt/README.md +173 -0
- package/global-search/README.md +151 -0
- package/grid-menu/README.md +123 -0
- package/help-popover/README.md +134 -0
- package/ia-insight/README.md +24 -6
- package/image-cropper/README.md +140 -0
- package/infinite-scroll/README.md +130 -0
- package/info-sign/README.md +111 -0
- package/inline-edit/README.md +139 -0
- package/insights/README.md +159 -0
- package/interactive-content/README.md +120 -0
- package/kanban/README.md +184 -0
- package/label-value/README.md +154 -0
- package/loading-state/README.md +141 -0
- package/localized-number-input/README.md +128 -0
- package/mouse-events/README.md +157 -0
- package/navigation-button/README.md +160 -0
- package/numeric/README.md +147 -0
- package/numeric-mask/README.md +170 -0
- package/object-card/README.md +158 -0
- package/package.json +7 -7
- package/paginator/README.md +121 -0
- package/panel/README.md +147 -0
- package/password-strength/README.md +144 -0
- package/picklist/README.md +170 -0
- package/pin-code-field/README.md +137 -0
- package/product-header/README.md +33 -6
- package/profile-picture-picker/README.md +159 -0
- package/progressbar/README.md +136 -0
- package/radio-button/README.md +117 -0
- package/rating-scale/README.md +154 -0
- package/select/README.md +147 -0
- package/select-button/README.md +137 -0
- package/sidebar/README.md +117 -0
- package/slide-in-bar/README.md +122 -0
- package/slider/README.md +127 -0
- package/speech-recognition/README.md +104 -0
- package/split-button/README.md +126 -0
- package/spotlight/README.md +200 -0
- package/star-rating/README.md +127 -0
- package/stats-card/README.md +135 -0
- package/stepper/README.md +164 -0
- package/switch/README.md +125 -0
- package/table/README.md +185 -0
- package/text-area-ia/README.md +17 -6
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# Accordion
|
|
2
|
+
|
|
3
|
+

|
|
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
|
package/alert/README.md
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Alert
|
|
2
|
+
|
|
3
|
+

|
|
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
|
+

|
|
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
|
package/badge/README.md
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# Badge
|
|
2
|
+
|
|
3
|
+

|
|
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
|
+

|
|
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
|