@seniorsistemas/angular-components-mcp 1.0.0-beta.3 → 1.0.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 (44) hide show
  1. package/dist/data/component-rules/button.md +37 -0
  2. package/dist/data/component-rules/checkbox.md +30 -0
  3. package/dist/data/component-rules/confirm-dialog.md +86 -0
  4. package/dist/data/component-rules/index.json +3 -0
  5. package/dist/data/component-rules/radio-button.md +0 -0
  6. package/dist/data/component-technical/confirm-dialog.md +117 -0
  7. package/dist/data/component-technical/dialog.md +202 -0
  8. package/dist/data/component-technical/dynamic-form.md +292 -0
  9. package/dist/data/component-technical/index.json +4 -0
  10. package/dist/data/component-technical/kanban.md +116 -0
  11. package/dist/data/component-technical/loading-state.md +96 -0
  12. package/dist/data/component-technical/sidebar.md +82 -0
  13. package/dist/data/component-technical/table.md +19 -0
  14. package/dist/data/component-technical/toast.md +63 -0
  15. package/dist/data/components-metadata.json +4402 -0
  16. package/dist/data/dynamic-form-metadata.json +2281 -0
  17. package/dist/data/ux-rules.md +45 -0
  18. package/dist/handlers/handleDetectRequiredProviders.d.ts +12 -0
  19. package/dist/handlers/handleDetectRequiredProviders.d.ts.map +1 -0
  20. package/dist/handlers/handleGetComponentDetails.d.ts +13 -0
  21. package/dist/handlers/handleGetComponentDetails.d.ts.map +1 -0
  22. package/dist/handlers/handleGetComponentRules.d.ts +13 -0
  23. package/dist/handlers/handleGetComponentRules.d.ts.map +1 -0
  24. package/dist/handlers/handleGetComponentRulesIndex.d.ts +11 -0
  25. package/dist/handlers/handleGetComponentRulesIndex.d.ts.map +1 -0
  26. package/dist/handlers/handleGetComponentTechnicalGuide.d.ts +13 -0
  27. package/dist/handlers/handleGetComponentTechnicalGuide.d.ts.map +1 -0
  28. package/dist/handlers/handleGetComponentTechnicalIndex.d.ts +11 -0
  29. package/dist/handlers/handleGetComponentTechnicalIndex.d.ts.map +1 -0
  30. package/dist/handlers/handleGetComponents.d.ts +14 -0
  31. package/dist/handlers/handleGetComponents.d.ts.map +1 -0
  32. package/dist/handlers/handleGetDynamicFormTypes.d.ts +13 -0
  33. package/dist/handlers/handleGetDynamicFormTypes.d.ts.map +1 -0
  34. package/dist/handlers/handleGetUxRules.d.ts +10 -0
  35. package/dist/handlers/handleGetUxRules.d.ts.map +1 -0
  36. package/dist/handlers.d.ts +112 -0
  37. package/dist/handlers.d.ts.map +1 -0
  38. package/dist/index.cjs +16703 -0
  39. package/dist/index.cjs.map +1 -0
  40. package/dist/index.d.ts +3 -0
  41. package/dist/index.d.ts.map +1 -0
  42. package/dist/index.mjs +16700 -0
  43. package/dist/index.mjs.map +1 -0
  44. package/package.json +1 -1
