@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,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.
|