@dev-tcloud/tcloud-ui 6.21.0 → 6.21.3
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-dropdown-multi-level.md +186 -0
- package/fesm2022/dev-tcloud-tcloud-ui.mjs +570 -477
- package/fesm2022/dev-tcloud-tcloud-ui.mjs.map +1 -1
- package/js/tcloud-ui-app.js +1 -1
- package/lib/_modules/tcloud-ui-dropdown-multi-level/tcloud-ui-dropdown-multi-level.component.d.ts +41 -0
- package/lib/_modules/tcloud-ui-dropdown-multi-level/tcloud-ui-dropdown-sub-menu/tcloud-ui-dropdown-sub-menu.component.d.ts +17 -0
- package/lib/revitalizacao/components/tc-rev-dropdown-multi-level/tc-rev-dropdown-multi-level.component.d.ts +3 -2
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
# Dropdown Multi Level
|
|
2
|
+
|
|
3
|
+
## Características
|
|
4
|
+
|
|
5
|
+
O componente `tcloud-ui-dropdown-multi-level` é um componente de seleção de opção a partir de uma estrutura de dados hierárquica (menu multi-nível). Ele permite aninhamento de opções e seleção em sub-menus.
|
|
6
|
+
|
|
7
|
+
## Instalação
|
|
8
|
+
|
|
9
|
+
Para utilizar o componente Dropdown Multi Level, 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-level [menu]="menuOptions">Opções</tcloud-ui-dropdown-multi-level>`
|
|
20
|
+
})
|
|
21
|
+
export class ExampleComponent {}
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Ou importe diretamente o componente e as interfaces de dados:
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
import { TCloudUiDropdownMultiLevelComponent, MultiLevelDropdownOption, MultiLevelDropdownSize } from '@tcloud-ui/lib';
|
|
28
|
+
|
|
29
|
+
@Component({
|
|
30
|
+
selector: 'app-example',
|
|
31
|
+
standalone: true,
|
|
32
|
+
imports: [TCloudUiDropdownMultiLevelComponent],
|
|
33
|
+
template: `<tcloud-ui-dropdown-multi-level [menu]="menuOptions">Opções</tcloud-ui-dropdown-multi-level>`
|
|
34
|
+
})
|
|
35
|
+
export class ExampleComponent {}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Propriedades (API)
|
|
39
|
+
|
|
40
|
+
### Inputs
|
|
41
|
+
|
|
42
|
+
| Nome | Tipo | Descrição | Valor Default |
|
|
43
|
+
|------|------|-----------|---------------|
|
|
44
|
+
| `menu` | `MultiLevelDropdownOption[]` | **Obrigatório**. Estrutura de opções (nós principais e filhos) do menu | - |
|
|
45
|
+
| `subMenuPosition` | `'right' \| 'left'` | Posição de abertura do sub-menu em relação ao item pai | `'right'` |
|
|
46
|
+
| `disabled` | `boolean` | Desabilita interações com o dropdown | `false` |
|
|
47
|
+
| `size` | `MultiLevelDropdownSize` | Tamanho do dropdown: `'sm'` \| `'md'` \| `'lg'` | `'sm'` |
|
|
48
|
+
| `initialValue` | `MultiLevelDropdownOption \| null` | Valor pré-selecionado | `null` |
|
|
49
|
+
|
|
50
|
+
### Outputs
|
|
51
|
+
|
|
52
|
+
| Nome | Tipo de Evento | Descrição |
|
|
53
|
+
|------|----------------|-----------|
|
|
54
|
+
| `optionSelected` | `{ option: MultiLevelDropdownOption, parentOption: MultiLevelDropdownOption }` | Emitido quando uma opção é selecionada (apenas para itens que não possuem filhos) |
|
|
55
|
+
|
|
56
|
+
### Interfaces e Enums Exportados
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
export interface MultiLevelDropdownOption {
|
|
60
|
+
id?: any;
|
|
61
|
+
value: any;
|
|
62
|
+
displayValue: string;
|
|
63
|
+
disabled?: boolean;
|
|
64
|
+
children?: MultiLevelDropdownOption[];
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export enum MultiLevelDropdownSize {
|
|
68
|
+
sm = 'sm',
|
|
69
|
+
md = 'md',
|
|
70
|
+
lg = 'lg',
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Características Técnicas
|
|
75
|
+
|
|
76
|
+
- **Menu Hierárquico**: Suporte a opções com múltiplos níveis de aninhamento através da propriedade `children`.
|
|
77
|
+
- **Posicionamento de Submenu**: Permite abrir submenus para a esquerda (`left`) ou direita (`right`).
|
|
78
|
+
- **Seleção Restrita a Folhas**: Itens pai que possuem `children` não disparam evento de seleção e servem apenas para abrir submenus.
|
|
79
|
+
- **Transclusão de Conteúdo (Content Projection)**: O botão de gatilho do menu utiliza `ng-content`, permitindo a customização livre do conteúdo do botão.
|
|
80
|
+
- **Eventos com Contexto**: O evento `optionSelected` emite a opção final selecionada e também seu item pai direto.
|
|
81
|
+
|
|
82
|
+
## Exemplos de Uso
|
|
83
|
+
|
|
84
|
+
### Uso Básico
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
import { Component } from '@angular/core';
|
|
88
|
+
import { TCloudUiModule, MultiLevelDropdownOption } from '@tcloud-ui/lib';
|
|
89
|
+
import { CommonModule } from '@angular/common';
|
|
90
|
+
|
|
91
|
+
@Component({
|
|
92
|
+
selector: 'app-basic-multi-level-dropdown',
|
|
93
|
+
standalone: true,
|
|
94
|
+
imports: [CommonModule, TCloudUiModule],
|
|
95
|
+
template: `
|
|
96
|
+
<tcloud-ui-dropdown-multi-level
|
|
97
|
+
[menu]="menuOptions"
|
|
98
|
+
(optionSelected)="onSelected($event)">
|
|
99
|
+
Ações do Usuário
|
|
100
|
+
</tcloud-ui-dropdown-multi-level>
|
|
101
|
+
`
|
|
102
|
+
})
|
|
103
|
+
export class BasicMultiLevelDropdownComponent {
|
|
104
|
+
menuOptions: MultiLevelDropdownOption[] = [
|
|
105
|
+
{ value: 'home', displayValue: 'Início' },
|
|
106
|
+
{ value: 'settings', displayValue: 'Configurações' },
|
|
107
|
+
{
|
|
108
|
+
value: 'profile',
|
|
109
|
+
displayValue: 'Perfil',
|
|
110
|
+
children: [
|
|
111
|
+
{ value: 'view-profile', displayValue: 'Visualizar Perfil' },
|
|
112
|
+
{ value: 'edit-profile', displayValue: 'Editar Perfil' }
|
|
113
|
+
]
|
|
114
|
+
}
|
|
115
|
+
];
|
|
116
|
+
|
|
117
|
+
onSelected(event: { option: MultiLevelDropdownOption, parentOption: MultiLevelDropdownOption }) {
|
|
118
|
+
console.log('Selecionado:', event.option);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Sub-menu Posicionado à Esquerda
|
|
124
|
+
|
|
125
|
+
```typescript
|
|
126
|
+
import { Component } from '@angular/core';
|
|
127
|
+
import { TCloudUiModule, MultiLevelDropdownOption } from '@tcloud-ui/lib';
|
|
128
|
+
|
|
129
|
+
@Component({
|
|
130
|
+
selector: 'app-left-multi-level-dropdown',
|
|
131
|
+
standalone: true,
|
|
132
|
+
imports: [TCloudUiModule],
|
|
133
|
+
template: `
|
|
134
|
+
<tcloud-ui-dropdown-multi-level
|
|
135
|
+
[menu]="menuOptions"
|
|
136
|
+
subMenuPosition="left">
|
|
137
|
+
Menu à Esquerda
|
|
138
|
+
</tcloud-ui-dropdown-multi-level>
|
|
139
|
+
`
|
|
140
|
+
})
|
|
141
|
+
export class LeftMultiLevelDropdownComponent {
|
|
142
|
+
menuOptions: MultiLevelDropdownOption[] = [
|
|
143
|
+
{
|
|
144
|
+
value: 'export',
|
|
145
|
+
displayValue: 'Exportar Dados',
|
|
146
|
+
children: [
|
|
147
|
+
{ value: 'pdf', displayValue: 'Exportar como PDF' },
|
|
148
|
+
{ value: 'csv', displayValue: 'Exportar como CSV' }
|
|
149
|
+
]
|
|
150
|
+
}
|
|
151
|
+
];
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Tamanhos Diferentes
|
|
156
|
+
|
|
157
|
+
```typescript
|
|
158
|
+
import { Component } from '@angular/core';
|
|
159
|
+
import { TCloudUiModule, MultiLevelDropdownOption, MultiLevelDropdownSize } from '@tcloud-ui/lib';
|
|
160
|
+
|
|
161
|
+
@Component({
|
|
162
|
+
selector: 'app-size-multi-level-dropdown',
|
|
163
|
+
standalone: true,
|
|
164
|
+
imports: [TCloudUiModule],
|
|
165
|
+
template: `
|
|
166
|
+
<tcloud-ui-dropdown-multi-level [menu]="menuOptions" [size]="sizes.sm">Pequeno</tcloud-ui-dropdown-multi-level>
|
|
167
|
+
<tcloud-ui-dropdown-multi-level [menu]="menuOptions" [size]="sizes.md">Médio</tcloud-ui-dropdown-multi-level>
|
|
168
|
+
<tcloud-ui-dropdown-multi-level [menu]="menuOptions" [size]="sizes.lg">Grande</tcloud-ui-dropdown-multi-level>
|
|
169
|
+
`
|
|
170
|
+
})
|
|
171
|
+
export class SizeMultiLevelDropdownComponent {
|
|
172
|
+
sizes = MultiLevelDropdownSize;
|
|
173
|
+
menuOptions: MultiLevelDropdownOption[] = [
|
|
174
|
+
{ value: '1', displayValue: 'Opção 1' }
|
|
175
|
+
];
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
## Acessibilidade
|
|
180
|
+
|
|
181
|
+
- O componente escuta eventos de clique no documento (`document:click`) para fechar o menu automaticamente caso o clique ocorra fora de seus limites (click-outside).
|
|
182
|
+
|
|
183
|
+
## Compatibilidade
|
|
184
|
+
|
|
185
|
+
- **Angular**: 17+ (suporta control flow blocks como `@if` e `@for`, além de signal inputs)
|
|
186
|
+
- **Browsers**: Todos os navegadores modernos
|