@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.
Files changed (76) 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
@@ -0,0 +1,369 @@
1
+ # Dropdown
2
+
3
+ ## Características
4
+
5
+ O componente `tcloud-ui-dropdown` é um componente de seleção versátil com suporte a opções customizáveis, two-way binding, detecção automática de viewport (desktop/mobile) e tooltip para textos elipsados. Implementa comportamento responsivo com menu dropdown em desktop e fullscreen em dispositivos móveis.
6
+
7
+ ## Instalação
8
+
9
+ Para utilizar o componente Dropdown, importe o módulo `TCloudUiModule`:
10
+
11
+ ```typescript
12
+ import { TCloudUiModule } from '@tcloud-ui/lib';
13
+ import { Component } from '@angular/core';
14
+
15
+ @Component({
16
+ selector: 'app-example',
17
+ standalone: true,
18
+ imports: [TCloudUiModule],
19
+ template: `<tcloud-ui-dropdown ...></tcloud-ui-dropdown>`
20
+ })
21
+ export class ExampleComponent {}
22
+ ```
23
+
24
+ Ou importe diretamente o componente e a interface de dados:
25
+
26
+ ```typescript
27
+ import { TCloudUiDropdownComponent, DropdownOption, DropdownSize } from '@tcloud-ui/lib';
28
+
29
+ @Component({
30
+ selector: 'app-example',
31
+ standalone: true,
32
+ imports: [TCloudUiDropdownComponent],
33
+ template: `<tcloud-ui-dropdown ...></tcloud-ui-dropdown>`
34
+ })
35
+ export class ExampleComponent {}
36
+ ```
37
+
38
+ ## Propriedades (API)
39
+
40
+ ### Inputs
41
+
42
+ | Nome | Tipo | Descrição | Valor Default |
43
+ |------|------|-----------|---------------|
44
+ | `label` | `string` | Texto do rótulo exibido acima da opção selecionada | `''` (vazio) |
45
+ | `disabled` | `boolean` | Desabilita interações com o dropdown | `false` |
46
+ | `options` | `DropdownOption[]` | **Obrigatório**. Lista de opções disponíveis | - |
47
+ | `initialValue` | `any` | Valor pré-selecionado (deprecated - use `value` instead) | `null` |
48
+ | `size` | `DropdownSize` | Tamanho do dropdown: `'sm'` \| `'md'` \| `'lg'` | `'sm'` |
49
+ | `width` | `string` | Largura customizada do dropdown (ex: `'300px'`, `'50%'`) | `''` (100% do pai) |
50
+ | `searchable` | `string` | Habilita campo para buscar na lista de itens | `false` |
51
+ | `searchPlaceholder` | `string` | Texto exibido quando nenhum texto de busca é exibido | `Buscar...` |
52
+
53
+ ### Two-Way Binding (Model)
54
+
55
+ | Nome | Tipo | Descrição |
56
+ |------|------|-----------|
57
+ | `value` | `any` | Valor selecionado - atualiza bidirecionalmente |
58
+
59
+ ### Outputs
60
+
61
+ | Nome | Tipo de Evento | Descrição |
62
+ |------|----------------|-----------|
63
+ | `optionSelected` | `DropdownOption` | Emitido quando uma opção é selecionada |
64
+
65
+ ### Interfaces e Enums Exportados
66
+
67
+ ```typescript
68
+ export interface DropdownOption {
69
+ id?: any;
70
+ value: any;
71
+ displayValue: string;
72
+ disabled?: boolean;
73
+ }
74
+
75
+ export enum DropdownSize {
76
+ sm = 'sm',
77
+ md = 'md',
78
+ lg = 'lg',
79
+ }
80
+ ```
81
+
82
+ ## Exemplos de Uso
83
+
84
+ ### Uso Básico
85
+
86
+ ```typescript
87
+ import { Component } from '@angular/core';
88
+ import { TCloudUiModule } from '@tcloud-ui/lib';
89
+ import { CommonModule } from '@angular/common';
90
+
91
+ @Component({
92
+ selector: 'app-basic-dropdown',
93
+ standalone: true,
94
+ imports: [CommonModule, TCloudUiModule],
95
+ template: `
96
+ <tcloud-ui-dropdown
97
+ [options]="[
98
+ { value: 'opt1', displayValue: 'Opção 1' },
99
+ { value: 'opt2', displayValue: 'Opção 2' },
100
+ { value: 'opt3', displayValue: 'Opção 3' }
101
+ ]"
102
+ label="Selecione uma opção"
103
+ ></tcloud-ui-dropdown>
104
+ `
105
+ })
106
+ export class BasicDropdownComponent {}
107
+ ```
108
+
109
+ ### Uso Avançado com Two-Way Binding
110
+
111
+ ```typescript
112
+ import { Component } from '@angular/core';
113
+ import { TCloudUiModule } from '@tcloud-ui/lib';
114
+ import { CommonModule } from '@angular/common';
115
+ import { signal } from '@angular/core';
116
+
117
+ @Component({
118
+ selector: 'app-advanced-dropdown',
119
+ standalone: true,
120
+ imports: [CommonModule, TCloudUiModule],
121
+ template: `
122
+ <div>
123
+ <tcloud-ui-dropdown
124
+ [(value)]="selectedValue"
125
+ [options]="options"
126
+ label="Escolha um usuário"
127
+ size="md"
128
+ (optionSelected)="onUserSelected($event)"
129
+ ></tcloud-ui-dropdown>
130
+
131
+ <p *ngIf="selectedValue">Você selecionou: {{ selectedValue }}</p>
132
+ </div>
133
+ `
134
+ })
135
+ export class AdvancedDropdownComponent {
136
+ selectedValue = signal(null);
137
+
138
+ options = [
139
+ { value: 'user1', displayValue: 'João Silva', id: 1 },
140
+ { value: 'user2', displayValue: 'Maria Santos', id: 2 },
141
+ { value: 'user3', displayValue: 'Pedro Oliveira', id: 3 },
142
+ { value: 'user4', displayValue: 'Ana Costa', id: 4 }
143
+ ];
144
+
145
+ onUserSelected(option: any): void {
146
+ console.log('Usuário selecionado:', option);
147
+ }
148
+ }
149
+ ```
150
+
151
+ ### Diferentes Tamanhos
152
+
153
+ ```typescript
154
+ import { Component } from '@angular/core';
155
+ import { TCloudUiModule, DropdownSize } from '@tcloud-ui/lib';
156
+ import { CommonModule } from '@angular/common';
157
+
158
+ @Component({
159
+ selector: 'app-sizes-dropdown',
160
+ standalone: true,
161
+ imports: [CommonModule, TCloudUiModule],
162
+ template: `
163
+ <div class="container">
164
+ <div class="group">
165
+ <label>Pequeno (sm)</label>
166
+ <tcloud-ui-dropdown
167
+ [options]="options"
168
+ size="sm"
169
+ label="Tamanho pequeno"
170
+ ></tcloud-ui-dropdown>
171
+ </div>
172
+
173
+ <div class="group">
174
+ <label>Médio (md)</label>
175
+ <tcloud-ui-dropdown
176
+ [options]="options"
177
+ size="md"
178
+ label="Tamanho médio"
179
+ ></tcloud-ui-dropdown>
180
+ </div>
181
+
182
+ <div class="group">
183
+ <label>Grande (lg)</label>
184
+ <tcloud-ui-dropdown
185
+ [options]="options"
186
+ size="lg"
187
+ label="Tamanho grande"
188
+ ></tcloud-ui-dropdown>
189
+ </div>
190
+ </div>
191
+ `,
192
+ styles: [`
193
+ .container {
194
+ display: flex;
195
+ flex-direction: column;
196
+ gap: 2rem;
197
+ }
198
+ .group {
199
+ display: flex;
200
+ flex-direction: column;
201
+ gap: 0.5rem;
202
+ }
203
+ `]
204
+ })
205
+ export class SizesDropdownComponent {
206
+ options = [
207
+ { value: '1', displayValue: 'Opção 1' },
208
+ { value: '2', displayValue: 'Opção 2' },
209
+ { value: '3', displayValue: 'Opção 3' }
210
+ ];
211
+ }
212
+ ```
213
+
214
+ ### Com Opções Desabilitadas
215
+
216
+ ```typescript
217
+ import { Component } from '@angular/core';
218
+ import { TCloudUiModule } from '@tcloud-ui/lib';
219
+ import { CommonModule } from '@angular/common';
220
+
221
+ @Component({
222
+ selector: 'app-disabled-options',
223
+ standalone: true,
224
+ imports: [CommonModule, TCloudUiModule],
225
+ template: `
226
+ <tcloud-ui-dropdown
227
+ [options]="options"
228
+ label="Status do pedido"
229
+ [(value)]="selectedStatus"
230
+ ></tcloud-ui-dropdown>
231
+ `
232
+ })
233
+ export class DisabledOptionsComponent {
234
+ selectedStatus = null;
235
+
236
+ options = [
237
+ { value: 'pending', displayValue: 'Pendente' },
238
+ { value: 'processing', displayValue: 'Processando', disabled: true },
239
+ { value: 'sent', displayValue: 'Enviado' },
240
+ { value: 'delivered', displayValue: 'Entregue', disabled: true },
241
+ { value: 'cancelled', displayValue: 'Cancelado' }
242
+ ];
243
+ }
244
+ ```
245
+
246
+ ### Com Largura Customizada
247
+
248
+ ```typescript
249
+ import { Component } from '@angular/core';
250
+ import { TCloudUiModule } from '@tcloud-ui/lib';
251
+ import { CommonModule } from '@angular/common';
252
+
253
+ @Component({
254
+ selector: 'app-custom-width',
255
+ standalone: true,
256
+ imports: [CommonModule, TCloudUiModule],
257
+ template: `
258
+ <div class="container">
259
+ <tcloud-ui-dropdown
260
+ [options]="options"
261
+ label="Dropdown customizado"
262
+ width="400px"
263
+ ></tcloud-ui-dropdown>
264
+ </div>
265
+ `,
266
+ styles: [`
267
+ .container {
268
+ max-width: 600px;
269
+ }
270
+ `]
271
+ })
272
+ export class CustomWidthComponent {
273
+ options = [
274
+ { value: 'short', displayValue: 'Texto curto' },
275
+ { value: 'long', displayValue: 'Este é um texto bem longo que pode ser elipsado com tooltip' },
276
+ { value: 'verylong', displayValue: 'Um texto extremamente longo que certamente será elipsado e terá um tooltip exibindo o valor completo' }
277
+ ];
278
+ }
279
+ ```
280
+
281
+ ### Gerenciamento de Estado Dinâmico
282
+
283
+ ```typescript
284
+ import { Component } from '@angular/core';
285
+ import { TCloudUiModule } from '@tcloud-ui/lib';
286
+ import { CommonModule } from '@angular/common';
287
+ import { signal } from '@angular/core';
288
+
289
+ @Component({
290
+ selector: 'app-dynamic-state',
291
+ standalone: true,
292
+ imports: [CommonModule, TCloudUiModule],
293
+ template: `
294
+ <div class="container">
295
+ <button (click)="toggleDisabled()">
296
+ {{ isDisabled() ? 'Habilitar' : 'Desabilitar' }}
297
+ </button>
298
+
299
+ <tcloud-ui-dropdown
300
+ [options]="options"
301
+ [disabled]="isDisabled()"
302
+ [(value)]="selectedValue"
303
+ label="Dropdown com estado dinâmico"
304
+ ></tcloud-ui-dropdown>
305
+
306
+ <button (click)="resetValue()">Limpar seleção</button>
307
+
308
+ <p *ngIf="selectedValue">Valor selecionado: {{ selectedValue }}</p>
309
+ </div>
310
+ `,
311
+ styles: [`
312
+ .container {
313
+ display: flex;
314
+ flex-direction: column;
315
+ gap: 1rem;
316
+ }
317
+ `]
318
+ })
319
+ export class DynamicStateComponent {
320
+ isDisabled = signal(false);
321
+ selectedValue = signal(null);
322
+
323
+ options = [
324
+ { value: 'opt1', displayValue: 'Opção 1' },
325
+ { value: 'opt2', displayValue: 'Opção 2' },
326
+ { value: 'opt3', displayValue: 'Opção 3' }
327
+ ];
328
+
329
+ toggleDisabled(): void {
330
+ this.isDisabled.update(value => !value);
331
+ }
332
+
333
+ resetValue(): void {
334
+ this.selectedValue.set(null);
335
+ }
336
+ }
337
+ ```
338
+
339
+ ## Comportamento Responsivo
340
+
341
+ O componente detecta automaticamente o tamanho da viewport:
342
+
343
+ - **Desktop**: Exibe um dropdown com menu suspenso posicionado absolutamente abaixo do botão
344
+ - **Mobile (< 480px)**: Abre um menu fullscreen modal para melhor usabilidade em telas pequenas
345
+
346
+ A detecção é feita através do serviço `TCloudUiDeviceUtilsService`.
347
+
348
+ ## Tooltip para Texto Elipsado
349
+
350
+ Quando um texto de opção é muito longo e sofre truncamento, o componente automaticamente:
351
+ 1. Detecta o texto elipsado
352
+ 2. Exibe um tooltip com o valor completo ao passar o mouse
353
+
354
+ ## Estados do Componente
355
+
356
+ - **Normal**: Dropdown habilitado e pronto para interação
357
+ - **Hover**: Indica que o dropdown pode ser clicado
358
+ - **Aberto (Desktop)**: Menu dropdown expandido
359
+ - **Aberto (Mobile)**: Menu fullscreen exibido
360
+ - **Desabilitado**: Dropdown indisponível para interação
361
+ - **Selecionado**: Opção com fundo destacado e ícone de check
362
+
363
+ ## Notas de Implementação
364
+
365
+ - O componente implementa OnInit e OnChanges para sincronização de valores
366
+ - Utiliza signals do Angular 16+ para reatividade
367
+ - Suporta tanto `initialValue` (deprecated) quanto `value` (dois-way binding)
368
+ - O seletor CSS é sensível a eventos de clique no documento para fechar o dropdown
369
+ - A largura padrão é 100% do elemento pai, podendo ser customizada
@@ -0,0 +1,113 @@
1
+ # El-Copy
2
+
3
+ ## Características
4
+ - Diretiva estrutural que adiciona funcionalidade de cópia ao clipboard de forma automática.
5
+ - Injeta um botão de ícone (Font Awesome `fa-copy`) no elemento anotado.
6
+ - Suporta copy de `textContent` em elementos genéricos e `value` em inputs.
7
+ - Feedback visual: ícone muda para `fa-check` durante 3 segundos após copiar.
8
+ - Identificação única: gera um `data-el-copy` único para cada elemento.
9
+ - Suporta elementos INPUT com classe especial `tc-form-control`.
10
+
11
+ ## Instalação
12
+ ```ts
13
+ import { TCloudUiElCopyDirective } from 'projects/tcloud-ui/src/public-api';
14
+
15
+ @Component({
16
+ selector: 'app-example',
17
+ standalone: true,
18
+ imports: [TCloudUiElCopyDirective],
19
+ template: `<label TCCopy>Clique para copiar</label>`
20
+ })
21
+ export class ExampleComponent {}
22
+ ```
23
+
24
+ Ou via módulo:
25
+ ```ts
26
+ import { TcRevComponentsLibModule } from 'projects/tcloud-ui/src/public-api';
27
+
28
+ @NgModule({
29
+ imports: [TcRevComponentsLibModule]
30
+ })
31
+ export class AppModule {}
32
+ ```
33
+
34
+ ## Propriedades (API)
35
+ ### Inputs
36
+ | Nome | Tipo | Descrição | Valor Default |
37
+ | --- | --- | --- | --- |
38
+ | TCCopy | - | Diretiva estrutural sem entrada. Aplicar como atributo. | - |
39
+
40
+ ### Outputs
41
+ | Nome | Tipo de Evento | Descrição |
42
+ | --- | --- | --- |
43
+ | (não possui) | - | Diretiva não emite eventos. |
44
+
45
+ ## Exemplos de Uso
46
+ ### Uso Básico com label
47
+ ```html
48
+ <label TCCopy>Clique aqui para copiar este texto</label>
49
+ ```
50
+
51
+ ### Com input padrão
52
+ ```html
53
+ <input type="text" value="Texto para copiar" TCCopy>
54
+ ```
55
+
56
+ ### Com input tc-form-control
57
+ ```html
58
+ <input type="text" class="tc-form-control" value="Valor do formulário" TCCopy>
59
+ ```
60
+
61
+ ### Em div
62
+ ```html
63
+ <div TCCopy>
64
+ Conteúdo que será copiado ao clicar no ícone
65
+ </div>
66
+ ```
67
+
68
+ ### Em span
69
+ ```html
70
+ <span TCCopy>ID: 12345</span>
71
+ ```
72
+
73
+ ## Uso Avançado
74
+ ### Com binding dinâmico em input
75
+ ```html
76
+ <input type="text" [value]="textoParaCopiar" TCCopy>
77
+ ```
78
+
79
+ Componente:
80
+ ```ts
81
+ export class ExampleComponent {
82
+ textoParaCopiar: string = 'Conteúdo dinâmico';
83
+ }
84
+ ```
85
+
86
+ ### Em lista
87
+ ```html
88
+ <ul>
89
+ <li *ngFor="let item of items">
90
+ <label TCCopy>{{ item.name }}</label>
91
+ </li>
92
+ </ul>
93
+ ```
94
+
95
+ Componente:
96
+ ```ts
97
+ export class ListComponent {
98
+ items = [
99
+ { name: 'Item 1' },
100
+ { name: 'Item 2' },
101
+ { name: 'Item 3' }
102
+ ];
103
+ }
104
+ ```
105
+
106
+ ### Com elementos customizados
107
+ ```html
108
+ <div class="custom-card">
109
+ <p TCCopy>{{ codigoDeVerificacao }}</p>
110
+ </div>
111
+ ```
112
+
113
+ O ícone de cópia será automaticamente inserido no elemento, e ao clicar, o conteúdo textual ou value será copiado para a área de transferência.