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