@dev-tcloud/tcloud-ui 6.15.0 → 6.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/tcloud-ui-accordion.md +345 -0
- package/docs/tcloud-ui-actions.md +88 -0
- package/docs/tcloud-ui-alert-banner.md +104 -0
- package/docs/tcloud-ui-array-to-text.md +361 -0
- package/docs/tcloud-ui-breadcrumb.md +103 -0
- package/docs/tcloud-ui-bytes.md +109 -0
- package/docs/tcloud-ui-calendar.md +387 -0
- package/docs/tcloud-ui-card-accordion.md +266 -0
- package/docs/tcloud-ui-card-title.md +47 -0
- package/docs/tcloud-ui-card.md +40 -0
- package/docs/tcloud-ui-choice-issues.md +59 -0
- package/docs/tcloud-ui-cnpj.md +102 -0
- package/docs/tcloud-ui-container.md +171 -0
- package/docs/tcloud-ui-cpf.md +102 -0
- package/docs/tcloud-ui-currency.md +271 -0
- package/docs/tcloud-ui-data-list.md +91 -0
- package/docs/tcloud-ui-datebr.md +139 -0
- package/docs/tcloud-ui-datepicker-time.md +191 -0
- package/docs/tcloud-ui-datepicker.md +186 -0
- package/docs/tcloud-ui-dropdown-multi.md +444 -0
- package/docs/tcloud-ui-dropdown.md +369 -0
- package/docs/tcloud-ui-el-copy.md +113 -0
- package/docs/tcloud-ui-empty-content.md +412 -0
- package/docs/tcloud-ui-faq.md +496 -0
- package/docs/tcloud-ui-filter-bar.md +86 -0
- package/docs/tcloud-ui-filters.md +337 -0
- package/docs/tcloud-ui-hover-parent.md +467 -0
- package/docs/tcloud-ui-icon-button.md +104 -0
- package/docs/tcloud-ui-input-container.md +520 -0
- package/docs/tcloud-ui-input-password.md +258 -0
- package/docs/tcloud-ui-input-search.md +314 -0
- package/docs/tcloud-ui-label-token.md +286 -0
- package/docs/tcloud-ui-legend.md +72 -0
- package/docs/tcloud-ui-line-step-circle.md +98 -0
- package/docs/tcloud-ui-line-step-title.md +194 -0
- package/docs/tcloud-ui-linha-logo.md +550 -0
- package/docs/tcloud-ui-loading.md +88 -0
- package/docs/tcloud-ui-message.md +539 -0
- package/docs/tcloud-ui-modal.md +196 -0
- package/docs/tcloud-ui-monthname.md +123 -0
- package/docs/tcloud-ui-multi-input.md +290 -0
- package/docs/tcloud-ui-multi-select.md +311 -0
- package/docs/tcloud-ui-multiples-values.md +157 -0
- package/docs/tcloud-ui-not-found.md +88 -0
- package/docs/tcloud-ui-number-step.md +134 -0
- package/docs/tcloud-ui-pagination.md +579 -0
- package/docs/tcloud-ui-progress-bar.md +65 -0
- package/docs/tcloud-ui-radio.md +83 -0
- package/docs/tcloud-ui-reorder-items.md +418 -0
- package/docs/tcloud-ui-respective.md +167 -0
- package/docs/tcloud-ui-scroll-box.md +109 -0
- package/docs/tcloud-ui-search-bar.md +88 -0
- package/docs/tcloud-ui-search-in-object.md +143 -0
- package/docs/tcloud-ui-search-input.md +74 -0
- package/docs/tcloud-ui-skeleton-loading.md +394 -0
- package/docs/tcloud-ui-slide-toggle.md +210 -0
- package/docs/tcloud-ui-statusinfo.md +138 -0
- package/docs/tcloud-ui-tab-group.md +376 -0
- package/docs/tcloud-ui-tab-menu.md +109 -0
- package/docs/tcloud-ui-table.md +96 -0
- package/docs/tcloud-ui-tag.md +379 -0
- package/docs/tcloud-ui-tc-badge.md +168 -0
- package/docs/tcloud-ui-tc-btn.md +189 -0
- package/docs/tcloud-ui-tc-colors.md +204 -0
- package/docs/tcloud-ui-tc-form-control.md +200 -0
- package/docs/tcloud-ui-tc-text.md +139 -0
- package/docs/tcloud-ui-tc-title.md +118 -0
- package/docs/tcloud-ui-tcloud-form.md +55 -0
- package/docs/tcloud-ui-toast.md +83 -0
- package/docs/tcloud-ui-tooltip.md +88 -0
- package/docs/tcloud-ui-topology.md +232 -0
- package/docs/tcloud-ui-upload-area.md +195 -0
- package/docs/tcloud-ui-welcome.md +112 -0
- package/docs/tcloud-ui-wizard-steps.md +103 -0
- package/js/tcloud-ui-app.js +11 -0
- package/package.json +1 -1
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
# Multi Select
|
|
2
|
+
|
|
3
|
+
## Características
|
|
4
|
+
- Componente standalone para seleção múltipla de itens a partir de uma lista predefinida.
|
|
5
|
+
- Select dropdown com botão de adicionar (+) para marcar itens como ativos.
|
|
6
|
+
- Itens selecionados exibidos como tags/labels com botão de remoção (x).
|
|
7
|
+
- Itens já selecionados são removidos automaticamente do dropdown (apenas itens não ativos aparecem).
|
|
8
|
+
- Suporte a ngModel (two-way binding) via ControlValueAccessor.
|
|
9
|
+
- Validação com `required` via NG_VALIDATORS: exige ao menos um item ativo.
|
|
10
|
+
- Suporte a estados: `disabled` e `loading`.
|
|
11
|
+
- Opção de exibir `description` ou `value` nas tags selecionadas.
|
|
12
|
+
- Largura máxima configurável para labels.
|
|
13
|
+
- Modo `showInput`: oculta o select, exibindo apenas os itens selecionados.
|
|
14
|
+
|
|
15
|
+
## Instalação
|
|
16
|
+
```ts
|
|
17
|
+
import { TCloudUiMultiSelectComponent } from 'projects/tcloud-ui/src/public-api';
|
|
18
|
+
|
|
19
|
+
@Component({
|
|
20
|
+
selector: 'app-example',
|
|
21
|
+
standalone: true,
|
|
22
|
+
imports: [TCloudUiMultiSelectComponent],
|
|
23
|
+
template: `
|
|
24
|
+
<tcloud-ui-multi-select
|
|
25
|
+
[tcList]="options"
|
|
26
|
+
(tcChange)="onSelectionChanged($event)">
|
|
27
|
+
</tcloud-ui-multi-select>
|
|
28
|
+
`
|
|
29
|
+
})
|
|
30
|
+
export class ExampleComponent {
|
|
31
|
+
options = [
|
|
32
|
+
{ description: 'Opção 1', value: 'opt_1', active: false },
|
|
33
|
+
{ description: 'Opção 2', value: 'opt_2', active: false }
|
|
34
|
+
];
|
|
35
|
+
|
|
36
|
+
onSelectionChanged(event: any[]) {
|
|
37
|
+
console.log('Itens selecionados:', event);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Propriedades (API)
|
|
43
|
+
### Inputs
|
|
44
|
+
| Nome | Tipo | Descrição | Valor Default |
|
|
45
|
+
| --- | --- | --- | --- |
|
|
46
|
+
| tcList | IOptions[] | Array de opções disponíveis para seleção. | undefined |
|
|
47
|
+
| placeholder | string | Texto exibido no select quando nenhum item está selecionado. | 'Selecione um item' |
|
|
48
|
+
| disabled | boolean | Se true, desabilita select e botões. | false |
|
|
49
|
+
| loading | boolean | Se true, desabilita select e botões (estado de carregamento). | false |
|
|
50
|
+
| required | string | Se definido, habilita validação de pelo menos um item ativo. | undefined |
|
|
51
|
+
| maxWidthLabel | string | Largura máxima de cada label selecionada (ex: '95px'). | undefined |
|
|
52
|
+
| showDescriptionInValue | boolean | Se true, exibe `description` nas tags. Se false, exibe `value`. | false |
|
|
53
|
+
| showInput | boolean | Se true, oculta o select dropdown e exibe apenas os itens selecionados. | false |
|
|
54
|
+
| ngModel | IOptions[] | Array de opções para two-way binding. | undefined |
|
|
55
|
+
|
|
56
|
+
### Outputs
|
|
57
|
+
| Nome | Tipo de Evento | Descrição |
|
|
58
|
+
| --- | --- | --- |
|
|
59
|
+
| tcChange | EventEmitter<any[]> | Emite array contendo apenas os itens ativos ao adicionar ou remover. |
|
|
60
|
+
| onChange | EventEmitter<any> | Emite alterações internas. |
|
|
61
|
+
|
|
62
|
+
## Estrutura de Dados (IOptions)
|
|
63
|
+
```ts
|
|
64
|
+
interface IOptions {
|
|
65
|
+
description: string; // Texto exibido no dropdown e nas tags
|
|
66
|
+
value: any; // Valor do item
|
|
67
|
+
active?: boolean; // Se true, item está selecionado
|
|
68
|
+
block?: boolean; // Flag opcional de bloqueio
|
|
69
|
+
infoText?: string; // Texto informativo opcional
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Exemplos de Uso
|
|
74
|
+
### Uso Básico - Modo Simples
|
|
75
|
+
```ts
|
|
76
|
+
export class ExampleComponent {
|
|
77
|
+
options: IOptions[] = [
|
|
78
|
+
{ description: 'Opção 1', value: 'opt_1', active: true },
|
|
79
|
+
{ description: 'Opção 2', value: 'opt_2' },
|
|
80
|
+
{ description: 'Opção 3', value: 'opt_3', active: true },
|
|
81
|
+
{ description: 'Opção 4', value: 'opt_4' }
|
|
82
|
+
];
|
|
83
|
+
|
|
84
|
+
onSelectionChanged(event: any[]) {
|
|
85
|
+
console.log('Selecionados:', event);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
```html
|
|
91
|
+
<tcloud-ui-multi-select
|
|
92
|
+
[tcList]="options"
|
|
93
|
+
(tcChange)="onSelectionChanged($event)"
|
|
94
|
+
[showDescriptionInValue]="true"
|
|
95
|
+
[maxWidthLabel]="'95px'">
|
|
96
|
+
</tcloud-ui-multi-select>
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Com Placeholder Customizado
|
|
100
|
+
```html
|
|
101
|
+
<tcloud-ui-multi-select
|
|
102
|
+
[tcList]="options"
|
|
103
|
+
[placeholder]="'Selecione uma opção'"
|
|
104
|
+
[showDescriptionInValue]="true"
|
|
105
|
+
[maxWidthLabel]="'95px'"
|
|
106
|
+
(tcChange)="onSelectionChanged($event)">
|
|
107
|
+
</tcloud-ui-multi-select>
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Com Validação Required (ngModel)
|
|
111
|
+
```html
|
|
112
|
+
<form #formulario="ngForm">
|
|
113
|
+
<tcloud-ui-multi-select
|
|
114
|
+
name="selectedOptions"
|
|
115
|
+
[(ngModel)]="selectedItems"
|
|
116
|
+
required>
|
|
117
|
+
</tcloud-ui-multi-select>
|
|
118
|
+
|
|
119
|
+
<p *ngIf="formulario.invalid">
|
|
120
|
+
É necessário selecionar ao menos um item.
|
|
121
|
+
</p>
|
|
122
|
+
|
|
123
|
+
<button [disabled]="formulario.invalid">Salvar</button>
|
|
124
|
+
</form>
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Componente:
|
|
128
|
+
```ts
|
|
129
|
+
export class FormComponent {
|
|
130
|
+
selectedItems: IOptions[] = [
|
|
131
|
+
{ description: 'Opção 1', value: 'opt_1', active: false },
|
|
132
|
+
{ description: 'Opção 2', value: 'opt_2', active: false }
|
|
133
|
+
];
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Modo Somente Leitura (showInput)
|
|
138
|
+
```html
|
|
139
|
+
<!-- Exibe apenas os itens selecionados, sem dropdown -->
|
|
140
|
+
<tcloud-ui-multi-select
|
|
141
|
+
[tcList]="options"
|
|
142
|
+
[showInput]="true"
|
|
143
|
+
[showDescriptionInValue]="true"
|
|
144
|
+
[maxWidthLabel]="'95px'"
|
|
145
|
+
(tcChange)="onSelectionChanged($event)">
|
|
146
|
+
</tcloud-ui-multi-select>
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Exibindo Value nas Tags
|
|
150
|
+
```html
|
|
151
|
+
<!-- Exibe o value ao invés da description -->
|
|
152
|
+
<tcloud-ui-multi-select
|
|
153
|
+
[tcList]="options"
|
|
154
|
+
[showDescriptionInValue]="false"
|
|
155
|
+
(tcChange)="onSelectionChanged($event)">
|
|
156
|
+
</tcloud-ui-multi-select>
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## Uso Avançado
|
|
160
|
+
### Com ngModel e Two-Way Binding
|
|
161
|
+
```ts
|
|
162
|
+
export class SelectComponent {
|
|
163
|
+
options: IOptions[] = [
|
|
164
|
+
{ value: 'opcao1', description: 'Opção 1', active: true },
|
|
165
|
+
{ value: 'opcao2', description: 'Opção 2', active: true },
|
|
166
|
+
{ value: 'opcao3', description: 'Opção 3', active: false }
|
|
167
|
+
];
|
|
168
|
+
|
|
169
|
+
onSelectionChanged(event: any[]) {
|
|
170
|
+
console.log('Itens ativos:', event);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
```html
|
|
176
|
+
<tcloud-ui-multi-select
|
|
177
|
+
[(ngModel)]="options"
|
|
178
|
+
[placeholder]="'Selecione uma opção'"
|
|
179
|
+
[showDescriptionInValue]="true"
|
|
180
|
+
[maxWidthLabel]="'95px'"
|
|
181
|
+
(tcChange)="onSelectionChanged($event)">
|
|
182
|
+
</tcloud-ui-multi-select>
|
|
183
|
+
|
|
184
|
+
<pre>{{ options | json }}</pre>
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### Seleção de Permissões
|
|
188
|
+
```ts
|
|
189
|
+
export class PermissionsComponent {
|
|
190
|
+
permissions: IOptions[] = [
|
|
191
|
+
{ description: 'Leitura', value: 'read', active: true },
|
|
192
|
+
{ description: 'Escrita', value: 'write', active: false },
|
|
193
|
+
{ description: 'Exclusão', value: 'delete', active: false },
|
|
194
|
+
{ description: 'Administração', value: 'admin', active: false }
|
|
195
|
+
];
|
|
196
|
+
|
|
197
|
+
activePermissions: any[] = [];
|
|
198
|
+
|
|
199
|
+
onPermissionsChanged(event: any[]) {
|
|
200
|
+
this.activePermissions = event;
|
|
201
|
+
console.log('Permissões ativas:', this.activePermissions.map(p => p.value));
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
```html
|
|
207
|
+
<div>
|
|
208
|
+
<label>Permissões do Usuário:</label>
|
|
209
|
+
<tcloud-ui-multi-select
|
|
210
|
+
[tcList]="permissions"
|
|
211
|
+
[placeholder]="'Adicionar permissão'"
|
|
212
|
+
[showDescriptionInValue]="true"
|
|
213
|
+
[maxWidthLabel]="'120px'"
|
|
214
|
+
(tcChange)="onPermissionsChanged($event)">
|
|
215
|
+
</tcloud-ui-multi-select>
|
|
216
|
+
|
|
217
|
+
<p>Permissões ativas: {{ activePermissions.length }}</p>
|
|
218
|
+
</div>
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### Seleção de Tags com Estado Loading
|
|
222
|
+
```ts
|
|
223
|
+
export class TagsComponent {
|
|
224
|
+
tags: IOptions[] = [];
|
|
225
|
+
isLoading: boolean = false;
|
|
226
|
+
|
|
227
|
+
loadTags() {
|
|
228
|
+
this.isLoading = true;
|
|
229
|
+
setTimeout(() => {
|
|
230
|
+
this.tags = [
|
|
231
|
+
{ description: 'Angular', value: 'angular', active: false },
|
|
232
|
+
{ description: 'React', value: 'react', active: false },
|
|
233
|
+
{ description: 'Vue', value: 'vue', active: false },
|
|
234
|
+
{ description: 'Node.js', value: 'nodejs', active: false },
|
|
235
|
+
{ description: 'TypeScript', value: 'typescript', active: false }
|
|
236
|
+
];
|
|
237
|
+
this.isLoading = false;
|
|
238
|
+
}, 2000);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
```html
|
|
244
|
+
<tcloud-ui-multi-select
|
|
245
|
+
[tcList]="tags"
|
|
246
|
+
[loading]="isLoading"
|
|
247
|
+
[placeholder]="'Selecione tecnologias'"
|
|
248
|
+
[showDescriptionInValue]="true">
|
|
249
|
+
</tcloud-ui-multi-select>
|
|
250
|
+
|
|
251
|
+
<button (click)="loadTags()" [disabled]="isLoading">Carregar Tags</button>
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### Em Formulário com Múltiplos Multi-Selects
|
|
255
|
+
```ts
|
|
256
|
+
export class FormComponent {
|
|
257
|
+
categories: IOptions[] = [
|
|
258
|
+
{ description: 'Software', value: 'sw', active: false },
|
|
259
|
+
{ description: 'Hardware', value: 'hw', active: false },
|
|
260
|
+
{ description: 'Serviços', value: 'svc', active: false }
|
|
261
|
+
];
|
|
262
|
+
|
|
263
|
+
priorities: IOptions[] = [
|
|
264
|
+
{ description: 'Baixa', value: 'low', active: false },
|
|
265
|
+
{ description: 'Média', value: 'medium', active: false },
|
|
266
|
+
{ description: 'Alta', value: 'high', active: false },
|
|
267
|
+
{ description: 'Crítica', value: 'critical', active: false }
|
|
268
|
+
];
|
|
269
|
+
}
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
```html
|
|
273
|
+
<form #form="ngForm">
|
|
274
|
+
<div>
|
|
275
|
+
<label>Categorias:</label>
|
|
276
|
+
<tcloud-ui-multi-select
|
|
277
|
+
name="categories"
|
|
278
|
+
[(ngModel)]="categories"
|
|
279
|
+
required
|
|
280
|
+
[placeholder]="'Selecione categorias'"
|
|
281
|
+
[showDescriptionInValue]="true">
|
|
282
|
+
</tcloud-ui-multi-select>
|
|
283
|
+
</div>
|
|
284
|
+
|
|
285
|
+
<div>
|
|
286
|
+
<label>Prioridades:</label>
|
|
287
|
+
<tcloud-ui-multi-select
|
|
288
|
+
name="priorities"
|
|
289
|
+
[(ngModel)]="priorities"
|
|
290
|
+
required
|
|
291
|
+
[placeholder]="'Selecione prioridades'"
|
|
292
|
+
[showDescriptionInValue]="true">
|
|
293
|
+
</tcloud-ui-multi-select>
|
|
294
|
+
</div>
|
|
295
|
+
|
|
296
|
+
<button [disabled]="form.invalid">Salvar</button>
|
|
297
|
+
</form>
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
## Validação
|
|
301
|
+
- Quando `required` é definido, o componente valida se há ao menos um item com `active: true`.
|
|
302
|
+
- Integração com Angular Forms via `NG_VALIDATORS`.
|
|
303
|
+
- O controle é marcado como inválido quando nenhum item está ativo e `required` está definido.
|
|
304
|
+
|
|
305
|
+
## Diferença entre Multi Select e Multi Input
|
|
306
|
+
| Característica | Multi Select | Multi Input |
|
|
307
|
+
| --- | --- | --- |
|
|
308
|
+
| Entrada de dados | Select dropdown com opções fixas | Input de texto livre |
|
|
309
|
+
| Itens | Predefinidos via `tcList` | Digitados pelo usuário |
|
|
310
|
+
| Ativação | Toggle `active` em item existente | Adiciona novo item `{ value }` |
|
|
311
|
+
| Remoção | Volta item para dropdown (`active: false`) | Remove item do array |
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# TCloudUiMultiplesValues
|
|
2
|
+
|
|
3
|
+
O componente `tcloud-ui-multiples-values` permite a entrada e gerenciamento de múltiplos valores em formato de lista. Os valores podem ser inseridos manualmente via input de texto (com suporte a delimitadores para inserção em lote) ou selecionados a partir de uma lista predefinida (`listItems`) utilizando o componente `tcloud-ui-data-list`. Cada valor adicionado é exibido como item na lista com opção de remoção individual. Implementa `ControlValueAccessor` e `NG_VALIDATORS`, sendo compatível com formulários reativos e template-driven.
|
|
4
|
+
|
|
5
|
+
## Características
|
|
6
|
+
|
|
7
|
+
- Entrada de múltiplos valores via input de texto ou seleção em data list
|
|
8
|
+
- Suporte a delimitador configurável para inserção de múltiplos valores de uma vez
|
|
9
|
+
- Conversão automática para uppercase ou lowercase
|
|
10
|
+
- Remoção de valores duplicados automaticamente
|
|
11
|
+
- Validação por padrão regex (`pattern`)
|
|
12
|
+
- Dropdown com lista dos valores adicionados e busca integrada (quando mais de 5 itens)
|
|
13
|
+
- Contador de registros adicionados
|
|
14
|
+
- Botão para limpar toda a lista (quando mais de 5 itens)
|
|
15
|
+
- Controle de largura máxima dos labels com `maxWidthLabel`
|
|
16
|
+
- Compatível com `ngModel` e formulários Angular (ControlValueAccessor + NG_VALIDATORS)
|
|
17
|
+
- Posicionamento automático do dropdown (abre para cima quando não há espaço abaixo)
|
|
18
|
+
|
|
19
|
+
## Instalação
|
|
20
|
+
|
|
21
|
+
Importe o componente diretamente no módulo ou componente standalone:
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
import { TCloudUiMultiplesValuesComponent } from 'tcloud-ui';
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Propriedades
|
|
28
|
+
|
|
29
|
+
### Inputs
|
|
30
|
+
|
|
31
|
+
| Propriedade | Tipo | Padrão | Descrição |
|
|
32
|
+
|----------------------|-----------------------------------------------|---------|--------------------------------------------------------------------------------------------|
|
|
33
|
+
| `listItems` | `{ description: string, value: any, disabled?: boolean }[]` | — | Lista de opções predefinidas exibidas em um data list para seleção |
|
|
34
|
+
| `openValuesInChange` | `boolean` | `true` | Abre automaticamente o dropdown dos valores ao adicionar um novo item |
|
|
35
|
+
| `useBtnAdd` | `boolean` | `true` | Exibe o botão de adicionar (`+`) ao lado do input |
|
|
36
|
+
| `pattern` | `RegExp` | — | Expressão regular para validação do valor antes de adicioná-lo à lista |
|
|
37
|
+
| `delimiter` | `string` | `','` | Caractere delimitador para dividir a entrada em múltiplos valores de uma vez |
|
|
38
|
+
| `placeholder` | `string` | — | Texto placeholder exibido no input |
|
|
39
|
+
| `disabled` | `boolean` | `false` | Desabilita o input e os botões de ação |
|
|
40
|
+
| `loading` | `boolean` | `false` | Indica estado de carregamento, desabilita botões de remoção |
|
|
41
|
+
| `required` | `boolean` | — | Quando definido, ativa a validação de obrigatoriedade (lista não pode estar vazia) |
|
|
42
|
+
| `search` | `boolean` | `true` | Habilita campo de busca dentro do data list (quando `listItems` está configurado) |
|
|
43
|
+
| `uppercase` | `boolean` | `false` | Converte automaticamente os valores inseridos para letras maiúsculas |
|
|
44
|
+
| `lowercase` | `boolean` | `false` | Converte automaticamente os valores inseridos para letras minúsculas |
|
|
45
|
+
| `maxWidthLabel` | `string` | — | Define a largura máxima dos labels na lista de valores (ex: `'50px'`, `'100px'`) |
|
|
46
|
+
|
|
47
|
+
### Outputs
|
|
48
|
+
|
|
49
|
+
| Evento | Tipo | Descrição |
|
|
50
|
+
|------------|-------------------|------------------------------------------------------------------|
|
|
51
|
+
| `tcChange` | `EventEmitter<any>` | Emitido sempre que a lista de valores é alterada (adição ou remoção) |
|
|
52
|
+
|
|
53
|
+
## Exemplos de Uso
|
|
54
|
+
|
|
55
|
+
### Básico — Entrada manual com delimitador
|
|
56
|
+
|
|
57
|
+
```html
|
|
58
|
+
<tcloud-ui-multiples-values
|
|
59
|
+
[(ngModel)]="valores"
|
|
60
|
+
delimiter=";"
|
|
61
|
+
placeholder="Informe os valores separados por ;"
|
|
62
|
+
(tcChange)="onValoresChange($event)">
|
|
63
|
+
</tcloud-ui-multiples-values>
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
```typescript
|
|
67
|
+
import { TCloudUiMultiplesValuesComponent } from 'tcloud-ui';
|
|
68
|
+
|
|
69
|
+
@Component({
|
|
70
|
+
standalone: true,
|
|
71
|
+
imports: [TCloudUiMultiplesValuesComponent],
|
|
72
|
+
template: `...`
|
|
73
|
+
})
|
|
74
|
+
export class ExemploBasicoComponent {
|
|
75
|
+
valores: string[] = [];
|
|
76
|
+
|
|
77
|
+
onValoresChange(itens: string[]) {
|
|
78
|
+
console.log('Valores atualizados:', itens);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Avançado — Com lista predefinida, uppercase e validação por pattern
|
|
84
|
+
|
|
85
|
+
```html
|
|
86
|
+
<tcloud-ui-multiples-values
|
|
87
|
+
[(ngModel)]="codigos"
|
|
88
|
+
[listItems]="listaCodigos"
|
|
89
|
+
[openValuesInChange]="false"
|
|
90
|
+
[useBtnAdd]="false"
|
|
91
|
+
[search]="false"
|
|
92
|
+
[uppercase]="true"
|
|
93
|
+
[pattern]="patternValidacao"
|
|
94
|
+
maxWidthLabel="80px"
|
|
95
|
+
placeholder="Selecione ou digite o código"
|
|
96
|
+
(tcChange)="onCodigosChange($event)">
|
|
97
|
+
</tcloud-ui-multiples-values>
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
```typescript
|
|
101
|
+
import { TCloudUiMultiplesValuesComponent } from 'tcloud-ui';
|
|
102
|
+
|
|
103
|
+
@Component({
|
|
104
|
+
standalone: true,
|
|
105
|
+
imports: [TCloudUiMultiplesValuesComponent],
|
|
106
|
+
template: `...`
|
|
107
|
+
})
|
|
108
|
+
export class ExemploAvancadoComponent {
|
|
109
|
+
codigos: string[] = ['COD0001', 'COD0002'];
|
|
110
|
+
|
|
111
|
+
listaCodigos = [
|
|
112
|
+
{ description: 'Código 0001', value: 'COD0001' },
|
|
113
|
+
{ description: 'Código 0002', value: 'COD0002' },
|
|
114
|
+
{ description: 'Código 0003', value: 'COD0003' },
|
|
115
|
+
{ description: 'Código 0004', value: 'COD0004' }
|
|
116
|
+
];
|
|
117
|
+
|
|
118
|
+
patternValidacao = /^[A-Z]{3}[0-9]{4}$/;
|
|
119
|
+
|
|
120
|
+
onCodigosChange(itens: string[]) {
|
|
121
|
+
console.log('Códigos selecionados:', itens);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Avançado — Entrada de IPs com validação e delimitador
|
|
127
|
+
|
|
128
|
+
```html
|
|
129
|
+
<tcloud-ui-multiples-values
|
|
130
|
+
[(ngModel)]="ips"
|
|
131
|
+
delimiter=","
|
|
132
|
+
[pattern]="patternIP"
|
|
133
|
+
[uppercase]="false"
|
|
134
|
+
placeholder="Informe os IPs separados por vírgula"
|
|
135
|
+
required
|
|
136
|
+
(tcChange)="onIPsChange($event)">
|
|
137
|
+
</tcloud-ui-multiples-values>
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
```typescript
|
|
141
|
+
import { TCloudUiMultiplesValuesComponent } from 'tcloud-ui';
|
|
142
|
+
|
|
143
|
+
@Component({
|
|
144
|
+
standalone: true,
|
|
145
|
+
imports: [TCloudUiMultiplesValuesComponent],
|
|
146
|
+
template: `...`
|
|
147
|
+
})
|
|
148
|
+
export class ExemploIPComponent {
|
|
149
|
+
ips: string[] = [];
|
|
150
|
+
|
|
151
|
+
patternIP = /^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4}$/;
|
|
152
|
+
|
|
153
|
+
onIPsChange(itens: string[]) {
|
|
154
|
+
console.log('IPs cadastrados:', itens);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
```
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# TCloudUiNotFound
|
|
2
|
+
|
|
3
|
+
O componente `tcloud-ui-not-found` exibe uma mensagem de conteúdo vazio ou não encontrado. Apresenta um ícone de alerta (`fa-exclamation-triangle`) acompanhado de uma mensagem configurável, sendo ideal para estados vazios em listagens, tabelas ou resultados de busca. A mensagem é renderizada via `innerHTML`, permitindo o uso de HTML na personalização do texto.
|
|
4
|
+
|
|
5
|
+
## Características
|
|
6
|
+
|
|
7
|
+
- Exibição de ícone de alerta visual (Font Awesome `fa-exclamation-triangle`)
|
|
8
|
+
- Mensagem configurável via input `message`
|
|
9
|
+
- Suporte a conteúdo HTML na mensagem (renderizado via `innerHTML`)
|
|
10
|
+
- Mensagem padrão pré-configurada ("Nenhum registro encontrado.")
|
|
11
|
+
- Ocultação automática da mensagem quando o valor é uma string vazia
|
|
12
|
+
- Componente standalone com dependência mínima
|
|
13
|
+
|
|
14
|
+
## Instalação
|
|
15
|
+
|
|
16
|
+
Importe o componente diretamente no módulo ou componente standalone:
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
import { TCloudUiNotFoundComponent } from 'tcloud-ui';
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Propriedades
|
|
23
|
+
|
|
24
|
+
### Inputs
|
|
25
|
+
|
|
26
|
+
| Propriedade | Tipo | Padrão | Descrição |
|
|
27
|
+
|-------------|----------|-----------------------------------|---------------------------------------------------------------------------|
|
|
28
|
+
| `message` | `string` | `'Nenhum registro encontrado.'` | Texto exibido como mensagem de conteúdo vazio. Aceita HTML via `innerHTML` |
|
|
29
|
+
|
|
30
|
+
### Outputs
|
|
31
|
+
|
|
32
|
+
Este componente não possui outputs.
|
|
33
|
+
|
|
34
|
+
## Exemplos de Uso
|
|
35
|
+
|
|
36
|
+
### Básico — Mensagem padrão
|
|
37
|
+
|
|
38
|
+
```html
|
|
39
|
+
<tcloud-ui-not-found></tcloud-ui-not-found>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
```typescript
|
|
43
|
+
import { TCloudUiNotFoundComponent } from 'tcloud-ui';
|
|
44
|
+
|
|
45
|
+
@Component({
|
|
46
|
+
standalone: true,
|
|
47
|
+
imports: [TCloudUiNotFoundComponent],
|
|
48
|
+
template: `<tcloud-ui-not-found></tcloud-ui-not-found>`
|
|
49
|
+
})
|
|
50
|
+
export class ExemploBasicoComponent {}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Avançado — Mensagem personalizada com HTML
|
|
54
|
+
|
|
55
|
+
```html
|
|
56
|
+
<tcloud-ui-not-found
|
|
57
|
+
message="Nenhum resultado para a busca. <br> Tente novos filtros.">
|
|
58
|
+
</tcloud-ui-not-found>
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
```typescript
|
|
62
|
+
import { TCloudUiNotFoundComponent } from 'tcloud-ui';
|
|
63
|
+
|
|
64
|
+
@Component({
|
|
65
|
+
standalone: true,
|
|
66
|
+
imports: [TCloudUiNotFoundComponent],
|
|
67
|
+
template: `...`
|
|
68
|
+
})
|
|
69
|
+
export class ExemploAvancadoComponent {
|
|
70
|
+
mensagem = 'Nenhum <strong>cliente</strong> encontrado para o período selecionado.';
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
```html
|
|
75
|
+
<tcloud-ui-not-found [message]="mensagem"></tcloud-ui-not-found>
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Avançado — Exibição condicional em listagem vazia
|
|
79
|
+
|
|
80
|
+
```html
|
|
81
|
+
<ng-container *ngIf="itens.length > 0; else semResultados">
|
|
82
|
+
<!-- conteúdo da listagem -->
|
|
83
|
+
</ng-container>
|
|
84
|
+
|
|
85
|
+
<ng-template #semResultados>
|
|
86
|
+
<tcloud-ui-not-found message="Nenhum item cadastrado."></tcloud-ui-not-found>
|
|
87
|
+
</ng-template>
|
|
88
|
+
```
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# TCloudUiNumberStep
|
|
2
|
+
|
|
3
|
+
O componente `tcloud-ui-number-step` exibe um indicador de progresso numérico em formato de círculos conectados por linhas. Cada etapa é representada por um círculo numerado que pode estar ativo, completo, ou inativo. Etapas concluídas exibem um ícone de check, e a linha de progresso entre os círculos indica visualmente o avanço. Ideal para fluxos de cadastro, wizards e processos sequenciais.
|
|
4
|
+
|
|
5
|
+
## Características
|
|
6
|
+
|
|
7
|
+
- Renderização dinâmica de N etapas com base no input `step`
|
|
8
|
+
- Indicação visual do passo ativo com destaque no círculo
|
|
9
|
+
- Exibição de ícone de check (`fa-check`) para etapas concluídas (anteriores ao `active`)
|
|
10
|
+
- Modo completo (`complete`) que marca todas as etapas como finalizadas
|
|
11
|
+
- Suporte a etapas inativas (`inactives`) exibidas com ícone de círculo vazio (`fa-circle`)
|
|
12
|
+
- Linhas de progresso entre os círculos com preenchimento condicional
|
|
13
|
+
- Evento de clique em cada etapa com emissão do número do passo
|
|
14
|
+
- Componente standalone com dependência mínima
|
|
15
|
+
|
|
16
|
+
## Instalação
|
|
17
|
+
|
|
18
|
+
Importe o componente diretamente no módulo ou componente standalone:
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
import { TCloudUiNumberStepComponent } from 'tcloud-ui';
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Propriedades
|
|
25
|
+
|
|
26
|
+
### Inputs
|
|
27
|
+
|
|
28
|
+
| Propriedade | Tipo | Padrão | Descrição |
|
|
29
|
+
|----------------|------------|--------|-----------------------------------------------------------------------------------------------|
|
|
30
|
+
| `step` | `number` | — | **(Obrigatório)** Número total de etapas a serem exibidas |
|
|
31
|
+
| `active` | `number` | — | Número da etapa ativa. Etapas anteriores são marcadas como concluídas com ícone de check |
|
|
32
|
+
| `complete` | `boolean` | — | Quando `true`, marca todas as etapas como concluídas |
|
|
33
|
+
| `useIconCheck` | `boolean` | — | Habilita a exibição do ícone de check nas etapas concluídas |
|
|
34
|
+
| `inactives` | `number[]` | `[]` | Lista de números de etapas que devem ser exibidas como inativas (desabilitadas) |
|
|
35
|
+
|
|
36
|
+
### Outputs
|
|
37
|
+
|
|
38
|
+
| Evento | Tipo | Descrição |
|
|
39
|
+
|-------------|------------------------|--------------------------------------------------------------|
|
|
40
|
+
| `clickStep` | `EventEmitter<number>` | Emitido ao clicar em uma etapa, retorna o número da etapa clicada |
|
|
41
|
+
|
|
42
|
+
## Exemplos de Uso
|
|
43
|
+
|
|
44
|
+
### Básico — Progresso com etapa ativa
|
|
45
|
+
|
|
46
|
+
```html
|
|
47
|
+
<tcloud-ui-number-step
|
|
48
|
+
[step]="5"
|
|
49
|
+
[active]="3">
|
|
50
|
+
</tcloud-ui-number-step>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
```typescript
|
|
54
|
+
import { TCloudUiNumberStepComponent } from 'tcloud-ui';
|
|
55
|
+
|
|
56
|
+
@Component({
|
|
57
|
+
standalone: true,
|
|
58
|
+
imports: [TCloudUiNumberStepComponent],
|
|
59
|
+
template: `
|
|
60
|
+
<tcloud-ui-number-step
|
|
61
|
+
[step]="5"
|
|
62
|
+
[active]="etapaAtiva"
|
|
63
|
+
(clickStep)="onClickEtapa($event)">
|
|
64
|
+
</tcloud-ui-number-step>
|
|
65
|
+
`
|
|
66
|
+
})
|
|
67
|
+
export class ExemploBasicoComponent {
|
|
68
|
+
etapaAtiva = 3;
|
|
69
|
+
|
|
70
|
+
onClickEtapa(step: number) {
|
|
71
|
+
this.etapaAtiva = step;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Avançado — Todas as etapas completas
|
|
77
|
+
|
|
78
|
+
```html
|
|
79
|
+
<tcloud-ui-number-step
|
|
80
|
+
[step]="5"
|
|
81
|
+
[complete]="true"
|
|
82
|
+
[useIconCheck]="true">
|
|
83
|
+
</tcloud-ui-number-step>
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Avançado — Etapas inativas com ícone de check
|
|
87
|
+
|
|
88
|
+
```html
|
|
89
|
+
<tcloud-ui-number-step
|
|
90
|
+
[step]="5"
|
|
91
|
+
[active]="4"
|
|
92
|
+
[inactives]="[2, 3]"
|
|
93
|
+
[useIconCheck]="true">
|
|
94
|
+
</tcloud-ui-number-step>
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
import { TCloudUiNumberStepComponent } from 'tcloud-ui';
|
|
99
|
+
|
|
100
|
+
@Component({
|
|
101
|
+
standalone: true,
|
|
102
|
+
imports: [TCloudUiNumberStepComponent],
|
|
103
|
+
template: `...`
|
|
104
|
+
})
|
|
105
|
+
export class ExemploAvancadoComponent {
|
|
106
|
+
etapaAtiva = 4;
|
|
107
|
+
etapasInativas = [2, 3];
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Avançado — Avanço automático de etapa
|
|
112
|
+
|
|
113
|
+
```typescript
|
|
114
|
+
import { TCloudUiNumberStepComponent } from 'tcloud-ui';
|
|
115
|
+
|
|
116
|
+
@Component({
|
|
117
|
+
standalone: true,
|
|
118
|
+
imports: [TCloudUiNumberStepComponent],
|
|
119
|
+
template: `
|
|
120
|
+
<tcloud-ui-number-step
|
|
121
|
+
[step]="5"
|
|
122
|
+
[active]="etapaAtiva"
|
|
123
|
+
[useIconCheck]="true">
|
|
124
|
+
</tcloud-ui-number-step>
|
|
125
|
+
`
|
|
126
|
+
})
|
|
127
|
+
export class ExemploAutoComponent implements OnInit {
|
|
128
|
+
etapaAtiva = 2;
|
|
129
|
+
|
|
130
|
+
ngOnInit(): void {
|
|
131
|
+
setTimeout(() => this.etapaAtiva = 3, 5000);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
```
|