@@ -0,0 +1,37 @@
1
+ # Button — Regras de UX
2
+
3
+ **Seletor:** `s-button`
4
+ **Package:** `@seniorsistemas/angular-components/button`
5
+
6
+ ---
7
+
8
+ ## Variantes
9
+
10
+ | Variante | Quando usar |
11
+ | ----------- | ---------------------------------------------------------------------------- |
12
+ | `primary` | Ação principal da página — máximo 1 por página/diálogo |
13
+ | `secondary` | Ações complementares à ação principal |
14
+ | `link` | Navegação secundária ou ações de baixa importância visual |
15
+ | `select` | Quando houver menu de ações — obrigatório usar ícone de chevron pré-definido |
16
+
17
+ ---
18
+
19
+ ## Regras
20
+
21
+ ### ⛔ Hierarquia (error)
22
+
23
+ Use no máximo 1 botão `primary` por página/diálogo. Os demais devem ser `secondary` ou `link`.
24
+
25
+ ### ⚠️ Ícones (warning)
26
+
27
+ Use no máximo 1 ícone por botão (esquerda ou direita). Nunca 2 ícones no mesmo botão.
28
+
29
+ ### ⛔ Tamanho `small` (error)
30
+
31
+ Permitido **somente** em células de tabela e section title.
32
+ Proibido em formulários, navegação primária ou qualquer outro contexto.
33
+
34
+ ### ⛔ Labels
35
+
36
+ Use labels acionáveis e específicos. Prefira `"Salvar Cadastro"` a `"OK"`.
37
+
@@ -0,0 +1,30 @@
1
+ # Checkbox — Regras de UX
2
+
3
+ ## Variantes
4
+
5
+ | Variante | Quando usar |
6
+ | -------------- | --------------------------------------------------------------- |
7
+ | **Horizontal** | Quando todos os itens possuem textos curtos ou palavras únicas. |
8
+ | **Vertical** | Quando um ou mais itens possuem textos longos. |
9
+
10
+ ---
11
+
12
+ ## Regras de uso
13
+
14
+ - **SEMPRE** use alinhamento vertical em telas pequenas.
15
+ - Cada checkbox deve possuir um label descrevendo a sua ação.
16
+ - Coloque opções importantes no topo.
17
+
18
+ ## ⛔ Regras de erro
19
+
20
+ - Não use checkbox para escolhas mutuamente exclusivas. Nesses casos use Radio Button.
21
+ - Não use checkbox para ações que se aplicam imediatamente e alteram a interface em tempo real — isso é papel do Switch.
22
+ - Não apresente checkbox horizontalmente em dispositivos móveis.
23
+ - Não utilize checkbox sem um label claro e explícito.
24
+ - Não agrupe muitas opções horizontalmente. Neste caso use alinhamento vertical.
25
+
26
+ ---
27
+
28
+ ## ⚠️ Regras de recomendação
29
+
30
+ - Prefira usar checkbox em formulários ou contextos de escolha múltipla de forma persistente.
@@ -0,0 +1,86 @@
1
+ # Dialog — Regras de UX
2
+
3
+ ## Variantes
4
+
5
+ | Variante | Quando usar |
6
+ | ------------------------------ | ----------------------------------------------------------------------------- |
7
+ | **Confirmação simples** | Utilizar quando há apenas uma ação possível e não existe reversão. |
8
+ | **Confirmação + Cancelamento** | Utilizar quando o usuário deve ter a opção de prosseguir ou desistir da ação. |
9
+
10
+ # Regras
11
+
12
+ ## ⛔ Regras de erro
13
+
14
+ - Não utilizar Dialog para formulários complexos ou com múltiplos campos.
15
+ - Não inserir no Dialog componentes além de título, texto e botões.
16
+ - Não exibir conteúdo secundário ou informações que não interrompam o fluxo do usuário.
17
+ - Não deixar o Dialog sem uma ação clara ou sem possibilidade de fechamento.
18
+ - Não usar quando a mensagem não for importante ou não exigir decisão imediata.
19
+
20
+ ## ⚠️ Regras de recomendação
21
+
22
+ - Utilizar o Dialog apenas para interromper o usuário quando necessário.
23
+ - Manter o conteúdo sempre claro, objetivo e focado na decisão.
24
+ - A ação principal deve responder diretamente à pergunta apresentada no título.
25
+ - Usar confirmação única quando não houver alternativa reversível.
26
+ - Em casos críticos, destacar visualmente a ação verdadeira.
27
+
28
+ # Layout e Alinhamento
29
+
30
+ - O Dialog deve ser centralizado na tela em todos os dispositivos.
31
+ - A estrutura deve seguir a ordem: título → texto → ações.
32
+ - Em telas menores, o espaçamento interno pode ser reduzido, mantendo legibilidade.
33
+
34
+ # Responsividade
35
+
36
+ - Deve se adaptar a diferentes larguras sem comprometer a leitura.
37
+ - O fechamento deve ser possível em qualquer tamanho de dispositivo.
38
+
39
+ # Estados
40
+
41
+ | Estado | Descrição |
42
+ | ---------------------------------------- | ---------------------------------------------- |
43
+ | **Default (confirmação simples)** | Exibe texto e um botão de confirmação. |
44
+ | **Default (confirmação + cancelamento)** | Exibe dois botões: confirmar e cancelar. |
45
+ | **Focus** | O foco deve estar no botão principal ao abrir. |
46
+
47
+ # Labels
48
+
49
+ - O título deve apresentar claramente a ação ou decisão.
50
+ - O texto deve complementar o título e reforçar o impacto da ação.
51
+ - Os botões devem usar verbos claros e diretos.
52
+
53
+ # Acessibilidade
54
+
55
+ - O foco deve ser direcionado automaticamente ao botão principal ao abrir o Dialog.
56
+ - Deve permitir navegação por teclado.
57
+ - O overlay deve bloquear interações com o conteúdo principal.
58
+ - O conteúdo deve ser textual e acessível para leitores de tela.
59
+
60
+ # Do’s
61
+
62
+ - Usar para confirmar ações importantes, como exclusões.
63
+ - Manter estrutura simples e objetiva.
64
+ - Garantir mensagens curtas e diretas.
65
+ - Interromper o usuário apenas quando necessário para validação crítica.
66
+
67
+ # Don’ts
68
+
69
+ - Não usar para formulários longos.
70
+ - Não inserir múltiplos componentes ou conteúdos complexos.
71
+ - Não usar para mensagens informativas que não exigem ação.
72
+ - Não deixar ações ambíguas ou pouco claras.
73
+
74
+ # Boas práticas de UX
75
+
76
+ - Escrever mensagens diretas e sem redundância.
77
+ - Formular perguntas como “Deseja excluir este item?”.
78
+ - A ação principal deve refletir a escolha mais esperada pelo usuário.
79
+ - Evitar gerar ansiedade: comunicação simples, calma e objetiva.
80
+
81
+ # Anti-patterns
82
+
83
+ - Usar Dialog como substituto de modais complexos.
84
+ - Criar sequências de Dialogs em cadeia.
85
+ - Exibir feedback simples que poderia ser apresentado inline ou como toast.
86
+ - Interromper o usuário para ações triviais.
@@ -0,0 +1,3 @@
1
+ {
2
+ "components": ["button", "checkbox", "confirm-dialog", "radio-button"]
3
+ }
File without changes
@@ -0,0 +1,117 @@
1
+ # ConfirmDialog — Guia Técnico
2
+
3
+ **Seletor:** `s-confirm-dialog`
4
+ **Package:** `@seniorsistemas/angular-components/confirm-dialog`
5
+
6
+ ## Exports e Imports
7
+
8
+ | Tipo | Símbolo |
9
+ | ------- | ---------------------- |
10
+ | Service | `ConfirmDialogService` |
11
+ | Type | `ConfirmDialog` |
12
+
13
+ ```typescript
14
+ import { ConfirmDialogService } from '@seniorsistemas/angular-components/confirm-dialog';
15
+ import type { ConfirmDialog } from '@seniorsistemas/angular-components/confirm-dialog';
16
+ ```
17
+
18
+ > **Erro comum:** `Module has no exported member 'ConfirmDialogModule'` — use `ConfirmDialogService` diretamente; não existe `ConfirmDialogModule` público nesta versão.
19
+
20
+ ---
21
+
22
+ O ConfirmDialog é **SEMPRE** utilizado via `ConfirmDialogService`. O componente `s-confirm-dialog` **não deve ser instanciado diretamente** no template — ele é renderizado internamente pelo serviço.
23
+
24
+ ---
25
+
26
+ ## Padrão único: Via `ConfirmDialogService` ✅ ÚNICO PADRÃO SUPORTADO
27
+
28
+ Abre um dialog de confirmação com mensagem, título e botões configuráveis. Retorna uma `Promise<boolean>` que resolve com `true` se o usuário confirmar e `false` se cancelar.
29
+
30
+ ### Regras obrigatórias
31
+
32
+ - **NUNCA** adicionar `<s-confirm-dialog>` diretamente no template — o serviço gerencia isso automaticamente
33
+ - Importar `ConfirmDialogModule` no módulo ou componente raiz para registrar o componente
34
+
35
+ ### Exemplo
36
+
37
+ ```typescript
38
+ import { ConfirmDialogModule, ConfirmDialogService } from '@seniorsistemas/angular-components/confirm-dialog';
39
+
40
+ @Component({
41
+ imports: [ConfirmDialogModule],
42
+ template: `
43
+ <s-button
44
+ label="Deletar"
45
+ (clicked)="delete()"
46
+ />
47
+ `,
48
+ })
49
+ export class MyComponent {
50
+ private readonly confirmDialog = inject(ConfirmDialogService);
51
+
52
+ protected async delete(): Promise<void> {
53
+ const confirmed = await this.confirmDialog.open({
54
+ header: 'Confirmar exclusão',
55
+ message: 'Tem certeza que deseja excluir este registro? Esta ação não pode ser desfeita.',
56
+ acceptLabel: 'Excluir',
57
+ rejectLabel: 'Cancelar',
58
+ });
59
+
60
+ if (confirmed) {
61
+ // prosseguir com a exclusão
62
+ }
63
+ }
64
+ }
65
+ ```
66
+
67
+ ---
68
+
69
+ ## Notas de integração
70
+
71
+ - `ConfirmDialogService.open()` retorna `Promise<boolean>`: use `async/await` ou `.then()` para aguardar a resposta do usuário.
72
+ - Personalize os labels dos botões via `acceptLabel` e `rejectLabel` para dar clareza à ação (ex: `'Excluir'` ao invés de `'Ok'`).
73
+
74
+ ---
75
+
76
+ ## Erros Comuns
77
+
78
+ ### `Property 'open' does not exist on type 'ConfirmDialogService'`
79
+
80
+ **Tipo:** method
81
+ **Solução:** Use `confirm()` em vez de `open()`.
82
+
83
+ ```typescript
84
+ // ❌ Incorreto
85
+ await this.confirmDialogService.open({ ... })
86
+
87
+ // ✅ Correto
88
+ this.confirmDialogService.confirm({ ... })
89
+ ```
90
+
91
+ > `ConfirmDialogService` desta versão expõe o método `confirm(confirmDialog)`.
92
+
93
+ ---
94
+
95
+ ### `Type 'Promise<boolean>' is not assignable...`
96
+
97
+ **Tipo:** return-type
98
+ **Solução:** Não use `await` no retorno de `confirm()`; o fluxo ocorre via callbacks `accept`/`reject`.
99
+
100
+ ```typescript
101
+ // ❌ Incorreto
102
+ const ok = await confirmDialogService.confirm(config);
103
+
104
+ // ✅ Correto
105
+ confirmDialogService.confirm({
106
+ ...config,
107
+ accept: () => {
108
+ /* ação confirmada */
109
+ },
110
+ reject: () => {
111
+ /* ação cancelada */
112
+ },
113
+ });
114
+ ```
115
+
116
+ > O método `confirm()` não retorna `Promise` nesta implementação.
117
+
@@ -0,0 +1,202 @@
1
+ # Dialog — Guia Técnico
2
+
3
+ **Seletor:** `s-dialog`
4
+ **Package:** `@seniorsistemas/angular-components/dialog`
5
+
6
+ ## Exports e Imports
7
+
8
+ | Tipo | Símbolo |
9
+ | --------- | ---------------------------- |
10
+ | Component | `DialogComponent` |
11
+ | Service | `DialogService` |
12
+ | Class | `ActiveDialog` |
13
+ | Types | `DialogOptions`, `DialogRef` |
14
+
15
+ ```typescript
16
+ import { DialogComponent } from '@seniorsistemas/angular-components/dialog';
17
+ import { DialogService } from '@seniorsistemas/angular-components/dialog';
18
+ import { ActiveDialog } from '@seniorsistemas/angular-components/dialog';
19
+ import type { DialogOptions, DialogRef } from '@seniorsistemas/angular-components/dialog';
20
+ ```
21
+
22
+ > **Erros comuns:**
23
+ >
24
+ > - `Module has no exported member 'DialogModule'` → use `DialogComponent` standalone
25
+ > - `Module has no exported member 'DynamicDialogRef'` → use `DialogRef` e `ActiveDialog`
26
+ > - `Module has no exported member 'DIALOG_DATA'` → use padrão `ActiveDialog`/`DialogRef`
27
+
28
+ ---
29
+
30
+ O Dialog pode ser controlado de forma declarativa via binding de propriedade ou de forma programática via `DialogService`. A forma de uso deve ser escolhida conforme o contexto de onde o dialog será aberto.
31
+
32
+ ---
33
+
34
+ ## Padrão 1: Declarativo via `[(visible)]`
35
+
36
+ **Preferido:** Não (use apenas para casos simples)
37
+
38
+ O estado de abertura é controlado por uma propriedade booleana no componente pai, vinculada via two-way binding `[(visible)]`.
39
+
40
+ ### Exemplo
41
+
42
+ ```typescript
43
+ import { DialogModule } from '@seniorsistemas/angular-components/dialog';
44
+
45
+ @Component({
46
+ imports: [DialogModule],
47
+ template: `
48
+ <s-button
49
+ label="Abrir"
50
+ (clicked)="isOpen = true"
51
+ />
52
+ <s-dialog
53
+ [(visible)]="isOpen"
54
+ header="Título"
55
+ >
56
+ <ng-template sTemplate="body"> Conteúdo do dialog </ng-template>
57
+ <ng-template sTemplate="footer">
58
+ <s-button
59
+ label="Fechar"
60
+ (clicked)="isOpen = false"
61
+ />
62
+ </ng-template>
63
+ </s-dialog>
64
+ `,
65
+ })
66
+ export class MyComponent {
67
+ protected isOpen = false;
68
+ }
69
+ ```
70
+
71
+ ---
72
+
73
+ ## Padrão 2: Programático via `DialogService` ✅ PREFERIDO
74
+
75
+ O dialog é aberto injetando o `DialogService`, que cria e renderiza o componente dinamicamente. Permite abrir dialogs de qualquer lugar da aplicação, inclusive de serviços.
76
+
77
+ ### Exemplo
78
+
79
+ ```typescript
80
+ import { DialogComponent, DialogService } from '@seniorsistemas/angular-components/dialog';
81
+
82
+
83
+ // No componente ou serviço que abre o dialog
84
+ @Component({ ... })
85
+ export class MyComponent {
86
+ private readonly dialogService = inject(DialogService);
87
+
88
+ protected openDialog(): void {
89
+ this.dialogService.open(MyDialogContentComponent, {
90
+ header: 'Título do Dialog',
91
+ data: { id: 1 }
92
+ });
93
+ }
94
+ }
95
+
96
+ // Componente de conteúdo do dialog
97
+ @Component({
98
+ imports: [DialogComponent, TemplateModule]
99
+ template: `
100
+ <s-dialog header="Dialog Header">
101
+ <!-- TODO: Campo opcional, utilizar quando [header] não for provido, caso queira HTML Customizado para o header. -->
102
+ <ng-template sTemplate="header"></ng-template>
103
+
104
+ <p>Id recebido: {{ data.id }}</p>
105
+ <!-- TODO: Campo opcional. -->
106
+ <ng-template
107
+ sTemplate="footer"
108
+ let-activeDialog="activeDialog">
109
+ <div class="grid grid-cols-12">
110
+ <div class="col-span-12 flex justify-around">
111
+ <s-button
112
+ label="Ação terciária"
113
+ priority="link"
114
+ />
115
+ <s-button
116
+ (clicked)="activeDialog.dismiss('Dismissed dialog demo footer')"
117
+ label="Ação secundária"
118
+ />
119
+ <s-button
120
+ label="Ação primária"
121
+ (clicked)="activeDialog.close('Closed dialog demo footer')"
122
+ priority="primary"
123
+ />
124
+ </div>
125
+ </div>
126
+ </ng-template>
127
+
128
+ </s-dialog>
129
+
130
+ `
131
+ })
132
+ export class MyDialogContentComponent {
133
+ readonly activeDialog = inject(ActiveDialog);
134
+
135
+ // Função opcional, caso utilize let-activeDialog no ng-template nao precisa fechar por aqui, ambos possuem o mesmo valor de activeDialog
136
+ protected close(): void {
137
+ this.activeDialog.close('resultado opcional');
138
+ }
139
+ }
140
+ ```
141
+
142
+ ---
143
+
144
+ ## Notas de integração
145
+
146
+ - O `<s-dialog>` deve existir no template para que o `DialogService` possa renderizar conteúdo nele. Coloque-o em um componente de layout de nível superior.
147
+ - Para receber dados no componente de conteúdo, use `inject(DIALOG_DATA)` importado de `@seniorsistemas/angular-components/dialog`.
148
+ - Para fechar o dialog de dentro do componente de conteúdo, injete `DynamicDialogRef` e chame `ref.close(resultado)`.
149
+
150
+ ---
151
+
152
+ ## Erros Comuns
153
+
154
+ ### `Module has no exported member 'DialogModule'`
155
+
156
+ **Tipo:** import
157
+ **Solução:** Use standalone import com `DialogComponent`.
158
+
159
+ ```typescript
160
+ // ❌ Incorreto
161
+ imports: [DialogModule];
162
+
163
+ // ✅ Correto
164
+ imports: [DialogComponent];
165
+ ```
166
+
167
+ > Nesta versão, o public API expõe `DialogComponent` para uso declarativo.
168
+
169
+ ---
170
+
171
+ ### `Property 'onClose' does not exist on type 'DialogRef'`
172
+
173
+ **Tipo:** property
174
+ **Solução:** Use o observable `closed`.
175
+
176
+ ```typescript
177
+ // ❌ Incorreto
178
+ ref.onClose.subscribe(...)
179
+
180
+ // ✅ Correto
181
+ ref.closed.subscribe(...)
182
+ ```
183
+
184
+ > `DialogRef` expõe `closed` e `dismissed`.
185
+
186
+ ---
187
+
188
+ ### `Object literal may only specify known properties, and 'header' does not exist in type 'DialogOptions'`
189
+
190
+ **Tipo:** parameter
191
+ **Solução:** Use apenas as `DialogOptions` suportadas (`destroyClickOutside`, `escapeOnEsc`, `size`).
192
+
193
+ ```typescript
194
+ // ❌ Incorreto
195
+ dialogService.open(MyDialogComponent, { header: 'Título' });
196
+
197
+ // ✅ Correto
198
+ dialogService.open(MyDialogComponent, { size: 'md' });
199
+ ```
200
+
201
+ > `DialogOptions` nesta versão não inclui `header`/`data` no tipo público.
202
+