@dev-tcloud/tcloud-ui 6.15.0 → 6.18.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.
Files changed (79) hide show
  1. package/docs/tcloud-ui-accordion.md +345 -0
  2. package/docs/tcloud-ui-actions.md +88 -0
  3. package/docs/tcloud-ui-alert-banner.md +104 -0
  4. package/docs/tcloud-ui-array-to-text.md +361 -0
  5. package/docs/tcloud-ui-breadcrumb.md +103 -0
  6. package/docs/tcloud-ui-bytes.md +109 -0
  7. package/docs/tcloud-ui-calendar.md +387 -0
  8. package/docs/tcloud-ui-card-accordion.md +266 -0
  9. package/docs/tcloud-ui-card-title.md +47 -0
  10. package/docs/tcloud-ui-card.md +40 -0
  11. package/docs/tcloud-ui-choice-issues.md +59 -0
  12. package/docs/tcloud-ui-cnpj.md +102 -0
  13. package/docs/tcloud-ui-container.md +171 -0
  14. package/docs/tcloud-ui-cpf.md +102 -0
  15. package/docs/tcloud-ui-currency.md +271 -0
  16. package/docs/tcloud-ui-data-list.md +91 -0
  17. package/docs/tcloud-ui-datebr.md +139 -0
  18. package/docs/tcloud-ui-datepicker-time.md +191 -0
  19. package/docs/tcloud-ui-datepicker.md +186 -0
  20. package/docs/tcloud-ui-dropdown-multi.md +444 -0
  21. package/docs/tcloud-ui-dropdown.md +369 -0
  22. package/docs/tcloud-ui-el-copy.md +113 -0
  23. package/docs/tcloud-ui-empty-content.md +412 -0
  24. package/docs/tcloud-ui-faq.md +496 -0
  25. package/docs/tcloud-ui-filter-bar.md +86 -0
  26. package/docs/tcloud-ui-filters.md +337 -0
  27. package/docs/tcloud-ui-hover-parent.md +467 -0
  28. package/docs/tcloud-ui-icon-button.md +104 -0
  29. package/docs/tcloud-ui-input-container.md +520 -0
  30. package/docs/tcloud-ui-input-password.md +258 -0
  31. package/docs/tcloud-ui-input-search.md +314 -0
  32. package/docs/tcloud-ui-label-token.md +286 -0
  33. package/docs/tcloud-ui-legend.md +72 -0
  34. package/docs/tcloud-ui-line-step-circle.md +98 -0
  35. package/docs/tcloud-ui-line-step-title.md +194 -0
  36. package/docs/tcloud-ui-linha-logo.md +550 -0
  37. package/docs/tcloud-ui-loading.md +88 -0
  38. package/docs/tcloud-ui-message.md +539 -0
  39. package/docs/tcloud-ui-modal.md +196 -0
  40. package/docs/tcloud-ui-monthname.md +123 -0
  41. package/docs/tcloud-ui-multi-input.md +290 -0
  42. package/docs/tcloud-ui-multi-select.md +311 -0
  43. package/docs/tcloud-ui-multiples-values.md +157 -0
  44. package/docs/tcloud-ui-not-found.md +88 -0
  45. package/docs/tcloud-ui-number-step.md +134 -0
  46. package/docs/tcloud-ui-pagination.md +579 -0
  47. package/docs/tcloud-ui-progress-bar.md +65 -0
  48. package/docs/tcloud-ui-radio.md +83 -0
  49. package/docs/tcloud-ui-reorder-items.md +418 -0
  50. package/docs/tcloud-ui-respective.md +167 -0
  51. package/docs/tcloud-ui-scroll-box.md +109 -0
  52. package/docs/tcloud-ui-search-bar.md +88 -0
  53. package/docs/tcloud-ui-search-in-object.md +143 -0
  54. package/docs/tcloud-ui-search-input.md +74 -0
  55. package/docs/tcloud-ui-skeleton-loading.md +394 -0
  56. package/docs/tcloud-ui-slide-toggle.md +210 -0
  57. package/docs/tcloud-ui-statusinfo.md +138 -0
  58. package/docs/tcloud-ui-tab-group.md +376 -0
  59. package/docs/tcloud-ui-tab-menu.md +109 -0
  60. package/docs/tcloud-ui-table.md +96 -0
  61. package/docs/tcloud-ui-tag.md +379 -0
  62. package/docs/tcloud-ui-tc-badge.md +168 -0
  63. package/docs/tcloud-ui-tc-btn.md +189 -0
  64. package/docs/tcloud-ui-tc-colors.md +204 -0
  65. package/docs/tcloud-ui-tc-form-control.md +200 -0
  66. package/docs/tcloud-ui-tc-text.md +139 -0
  67. package/docs/tcloud-ui-tc-title.md +118 -0
  68. package/docs/tcloud-ui-tcloud-form.md +55 -0
  69. package/docs/tcloud-ui-toast.md +83 -0
  70. package/docs/tcloud-ui-tooltip.md +88 -0
  71. package/docs/tcloud-ui-topology.md +232 -0
  72. package/docs/tcloud-ui-upload-area.md +195 -0
  73. package/docs/tcloud-ui-welcome.md +112 -0
  74. package/docs/tcloud-ui-wizard-steps.md +103 -0
  75. package/js/tcloud-ui-app.js +11 -0
  76. package/package.json +1 -1
  77. package/scss/tcloud-revitalizacao/components/_tcloud-ui-table.scss +95 -0
  78. package/scss/tcloud-revitalizacao/tc-rev-styles.scss +1 -1
  79. package/scss/tcloud-revitalizacao/components/_tc-rev-table.scss +0 -57
@@ -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
+ ```