@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.
- 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
- package/scss/tcloud-revitalizacao/components/_tcloud-ui-table.scss +95 -0
- package/scss/tcloud-revitalizacao/tc-rev-styles.scss +1 -1
- package/scss/tcloud-revitalizacao/components/_tc-rev-table.scss +0 -57
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
# Datepicker
|
|
2
|
+
|
|
3
|
+
## Características
|
|
4
|
+
- Componente standalone de seleção de datas baseado em VanillaJS Datepicker.
|
|
5
|
+
- Suporta modo inline (calendário exibido) e modo input (calendário em popup).
|
|
6
|
+
- Suporta seleção de múltiplas datas com limite configurável.
|
|
7
|
+
- Permite desabilitar dias da semana específicos e datas individuais.
|
|
8
|
+
- Controle de intervalo de datas com minDate e maxDate.
|
|
9
|
+
- Integração com ngModel (two-way binding) e ControlValueAccessor.
|
|
10
|
+
- Detecção automática de layout (classic ou modern) via TCloudUiLayoutService.
|
|
11
|
+
- Máscara automática no formato DD/MM/YYYY.
|
|
12
|
+
- Eventos: `onChange` (mudança de seleção) e `onCheckDate` (verificação de datas em modo disabled).
|
|
13
|
+
|
|
14
|
+
## Instalação
|
|
15
|
+
```ts
|
|
16
|
+
import { TCloudUiDatepickerComponent } from 'projects/tcloud-ui/src/public-api';
|
|
17
|
+
|
|
18
|
+
@Component({
|
|
19
|
+
selector: 'app-example',
|
|
20
|
+
standalone: true,
|
|
21
|
+
imports: [TCloudUiDatepickerComponent],
|
|
22
|
+
template: `<tcloud-ui-datepicker [(ngModel)]="dateValue"></tcloud-ui-datepicker>`
|
|
23
|
+
})
|
|
24
|
+
export class ExampleComponent {
|
|
25
|
+
dateValue: string | undefined;
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Propriedades (API)
|
|
30
|
+
### Inputs
|
|
31
|
+
| Nome | Tipo | Descrição | Valor Default |
|
|
32
|
+
| --- | --- | --- | --- |
|
|
33
|
+
| multiple | boolean | Permite seleção de múltiplas datas. | false |
|
|
34
|
+
| maxNumberOfDates | number | Limite máximo de datas selecionáveis. 0 = sem limite. Requires `multiple=true`. | 0 |
|
|
35
|
+
| daysOfWeekDisabled | number[] | Array de dias da semana desabilitados (0=Domingo até 6=Domingo). | [] |
|
|
36
|
+
| minDate | string | Data mínima permitida no formato DD/MM/YYYY. | '' |
|
|
37
|
+
| maxDate | string | Data máxima permitida no formato DD/MM/YYYY. | '' |
|
|
38
|
+
| datesDisabled | string[] | Array de datas específicas desabilitadas no formato DD/MM/YYYY. | [] |
|
|
39
|
+
| modeInput | boolean | Se true, exibe calendário em popup ao clicar em input. Se false, exibe calendário inline. | false |
|
|
40
|
+
| useBorder | boolean | Se true, adiciona borda ao input no modeInput. | true |
|
|
41
|
+
| childInputDateTime | boolean | Flag para uso em componentes filho tipo datepicker-time. | false |
|
|
42
|
+
| startViewInMinDate | boolean | Inicia a visualização do calendário na minDate. | false |
|
|
43
|
+
| startViewInMaxDate | boolean | Inicia a visualização do calendário na maxDate. | false |
|
|
44
|
+
| disabled | boolean | Desabilita seleção de datas, mas emite evento `onCheckDate` ao tentar selecionar. | false |
|
|
45
|
+
| ngModel | string \| string[] | Data(s) selecionada(s) no formato DD/MM/YYYY (ou separadas por vírgula em múltiplas). | undefined |
|
|
46
|
+
| code | string | Identificador do componente para referência interna. | 'tcloud-ui-datepicker' |
|
|
47
|
+
|
|
48
|
+
### Outputs
|
|
49
|
+
| Nome | Tipo de Evento | Descrição |
|
|
50
|
+
| --- | --- | --- |
|
|
51
|
+
| onChange | EventEmitter<any> | Emite quando a data/datas é/são alterada(s). Retorna o valor selecionado. |
|
|
52
|
+
| ngModelChange | EventEmitter<any> | Emite alteração do ngModel para two-way binding. |
|
|
53
|
+
| onCheckDate | EventEmitter<any> | Emite quando há tentativa de seleção em modo disabled. Retorna `{ value, date, checked, disabled }`. |
|
|
54
|
+
|
|
55
|
+
## Exemplos de Uso
|
|
56
|
+
### Uso Básico - Calendário Inline
|
|
57
|
+
```html
|
|
58
|
+
<tcloud-ui-datepicker
|
|
59
|
+
[(ngModel)]="dateValue"
|
|
60
|
+
(onChange)="onDateChanged($event)">
|
|
61
|
+
</tcloud-ui-datepicker>
|
|
62
|
+
|
|
63
|
+
<p>Data selecionada: {{ dateValue }}</p>
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Componente:
|
|
67
|
+
```ts
|
|
68
|
+
export class ExampleComponent {
|
|
69
|
+
dateValue: string | undefined;
|
|
70
|
+
|
|
71
|
+
onDateChanged(event: any) {
|
|
72
|
+
console.log('Data selecionada:', event);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Uso Básico - Modo Input
|
|
78
|
+
```html
|
|
79
|
+
<tcloud-ui-datepicker
|
|
80
|
+
[modeInput]="true"
|
|
81
|
+
[(ngModel)]="dateValue">
|
|
82
|
+
</tcloud-ui-datepicker>
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Com Intervalo de Datas
|
|
86
|
+
```html
|
|
87
|
+
<tcloud-ui-datepicker
|
|
88
|
+
[minDate]="'18/11/2021'"
|
|
89
|
+
[maxDate]="'18/12/2023'"
|
|
90
|
+
[(ngModel)]="dateValue">
|
|
91
|
+
</tcloud-ui-datepicker>
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Desabilitar Dias da Semana
|
|
95
|
+
```html
|
|
96
|
+
<!-- Desabilita sábado e domingo -->
|
|
97
|
+
<tcloud-ui-datepicker
|
|
98
|
+
[daysOfWeekDisabled]="[0, 6]"
|
|
99
|
+
[(ngModel)]="dateValue">
|
|
100
|
+
</tcloud-ui-datepicker>
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Desabilitar Datas Específicas
|
|
104
|
+
```html
|
|
105
|
+
<tcloud-ui-datepicker
|
|
106
|
+
[datesDisabled]="['12/10/2022', '25/12/2022', '01/01/2023']"
|
|
107
|
+
[(ngModel)]="dateValue">
|
|
108
|
+
</tcloud-ui-datepicker>
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Uso Avançado
|
|
112
|
+
### Múltiplas Datas
|
|
113
|
+
```html
|
|
114
|
+
<tcloud-ui-datepicker
|
|
115
|
+
[multiple]="true"
|
|
116
|
+
[maxNumberOfDates]="5"
|
|
117
|
+
[(ngModel)]="selectedDates"
|
|
118
|
+
(onChange)="onDatesChanged($event)">
|
|
119
|
+
</tcloud-ui-datepicker>
|
|
120
|
+
|
|
121
|
+
<p>Datas selecionadas: {{ selectedDates }}</p>
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Componente:
|
|
125
|
+
```ts
|
|
126
|
+
export class ExampleComponent {
|
|
127
|
+
selectedDates: string[] = [];
|
|
128
|
+
|
|
129
|
+
onDatesChanged(event: any) {
|
|
130
|
+
console.log('Datas selecionadas:', event);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Combinação: Intervalo + Semana + Datas Desabilitadas
|
|
136
|
+
```html
|
|
137
|
+
<tcloud-ui-datepicker
|
|
138
|
+
[minDate]="'01/01/2024'"
|
|
139
|
+
[maxDate]="'31/12/2024'"
|
|
140
|
+
[daysOfWeekDisabled]="[0, 6]"
|
|
141
|
+
[datesDisabled]="['25/12/2024', '01/01/2025']"
|
|
142
|
+
[modeInput]="true"
|
|
143
|
+
[(ngModel)]="dateValue">
|
|
144
|
+
</tcloud-ui-datepicker>
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Modo Disabled com Verificação
|
|
148
|
+
```html
|
|
149
|
+
<tcloud-ui-datepicker
|
|
150
|
+
[multiple]="true"
|
|
151
|
+
[disabled]="true"
|
|
152
|
+
[(ngModel)]="selectedDates"
|
|
153
|
+
(onCheckDate)="onCheckDate($event)">
|
|
154
|
+
</tcloud-ui-datepicker>
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Componente:
|
|
158
|
+
```ts
|
|
159
|
+
export class ExampleComponent {
|
|
160
|
+
selectedDates: string[] = ['22/01/2024', '26/01/2024'];
|
|
161
|
+
|
|
162
|
+
onCheckDate(event: any) {
|
|
163
|
+
console.log('Tentativa de seleção desabilitada:', event);
|
|
164
|
+
// event: { value: '25/01/2024', date: Date, checked: true, disabled: true }
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Iniciar em Data Específica
|
|
170
|
+
```html
|
|
171
|
+
<!-- Abre o calendário exibindo a minDate -->
|
|
172
|
+
<tcloud-ui-datepicker
|
|
173
|
+
[minDate]="'15/03/2024'"
|
|
174
|
+
[startViewInMinDate]="true"
|
|
175
|
+
[(ngModel)]="dateValue">
|
|
176
|
+
</tcloud-ui-datepicker>
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Sem Borda (Inline)
|
|
180
|
+
```html
|
|
181
|
+
<tcloud-ui-datepicker
|
|
182
|
+
[useBorder]="false"
|
|
183
|
+
[modeInput]="true"
|
|
184
|
+
[(ngModel)]="dateValue">
|
|
185
|
+
</tcloud-ui-datepicker>
|
|
186
|
+
```
|
|
@@ -0,0 +1,444 @@
|
|
|
1
|
+
# Dropdown Multi
|
|
2
|
+
|
|
3
|
+
## Características
|
|
4
|
+
|
|
5
|
+
O componente `tcloud-ui-dropdown-multi` é um componente de múltipla seleção com suporte a seleção/deselção em massa, itens desabilitados, dois-way binding e visualização customizável do texto selecionado. Permite que o usuário selecione múltiplas opções de uma lista dropdown com interface intuitiva.
|
|
6
|
+
|
|
7
|
+
## Instalação
|
|
8
|
+
|
|
9
|
+
Para utilizar o componente Dropdown Multi, 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-multi ...></tcloud-ui-dropdown-multi>`
|
|
20
|
+
})
|
|
21
|
+
export class ExampleComponent {}
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Ou importe diretamente o componente e as interfaces de dados:
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
import { TCloudUiDropdownMultiComponent, DropdownMultiOption, DropdownMultiSize } from '@tcloud-ui/lib';
|
|
28
|
+
|
|
29
|
+
@Component({
|
|
30
|
+
selector: 'app-example',
|
|
31
|
+
standalone: true,
|
|
32
|
+
imports: [TCloudUiDropdownMultiComponent],
|
|
33
|
+
template: `<tcloud-ui-dropdown-multi ...></tcloud-ui-dropdown-multi>`
|
|
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 do seletor | `''` (vazio) |
|
|
45
|
+
| `disabled` | `boolean` | Desabilita interações com o dropdown | `false` |
|
|
46
|
+
| `options` | `DropdownMultiOption[]` | **Obrigatório**. Lista de opções disponíveis | - |
|
|
47
|
+
| `initialValues` | `any[]` | Valores pré-selecionados (deprecated - use `values` instead) | `[]` |
|
|
48
|
+
| `size` | `DropdownMultiSize` | Tamanho do dropdown: `'sm'` \| `'md'` \| `'lg'` | `'sm'` |
|
|
49
|
+
| `width` | `string` | Largura customizada do dropdown (ex: `'300px'`, `'100%'`) | `''` |
|
|
50
|
+
| `placeholder` | `string` | Texto exibido quando nenhum item está selecionado | `'Selecione'` |
|
|
51
|
+
| `maxDisplayItems` | `number` | Máximo de itens a exibir no botão antes de mostrar "+N" | `2` |
|
|
52
|
+
| `searchable` | `string` | Habilita campo para buscar na lista de itens | `false` |
|
|
53
|
+
| `searchPlaceholder` | `string` | Texto exibido quando nenhum texto de busca é exibido | `Buscar...` |
|
|
54
|
+
|
|
55
|
+
### Two-Way Binding (Model)
|
|
56
|
+
|
|
57
|
+
| Nome | Tipo | Descrição |
|
|
58
|
+
|------|------|-----------|
|
|
59
|
+
| `values` | `any[]` | Array de valores selecionados - atualiza bidirecionalmente |
|
|
60
|
+
|
|
61
|
+
### Outputs
|
|
62
|
+
|
|
63
|
+
| Nome | Tipo de Evento | Descrição |
|
|
64
|
+
|------|----------------|-----------|
|
|
65
|
+
| `optionsSelected` | `any[]` | Emitido quando opções são selecionadas/deseleccionadas |
|
|
66
|
+
|
|
67
|
+
### Interfaces e Enums Exportados
|
|
68
|
+
|
|
69
|
+
```typescript
|
|
70
|
+
export interface DropdownMultiOption {
|
|
71
|
+
id?: any;
|
|
72
|
+
value: any;
|
|
73
|
+
displayValue: string;
|
|
74
|
+
disabled?: boolean;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export enum DropdownMultiSize {
|
|
78
|
+
sm = 'sm',
|
|
79
|
+
md = 'md',
|
|
80
|
+
lg = 'lg',
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Características Técnicas
|
|
85
|
+
|
|
86
|
+
- **Seleção em Massa**: Botão "Todos" para selecionar/deselecionar todas as opções de uma vez
|
|
87
|
+
- **Seleção Parcial**: Indica visualmente quando apenas alguns itens estão selecionados
|
|
88
|
+
- **Itens Desabilitados**: Suporte a itens que não podem ser selecionados
|
|
89
|
+
- **Visualização Inteligente**: Mostra primeiros N itens com "+X" para itens restantes
|
|
90
|
+
- **Two-Way Binding**: Sincronização bidirecionional de valores com [(values)]
|
|
91
|
+
- **Scroll Automático**: Menu dropdown com scroll quando há muitas opções
|
|
92
|
+
- **Acessibilidade**: Suporte a aria-expanded e navegação por teclado
|
|
93
|
+
|
|
94
|
+
## Exemplos de Uso
|
|
95
|
+
|
|
96
|
+
### Uso Básico
|
|
97
|
+
|
|
98
|
+
```typescript
|
|
99
|
+
import { Component } from '@angular/core';
|
|
100
|
+
import { TCloudUiModule } from '@tcloud-ui/lib';
|
|
101
|
+
import { CommonModule } from '@angular/common';
|
|
102
|
+
|
|
103
|
+
@Component({
|
|
104
|
+
selector: 'app-basic-multi-dropdown',
|
|
105
|
+
standalone: true,
|
|
106
|
+
imports: [CommonModule, TCloudUiModule],
|
|
107
|
+
template: `
|
|
108
|
+
<tcloud-ui-dropdown-multi
|
|
109
|
+
[options]="items"
|
|
110
|
+
label="Selecione itens"
|
|
111
|
+
placeholder="Nenhum selecionado"
|
|
112
|
+
></tcloud-ui-dropdown-multi>
|
|
113
|
+
`
|
|
114
|
+
})
|
|
115
|
+
export class BasicMultiDropdownComponent {
|
|
116
|
+
items = [
|
|
117
|
+
{ value: 'item1', displayValue: 'Item 1' },
|
|
118
|
+
{ value: 'item2', displayValue: 'Item 2' },
|
|
119
|
+
{ value: 'item3', displayValue: 'Item 3' },
|
|
120
|
+
{ value: 'item4', displayValue: 'Item 4' }
|
|
121
|
+
];
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Com Two-Way Binding
|
|
126
|
+
|
|
127
|
+
```typescript
|
|
128
|
+
import { Component, signal } from '@angular/core';
|
|
129
|
+
import { TCloudUiModule } from '@tcloud-ui/lib';
|
|
130
|
+
import { CommonModule } from '@angular/common';
|
|
131
|
+
|
|
132
|
+
@Component({
|
|
133
|
+
selector: 'app-multi-dropdown-binding',
|
|
134
|
+
standalone: true,
|
|
135
|
+
imports: [CommonModule, TCloudUiModule],
|
|
136
|
+
template: `
|
|
137
|
+
<div>
|
|
138
|
+
<tcloud-ui-dropdown-multi
|
|
139
|
+
[(values)]="selectedItems"
|
|
140
|
+
[options]="fruitOptions"
|
|
141
|
+
label="Frutas"
|
|
142
|
+
placeholder="Escolha frutas"
|
|
143
|
+
(optionsSelected)="onFruitsSelected($event)"
|
|
144
|
+
></tcloud-ui-dropdown-multi>
|
|
145
|
+
|
|
146
|
+
<div *ngIf="selectedItems().length > 0">
|
|
147
|
+
<h4>Frutas Selecionadas:</h4>
|
|
148
|
+
<ul>
|
|
149
|
+
<li *ngFor="let item of selectedItems()">{{ item }}</li>
|
|
150
|
+
</ul>
|
|
151
|
+
</div>
|
|
152
|
+
</div>
|
|
153
|
+
`
|
|
154
|
+
})
|
|
155
|
+
export class MultiDropdownBindingComponent {
|
|
156
|
+
selectedItems = signal<any[]>([]);
|
|
157
|
+
|
|
158
|
+
fruitOptions = [
|
|
159
|
+
{ value: 'apple', displayValue: 'Maçã' },
|
|
160
|
+
{ value: 'banana', displayValue: 'Banana' },
|
|
161
|
+
{ value: 'orange', displayValue: 'Laranja' },
|
|
162
|
+
{ value: 'grape', displayValue: 'Uva' },
|
|
163
|
+
{ value: 'strawberry', displayValue: 'Morango' }
|
|
164
|
+
];
|
|
165
|
+
|
|
166
|
+
onFruitsSelected(options: any[]): void {
|
|
167
|
+
console.log('Frutas selecionadas:', options);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### Diferentes Tamanhos
|
|
173
|
+
|
|
174
|
+
```typescript
|
|
175
|
+
import { Component } from '@angular/core';
|
|
176
|
+
import { TCloudUiModule, DropdownMultiSize } from '@tcloud-ui/lib';
|
|
177
|
+
import { CommonModule } from '@angular/common';
|
|
178
|
+
|
|
179
|
+
@Component({
|
|
180
|
+
selector: 'app-multi-dropdown-sizes',
|
|
181
|
+
standalone: true,
|
|
182
|
+
imports: [CommonModule, TCloudUiModule],
|
|
183
|
+
template: `
|
|
184
|
+
<div class="size-examples">
|
|
185
|
+
<!-- Tamanho Pequeno -->
|
|
186
|
+
<tcloud-ui-dropdown-multi
|
|
187
|
+
[options]="colorOptions"
|
|
188
|
+
[size]="'sm'"
|
|
189
|
+
label="Pequeno (sm)"
|
|
190
|
+
width="200px"
|
|
191
|
+
></tcloud-ui-dropdown-multi>
|
|
192
|
+
|
|
193
|
+
<!-- Tamanho Médio -->
|
|
194
|
+
<tcloud-ui-dropdown-multi
|
|
195
|
+
[options]="colorOptions"
|
|
196
|
+
[size]="'md'"
|
|
197
|
+
label="Médio (md)"
|
|
198
|
+
width="200px"
|
|
199
|
+
></tcloud-ui-dropdown-multi>
|
|
200
|
+
|
|
201
|
+
<!-- Tamanho Grande -->
|
|
202
|
+
<tcloud-ui-dropdown-multi
|
|
203
|
+
[options]="colorOptions"
|
|
204
|
+
[size]="'lg'"
|
|
205
|
+
label="Grande (lg)"
|
|
206
|
+
width="200px"
|
|
207
|
+
></tcloud-ui-dropdown-multi>
|
|
208
|
+
</div>
|
|
209
|
+
`,
|
|
210
|
+
styles: [`
|
|
211
|
+
.size-examples {
|
|
212
|
+
display: flex;
|
|
213
|
+
flex-direction: column;
|
|
214
|
+
gap: 2rem;
|
|
215
|
+
}
|
|
216
|
+
`]
|
|
217
|
+
})
|
|
218
|
+
export class MultiDropdownSizesComponent {
|
|
219
|
+
colorOptions = [
|
|
220
|
+
{ value: 'red', displayValue: 'Vermelho' },
|
|
221
|
+
{ value: 'blue', displayValue: 'Azul' },
|
|
222
|
+
{ value: 'green', displayValue: 'Verde' },
|
|
223
|
+
{ value: 'yellow', displayValue: 'Amarelo' }
|
|
224
|
+
];
|
|
225
|
+
}
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### Com Itens Desabilitados
|
|
229
|
+
|
|
230
|
+
```typescript
|
|
231
|
+
import { Component } from '@angular/core';
|
|
232
|
+
import { TCloudUiModule } from '@tcloud-ui/lib';
|
|
233
|
+
import { CommonModule } from '@angular/common';
|
|
234
|
+
|
|
235
|
+
@Component({
|
|
236
|
+
selector: 'app-multi-dropdown-disabled-items',
|
|
237
|
+
standalone: true,
|
|
238
|
+
imports: [CommonModule, TCloudUiModule],
|
|
239
|
+
template: `
|
|
240
|
+
<tcloud-ui-dropdown-multi
|
|
241
|
+
[options]="statusOptions"
|
|
242
|
+
label="Status"
|
|
243
|
+
placeholder="Selecione status"
|
|
244
|
+
width="250px"
|
|
245
|
+
></tcloud-ui-dropdown-multi>
|
|
246
|
+
`
|
|
247
|
+
})
|
|
248
|
+
export class MultiDropdownDisabledItemsComponent {
|
|
249
|
+
statusOptions = [
|
|
250
|
+
{ value: 'active', displayValue: 'Ativo' },
|
|
251
|
+
{ value: 'inactive', displayValue: 'Inativo' },
|
|
252
|
+
{ value: 'pending', displayValue: 'Pendente', disabled: true },
|
|
253
|
+
{ value: 'archived', displayValue: 'Arquivado', disabled: true }
|
|
254
|
+
];
|
|
255
|
+
}
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
### Quantidade de Itens Exibidos
|
|
259
|
+
|
|
260
|
+
```typescript
|
|
261
|
+
import { Component, signal } from '@angular/core';
|
|
262
|
+
import { TCloudUiModule } from '@tcloud-ui/lib';
|
|
263
|
+
import { CommonModule } from '@angular/common';
|
|
264
|
+
|
|
265
|
+
@Component({
|
|
266
|
+
selector: 'app-multi-dropdown-max-display',
|
|
267
|
+
standalone: true,
|
|
268
|
+
imports: [CommonModule, TCloudUiModule],
|
|
269
|
+
template: `
|
|
270
|
+
<div class="display-examples">
|
|
271
|
+
<!-- Exibe 1 item -->
|
|
272
|
+
<tcloud-ui-dropdown-multi
|
|
273
|
+
[options]="languageOptions"
|
|
274
|
+
[maxDisplayItems]="1"
|
|
275
|
+
label="Max 1 Item"
|
|
276
|
+
width="200px"
|
|
277
|
+
></tcloud-ui-dropdown-multi>
|
|
278
|
+
|
|
279
|
+
<!-- Exibe 3 itens (padrão) -->
|
|
280
|
+
<tcloud-ui-dropdown-multi
|
|
281
|
+
[options]="languageOptions"
|
|
282
|
+
[maxDisplayItems]="3"
|
|
283
|
+
label="Max 3 Items"
|
|
284
|
+
width="200px"
|
|
285
|
+
></tcloud-ui-dropdown-multi>
|
|
286
|
+
|
|
287
|
+
<!-- Exibe todos -->
|
|
288
|
+
<tcloud-ui-dropdown-multi
|
|
289
|
+
[options]="languageOptions"
|
|
290
|
+
[maxDisplayItems]="99"
|
|
291
|
+
label="Mostrar Todos"
|
|
292
|
+
width="200px"
|
|
293
|
+
></tcloud-ui-dropdown-multi>
|
|
294
|
+
</div>
|
|
295
|
+
`,
|
|
296
|
+
styles: [`
|
|
297
|
+
.display-examples {
|
|
298
|
+
display: flex;
|
|
299
|
+
flex-direction: column;
|
|
300
|
+
gap: 2rem;
|
|
301
|
+
}
|
|
302
|
+
`]
|
|
303
|
+
})
|
|
304
|
+
export class MultiDropdownMaxDisplayComponent {
|
|
305
|
+
languageOptions = [
|
|
306
|
+
{ value: 'en', displayValue: 'English' },
|
|
307
|
+
{ value: 'pt', displayValue: 'Português' },
|
|
308
|
+
{ value: 'es', displayValue: 'Español' },
|
|
309
|
+
{ value: 'fr', displayValue: 'Français' },
|
|
310
|
+
{ value: 'de', displayValue: 'Deutsch' }
|
|
311
|
+
];
|
|
312
|
+
}
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
## Métodos Públicos
|
|
316
|
+
|
|
317
|
+
O componente expõe os seguintes métodos que podem ser acessados via template reference variable:
|
|
318
|
+
|
|
319
|
+
```typescript
|
|
320
|
+
// Selecionar todas as opções (exceto desabilitadas)
|
|
321
|
+
selectAll(): void
|
|
322
|
+
|
|
323
|
+
// Limpar todas as seleções
|
|
324
|
+
clearAll(): void
|
|
325
|
+
|
|
326
|
+
// Alternar seleção de uma opção
|
|
327
|
+
toggleOption(option: DropdownMultiOption): void
|
|
328
|
+
|
|
329
|
+
// Abrir/fechar o dropdown
|
|
330
|
+
toggleDropdown(): void
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
### Exemplo com Métodos
|
|
334
|
+
|
|
335
|
+
```typescript
|
|
336
|
+
import { Component, ViewChild } from '@angular/core';
|
|
337
|
+
import { TCloudUiModule } from '@tcloud-ui/lib';
|
|
338
|
+
import { CommonModule } from '@angular/common';
|
|
339
|
+
|
|
340
|
+
@Component({
|
|
341
|
+
selector: 'app-multi-dropdown-methods',
|
|
342
|
+
standalone: true,
|
|
343
|
+
imports: [CommonModule, TCloudUiModule],
|
|
344
|
+
template: `
|
|
345
|
+
<div>
|
|
346
|
+
<div class="button-group">
|
|
347
|
+
<button (click)="dropdown.selectAll()">Selecionar Todos</button>
|
|
348
|
+
<button (click)="dropdown.clearAll()">Limpar Tudo</button>
|
|
349
|
+
</div>
|
|
350
|
+
|
|
351
|
+
<tcloud-ui-dropdown-multi
|
|
352
|
+
#dropdown
|
|
353
|
+
[options]="weekDays"
|
|
354
|
+
label="Dias da Semana"
|
|
355
|
+
placeholder="Escolha dias"
|
|
356
|
+
></tcloud-ui-dropdown-multi>
|
|
357
|
+
</div>
|
|
358
|
+
`,
|
|
359
|
+
styles: [`
|
|
360
|
+
.button-group {
|
|
361
|
+
margin-bottom: 1rem;
|
|
362
|
+
display: flex;
|
|
363
|
+
gap: 1rem;
|
|
364
|
+
}
|
|
365
|
+
button {
|
|
366
|
+
padding: 0.5rem 1rem;
|
|
367
|
+
background: var(--c-primary-500);
|
|
368
|
+
color: white;
|
|
369
|
+
border: none;
|
|
370
|
+
border-radius: 0.25rem;
|
|
371
|
+
cursor: pointer;
|
|
372
|
+
}
|
|
373
|
+
`]
|
|
374
|
+
})
|
|
375
|
+
export class MultiDropdownMethodsComponent {
|
|
376
|
+
weekDays = [
|
|
377
|
+
{ value: 'monday', displayValue: 'Segunda' },
|
|
378
|
+
{ value: 'tuesday', displayValue: 'Terça' },
|
|
379
|
+
{ value: 'wednesday', displayValue: 'Quarta' },
|
|
380
|
+
{ value: 'thursday', displayValue: 'Quinta' },
|
|
381
|
+
{ value: 'friday', displayValue: 'Sexta' },
|
|
382
|
+
{ value: 'saturday', displayValue: 'Sábado' },
|
|
383
|
+
{ value: 'sunday', displayValue: 'Domingo' }
|
|
384
|
+
];
|
|
385
|
+
}
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
## Boas Práticas
|
|
389
|
+
|
|
390
|
+
1. **Use Labels Claros**: Sempre defina um label descritivo para a função do dropdown
|
|
391
|
+
2. **Placeholder Útil**: Configure um placeholder que indique claramente o que deve ser selecionado
|
|
392
|
+
3. **Limite de Opções**: Se tiver muitas opções (>20), considere agrupar ou usar filtro
|
|
393
|
+
4. **Opções Desabilitadas**: Use para opções que não estão disponíveis no contexto atual
|
|
394
|
+
5. **maxDisplayItems**: Ajuste conforme o espaço disponível e quantidade típica de seleções
|
|
395
|
+
|
|
396
|
+
## Estados Visuais
|
|
397
|
+
|
|
398
|
+
- **Default**: Sem seleção - exibe placeholder
|
|
399
|
+
- **Hover**: Bordas destacadas em azul
|
|
400
|
+
- **Selecionado Parcial**: Mostra opções selecionadas
|
|
401
|
+
- **Todos Selecionados**: Exibe "Todos"
|
|
402
|
+
- **Desabilitado**: Cinza, sem interação possível
|
|
403
|
+
|
|
404
|
+
## Performance
|
|
405
|
+
|
|
406
|
+
O componente é otimizado para listas de até 100 opções. Para listas maiores, considere:
|
|
407
|
+
- Implementar virtualização (scroll virtual) no menu
|
|
408
|
+
- Adicionar filter/search de opções
|
|
409
|
+
- Paginar as opções
|
|
410
|
+
|
|
411
|
+
## Acessibilidade
|
|
412
|
+
|
|
413
|
+
- Suporte a `aria-expanded` indicando se dropdown está aberto/fechado
|
|
414
|
+
- Checkboxes com suporte apropriado para leitores de tela
|
|
415
|
+
- Navegação por teclado (deve ser alcançável por Tab)
|
|
416
|
+
|
|
417
|
+
## Compatibilidade
|
|
418
|
+
|
|
419
|
+
- **Angular**: 16+
|
|
420
|
+
- **Browsers**: Todos os navegadores modernos
|
|
421
|
+
- **CSS Variables**: Utiliza variáveis CSS do sistema de design
|
|
422
|
+
|
|
423
|
+
## Integração com Formulários
|
|
424
|
+
|
|
425
|
+
O componente funciona com `formsModule` (value-accessor pattern) e pode ser usado em formulários reativos:
|
|
426
|
+
|
|
427
|
+
```typescript
|
|
428
|
+
// Em seu componente
|
|
429
|
+
import { FormControl, ReactiveFormsModule } from '@angular/forms';
|
|
430
|
+
|
|
431
|
+
@Component({
|
|
432
|
+
imports: [ReactiveFormsModule, TCloudUiModule]
|
|
433
|
+
})
|
|
434
|
+
export class YourComponent {
|
|
435
|
+
selectedItems = new FormControl([]);
|
|
436
|
+
|
|
437
|
+
// No template:
|
|
438
|
+
// <tcloud-ui-dropdown-multi [formControl]="selectedItems" ...></tcloud-ui-dropdown-multi>
|
|
439
|
+
}
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
## Suporte
|
|
443
|
+
|
|
444
|
+
Para reportar problemas, sugestões ou criar pull requests, visite o repositório oficial do projeto.
|