@po-ui/ng-components 21.22.0 → 21.23.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 (38) hide show
  1. package/fesm2022/po-ui-ng-components.mjs +7143 -5942
  2. package/fesm2022/po-ui-ng-components.mjs.map +1 -1
  3. package/lib/components/po-field/index.d.ts +7 -0
  4. package/lib/components/po-field/po-field.module.d.ts +1 -2
  5. package/lib/components/po-field/po-search-ai/interfaces/po-search-ai-column.interface.d.ts +39 -0
  6. package/lib/components/po-field/po-search-ai/interfaces/po-search-ai-literals-default.interface.d.ts +7 -0
  7. package/lib/components/po-field/po-search-ai/interfaces/po-search-ai-literals.interface.d.ts +13 -0
  8. package/lib/components/po-field/po-search-ai/interfaces/po-search-ai.interface.d.ts +109 -0
  9. package/lib/components/po-field/po-search-ai/po-search-ai-base.component.d.ts +229 -0
  10. package/lib/components/po-field/po-search-ai/po-search-ai-odata-filter.d.ts +38 -0
  11. package/lib/components/po-field/po-search-ai/po-search-ai-utils.d.ts +12 -0
  12. package/lib/components/po-field/po-search-ai/po-search-ai.component.d.ts +58 -0
  13. package/lib/components/po-field/po-search-ai/po-search-ai.module.d.ts +9 -0
  14. package/lib/components/po-field/po-search-ai/po-search-ai.service.d.ts +34 -0
  15. package/lib/components/po-table/index.d.ts +1 -0
  16. package/lib/components/po-table/interfaces/po-table-column.interface.d.ts +14 -0
  17. package/lib/components/po-table/interfaces/po-table-literals.interface.d.ts +2 -0
  18. package/lib/components/po-table/interfaces/po-table-search-ai-field.interface.d.ts +122 -0
  19. package/lib/components/po-table/po-table-base.component.d.ts +69 -0
  20. package/lib/components/po-table/po-table.component.d.ts +51 -0
  21. package/package.json +4 -4
  22. package/po-ui-ng-components-21.23.0.tgz +0 -0
  23. package/schematics/ng-add/index.js +1 -1
  24. package/schematics/ng-update/v14/index.js +1 -1
  25. package/schematics/ng-update/v15/index.js +1 -1
  26. package/schematics/ng-update/v16/index.js +1 -1
  27. package/schematics/ng-update/v17/index.js +1 -1
  28. package/schematics/ng-update/v18/index.js +2 -2
  29. package/schematics/ng-update/v19/index.js +2 -2
  30. package/schematics/ng-update/v2/index.js +1 -1
  31. package/schematics/ng-update/v20/index.js +2 -2
  32. package/schematics/ng-update/v21/index.js +1 -1
  33. package/schematics/ng-update/v3/index.js +1 -1
  34. package/schematics/ng-update/v4/index.js +1 -1
  35. package/schematics/ng-update/v5/index.js +1 -1
  36. package/schematics/ng-update/v6/index.js +1 -1
  37. package/types/po-ui-ng-components.d.ts +10413 -9633
  38. package/po-ui-ng-components-21.22.0.tgz +0 -0
@@ -24,6 +24,13 @@ export * from './po-decimal/po-decimal.component';
24
24
  export * from './po-email/po-email.component';
25
25
  export * from './po-input/po-input.component';
26
26
  export * from './po-input/po-mask';
27
+ export * from './po-search-ai/po-search-ai.component';
28
+ export * from './po-search-ai/po-search-ai.module';
29
+ export * from './po-search-ai/po-search-ai.service';
30
+ export * from './po-search-ai/po-search-ai-odata-filter';
31
+ export * from './po-search-ai/interfaces/po-search-ai-column.interface';
32
+ export * from './po-search-ai/interfaces/po-search-ai.interface';
33
+ export * from './po-search-ai/interfaces/po-search-ai-literals.interface';
27
34
  export * from './po-login/po-login.component';
28
35
  export * from './po-lookup/interfaces/po-lookup-column.interface';
29
36
  export * from './po-lookup/interfaces/po-lookup-filter.interface';
@@ -2,8 +2,7 @@
2
2
  * @description
3
3
  *
4
4
  * Módulo dos componentes: po-checkbox, po-checkbox-group, po-combo, po-datepicker, po-datetimepicker, po-datepicker-range, po-email, po-input,
5
- * po-lookup, po-number, po-multiselect, po-password, po-radio-group, po-select, po-switch, po-textarea, po-upload
6
- * e po-url.
5
+ * po-lookup, po-number, po-multiselect, po-password, po-radio-group, po-select, po-switch, po-textarea, po-upload, po-url e po-search-ai.
7
6
  *
8
7
  * > Não esqueça de importar o módulo `FormsModule` para usar os componentes de formulários e caso esteja trabalhando com
9
8
  * > formulários reativos, importe o módulo `ReactiveFormsModule`, ambos nativos do Angular.
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @usedBy PoSearchAiComponent
3
+ *
4
+ * @description
5
+ *
6
+ * Interface que define os metadados de uma coluna/campo enviados ao endpoint de IA
7
+ * para contextualizar a interpretação da busca em linguagem natural.
8
+ *
9
+ * Esses metadados ajudam o provedor de IA a mapear os termos digitados pelo usuário
10
+ * para as propriedades reais dos dados e a gerar um filtro (por exemplo, OData) coerente.
11
+ */
12
+ export interface PoSearchAiColumn {
13
+ /** Nome da propriedade do campo (ex: `name`, `age`, `city`). */
14
+ property: string;
15
+ /** Rótulo legível exibido ao usuário (ex: `Nome`, `Idade`, `Cidade`). */
16
+ label: string;
17
+ /**
18
+ * Tipo do campo, utilizado pela IA para gerar comparações adequadas.
19
+ *
20
+ * Valores comuns: `string`, `number`, `date`, `currency`, `boolean`.
21
+ *
22
+ * @default `string`
23
+ */
24
+ type?: string;
25
+ }
26
+ /**
27
+ * @docsPrivate
28
+ *
29
+ * Formato de entrada aceito por `extractColumnsMetadata`: superconjunto de `PoSearchAiColumn`
30
+ * que inclui campos de controle de visibilidade usados por consumidores como o `po-table`.
31
+ */
32
+ export interface PoSearchAiColumnInput {
33
+ property?: string;
34
+ label?: string;
35
+ type?: string;
36
+ /** Quando `true`, a coluna é excluída dos metadados enviados à IA. Padrão: `false`. */
37
+ searchAiIgnore?: boolean;
38
+ visible?: boolean;
39
+ }
@@ -0,0 +1,7 @@
1
+ import { PoSearchAiLiterals } from './po-search-ai-literals.interface';
2
+ export declare const poSearchAiLiteralsDefault: {
3
+ en: PoSearchAiLiterals;
4
+ es: PoSearchAiLiterals;
5
+ pt: PoSearchAiLiterals;
6
+ ru: PoSearchAiLiterals;
7
+ };
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @usedBy PoSearchAiComponent
3
+ *
4
+ * @description
5
+ *
6
+ * Interface para definição das literais usadas no `po-search-ai`.
7
+ */
8
+ export interface PoSearchAiLiterals {
9
+ /** Texto de acessibilidade do botão de limpar o campo. */
10
+ clean?: string;
11
+ /** Mensagem exibida quando a busca com IA falha. */
12
+ errorMessage?: string;
13
+ }
@@ -0,0 +1,109 @@
1
+ import { PoSearchAiColumn } from './po-search-ai-column.interface';
2
+ /**
3
+ * @usedBy PoSearchAiComponent
4
+ *
5
+ * @description
6
+ *
7
+ * Enum que define os tipos de resposta suportados pelo endpoint de IA.
8
+ *
9
+ */
10
+ export declare enum PoSearchAiResponseType {
11
+ /** Resposta contendo um filtro estruturado (ex: OData). */
12
+ filter = "filter",
13
+ /** Resposta conversacional em linguagem natural. */
14
+ chat = "chat",
15
+ /** Payload genérico definido pelo consumidor. */
16
+ custom = "custom"
17
+ }
18
+ /**
19
+ * @usedBy PoSearchAiComponent
20
+ *
21
+ * @description
22
+ *
23
+ * Interface que define o payload enviado ao endpoint de IA configurado via `p-url`.
24
+ *
25
+ * O componente é **agnóstico ao provedor de IA**: o backend (proxy) recebe este payload,
26
+ * encaminha para a LLM e retorna um `PoSearchAiResponse`.
27
+ */
28
+ export interface PoSearchAiRequest {
29
+ /** Texto em linguagem natural digitado pelo usuário. */
30
+ query: string;
31
+ /** Metadados dos campos disponíveis para a busca (ver `PoSearchAiColumn`). */
32
+ columns: Array<PoSearchAiColumn>;
33
+ }
34
+ /**
35
+ * @usedBy PoSearchAiComponent
36
+ *
37
+ * @description
38
+ *
39
+ * Interface que define a resposta esperada do endpoint de IA configurado via `p-url`.
40
+ */
41
+ export interface PoSearchAiResponse {
42
+ /**
43
+ * Tipo da resposta retornada pela IA.
44
+ *
45
+ * Quando omitido, o componente infere `'filter'` se `filter` estiver presente,
46
+ * caso contrário assume `'custom'`.
47
+ *
48
+ * @default `'filter'`
49
+ */
50
+ type?: PoSearchAiResponseType;
51
+ /**
52
+ * Filtro gerado pela IA, normalmente no padrão OData
53
+ * (ex: `age gt 30 and city eq 'São Paulo'`).
54
+ *
55
+ * Utilizado quando `type` é `'filter'`.
56
+ */
57
+ filter?: string;
58
+ /** Descrição legível, em linguagem natural, da resposta. */
59
+ description?: string;
60
+ /**
61
+ * Nível de confiança da interpretação da IA, em um intervalo de `0.0` a `1.0`.
62
+ *
63
+ * Utilizado em conjunto com `p-min-confidence` para decidir se o resultado é confiável.
64
+ */
65
+ confidence?: number;
66
+ /**
67
+ * Payload genérico da resposta da IA (mensagem de chat, ações, dados customizados, etc.).
68
+ *
69
+ * Utilizado quando `type` é `'chat'` ou `'custom'`.
70
+ */
71
+ data?: Record<string, any>;
72
+ }
73
+ /**
74
+ * @usedBy PoSearchAiComponent
75
+ *
76
+ * @description
77
+ *
78
+ * Interface que define o objeto emitido pelos eventos `p-result` e `p-low-confidence`.
79
+ */
80
+ export interface PoSearchAiResult {
81
+ /** Texto original digitado pelo usuário. */
82
+ query: string;
83
+ /** Tipo da resposta retornada pela IA. */
84
+ type: PoSearchAiResponseType;
85
+ /** Filtro retornado pela IA (ex: filtro OData). Presente quando `type` é `'filter'`. */
86
+ filter?: string;
87
+ /** Descrição legível da resposta. */
88
+ description?: string;
89
+ /** Nível de confiança da interpretação (`0.0` a `1.0`). */
90
+ confidence?: number;
91
+ /** Payload genérico da resposta (chat, ações, dados customizados, etc.). */
92
+ data?: Record<string, any>;
93
+ }
94
+ /**
95
+ * @usedBy PoSearchAiComponent
96
+ *
97
+ * @description
98
+ *
99
+ * Interface que define o objeto emitido pelo evento `p-error` quando a chamada à
100
+ * API de IA falha (erro HTTP, timeout, resposta inválida, etc.).
101
+ */
102
+ export interface PoSearchAiError {
103
+ /** Texto original digitado pelo usuário. */
104
+ query: string;
105
+ /** Código HTTP do erro (ex: `500`, `408` para timeout). */
106
+ statusCode: number;
107
+ /** Mensagem de erro. */
108
+ message: string;
109
+ }
@@ -0,0 +1,229 @@
1
+ import { AbstractControl } from '@angular/forms';
2
+ import { OnDestroy } from '@angular/core';
3
+ import { Subscription } from 'rxjs';
4
+ import { PoInputGeneric } from '../po-input-generic/po-input-generic';
5
+ import { PoSearchAiColumn } from './interfaces/po-search-ai-column.interface';
6
+ import { PoSearchAiLiterals } from './interfaces/po-search-ai-literals.interface';
7
+ import { PoSearchAiError, PoSearchAiResult } from './interfaces/po-search-ai.interface';
8
+ import { PoSearchAiService } from './po-search-ai.service';
9
+ /**
10
+ * @description
11
+ *
12
+ * O `po-search-ai` é um componente de **busca em linguagem natural** baseado em input.
13
+ * Ele permite que o usuário digite uma consulta em texto livre (por exemplo,
14
+ * *"clientes de SP com saldo acima de R$ 500"*) e a converte, através de um provedor de IA,
15
+ * em um filtro estruturado (normalmente OData) que pode ser aplicado por outro componente,
16
+ * como o [`po-table`](/documentation/po-table).
17
+ *
18
+ * > **Componente experimental:** o `po-search-ai` está em fase experimental. Sua API
19
+ * > (propriedades, eventos e contrato com o backend) pode sofrer alterações
20
+ * > entre versões. Utilize com cautela em ambientes de produção.
21
+ *
22
+ * O componente é **agnóstico ao provedor de IA**. Toda a comunicação ocorre através do
23
+ * endpoint informado em `p-url`, que recebe `{ query, columns }` e deve retornar
24
+ * `{ filter, description, confidence }`. Isso garante que nenhuma chave de IA seja
25
+ * exposta no client-side — a integração com a LLM é responsabilidade do backend (proxy).
26
+ *
27
+ * Por herdar de `po-input`, o componente suporta as propriedades comuns de formulário
28
+ * (label, help, helper, required, disabled, readonly, size, clean, loading, etc.) e
29
+ * integra-se a formulários `template-driven` e `reactive`.
30
+ *
31
+ * #### Endpoint de IA (backend)
32
+ *
33
+ * O componente **não conversa diretamente com a LLM**. Você deve disponibilizar um endpoint
34
+ * próprio (proxy) e informá-lo em `p-url`.
35
+ * É nesse backend que devem ficar a chave de acesso da IA e as regras usadas para montar
36
+ * o prompt. Essas informações nunca devem ficar expostas no client-side
37
+ *
38
+ * O contrato é simples. O componente faz um `POST` enviando:
39
+ *
40
+ * ```json
41
+ * {
42
+ * "query": "funcionários de São Paulo com salário acima de 5000",
43
+ * "columns": [
44
+ * { "property": "name", "label": "Nome", "type": "string" },
45
+ * { "property": "city", "label": "Cidade", "type": "string" },
46
+ * { "property": "salary", "label": "Salário", "type": "number" }
47
+ * ]
48
+ * }
49
+ * ```
50
+ *
51
+ * E o endpoint deve responder com:
52
+ *
53
+ * ```json
54
+ * {
55
+ * "filter": "city eq 'São Paulo' and salary gt 5000",
56
+ * "description": "Funcionários de São Paulo com salário acima de 5000",
57
+ * "confidence": 0.92
58
+ * }
59
+ * ```
60
+ *
61
+ * Onde `filter` é o filtro estruturado gerado pela IA (normalmente OData), `description` é um
62
+ * resumo legível e `confidence` (`0.0` a `1.0`) indica o quão confiável foi a interpretação —
63
+ * comparado com `p-min-confidence` para decidir entre os eventos `p-result` e `p-low-confidence`.
64
+ *
65
+ * > **Exemplo de implementação:** o PO UI mantém um backend de referência, open source, que recebe
66
+ * > esse contrato e o encaminha para um provedor de IA (Groq/Gemini).
67
+ * > - Endpoint público: [`/v1/ai/filter`](https://po-sample-api.onrender.com/api#/ai)
68
+ * > - Código-fonte: [po-sample-api/src/ai/ai.service.ts](https://github.com/po-ui/po-sample-api/blob/main/src/ai/ai.service.ts)
69
+ *
70
+ * #### Estados de comportamento
71
+ *
72
+ * - **Idle:** aguardando a digitação da consulta.
73
+ * - **Loading:** consulta em andamento (ícone de carregamento ativo).
74
+ * - **Aplicado:** após uma resposta bem-sucedida, exibe um feedback persistente de
75
+ * "filtro aplicado via IA" enquanto a consulta estiver ativa, com opção de limpeza rápida.
76
+ * - **Baixa confiança:** quando `confidence` for menor que `p-min-confidence`, emite
77
+ * `p-low-confidence` e não aplica o filtro automaticamente.
78
+ * - **Erro:** quando a chamada falha, emite `p-error`.
79
+ *
80
+ * #### Tokens customizáveis
81
+ *
82
+ * É possível alterar o estilo do componente usando os seguintes tokens (CSS):
83
+ *
84
+ * > Para maiores informações, acesse o guia [Personalizando o Tema Padrão com Tokens CSS](https://po-ui.io/guides/theme-customization).
85
+ *
86
+ * | Propriedade | Descrição | Valor Padrão |
87
+ * |-------------------------------|-----------------------------------------------------------------|------------------------------------|
88
+ * | **Default** | | |
89
+ * | `--font-family` | Família tipográfica do campo | `var(--font-family-theme)` |
90
+ * | `--font-size` | Tamanho da fonte do campo | `var(--font-size)` |
91
+ * | `--text-color` | Cor do texto digitado | `var(--color-neutral-dark-90)` |
92
+ * | `--text-color-placeholder` | Cor do texto do placeholder | `var(--color-neutral-light-30)` |
93
+ * | `--color` | Cor da borda do campo | `var(--color-neutral-dark-70)` |
94
+ * | `--background` | Cor de fundo do campo | `var(--color-neutral-light-05)` |
95
+ * | `--border-radius` | Raio da borda do campo | `var(--border-radius-md)` |
96
+ * | **Ícones e divisória** | | |
97
+ * | `--color-icon-read` | Cor do ícone de busca por IA | `var(--color-neutral-dark-70)` |
98
+ * | `--color-divider` | Cor da divisória vertical entre o campo e o botão de busca | `var(--color-neutral-mid-40)` |
99
+ * | `--color-icon-processing` | Cor do ícone exibido enquanto a consulta está sendo processada | `var(--color-action-default)` |
100
+ * | **Hover** | | |
101
+ * | `--color-hover` | Cor da borda no estado hover | `var(--color-brand-01-dark)` |
102
+ * | `--background-hover` | Cor de fundo no estado hover | `var(--color-brand-01-lightest)` |
103
+ * | **Focused** | | |
104
+ * | `--color-focused` | Cor da borda no estado de foco | `var(--color-action-default)` |
105
+ * | `--outline-color-focused` | Cor do outline no estado de foco | `var(--color-action-focus)` |
106
+ * | **Disabled** | | |
107
+ * | `--color-disabled` | Cor da borda no estado desabilitado | `var(--color-neutral-light-30)` |
108
+ * | `--background-disabled` | Cor de fundo no estado desabilitado | `var(--color-neutral-light-20)` |
109
+ */
110
+ export declare abstract class PoSearchAiBaseComponent extends PoInputGeneric implements OnDestroy {
111
+ protected aiErrorMessage: string;
112
+ protected aiLoading: boolean;
113
+ protected aiSubscription: Subscription;
114
+ /**
115
+ * @optional
116
+ *
117
+ * @description
118
+ *
119
+ * Evento disparado quando o filtro aplicado via IA é limpo, seja pela ação do usuário
120
+ * ou programaticamente. Não emite valor.
121
+ */
122
+ clearEvent: import("@angular/core").OutputEmitterRef<void>;
123
+ /**
124
+ * @optional
125
+ *
126
+ * @description
127
+ *
128
+ * Metadados das colunas/campos disponíveis para a busca por IA. Essas informações são
129
+ * enviadas ao endpoint configurado em `p-url` para que a IA mapeie os termos digitados
130
+ * para as propriedades reais dos dados.
131
+ *
132
+ * @default `[]`
133
+ */
134
+ columns: import("@angular/core").InputSignal<PoSearchAiColumn[]>;
135
+ protected readonly effectiveLiterals: import("@angular/core").Signal<any>;
136
+ /**
137
+ * @optional
138
+ *
139
+ * @description
140
+ *
141
+ * Evento disparado quando a chamada à API de IA falha (erro HTTP, timeout, etc.).
142
+ * Emite um objeto `PoSearchAiError`.
143
+ */
144
+ error: import("@angular/core").OutputEmitterRef<PoSearchAiError>;
145
+ private readonly language;
146
+ /**
147
+ * @optional
148
+ *
149
+ * @description
150
+ *
151
+ * Objeto com os literais usados no componente. Permite sobrescrever as mensagens padrão
152
+ * para internacionalização ou customização.
153
+ */
154
+ literals: import("@angular/core").InputSignal<PoSearchAiLiterals>;
155
+ /**
156
+ * @optional
157
+ *
158
+ * @description
159
+ *
160
+ * Evento disparado quando a confiança da resposta da IA é menor que `p-min-confidence`.
161
+ * Emite um objeto `PoSearchAiResult`, permitindo ao desenvolvedor decidir o que fazer
162
+ * (ex: confirmar com o usuário antes de aplicar o filtro).
163
+ */
164
+ lowConfidence: import("@angular/core").OutputEmitterRef<PoSearchAiResult>;
165
+ /**
166
+ * @optional
167
+ *
168
+ * @description
169
+ *
170
+ * Nível mínimo de confiança (`0.0` a `1.0`) para que o resultado da IA seja considerado
171
+ * confiável. Quando a confiança retornada for menor, o evento `p-low-confidence` é
172
+ * emitido em vez de `p-result`.
173
+ *
174
+ * @default `0.5`
175
+ */
176
+ minConfidence: import("@angular/core").InputSignalWithTransform<number, number>;
177
+ /**
178
+ * @optional
179
+ *
180
+ * @description
181
+ *
182
+ * Evento disparado quando a IA retorna um resultado com confiança maior ou igual a
183
+ * `p-min-confidence`. Emite um objeto `PoSearchAiResult`.
184
+ *
185
+ * O campo `type` do resultado indica como o consumidor deve interpretar a resposta:
186
+ *
187
+ * - **`filter`** _(padrão)_: a IA retornou um filtro estruturado (ex: OData). Use `result.filter`
188
+ * para aplicar a consulta à fonte de dados — por exemplo, passando para um `po-table` via `p-filter`.
189
+ *
190
+ * - **`chat`**: a IA retornou uma resposta conversacional. Use `result.data` para exibir a mensagem
191
+ * ao usuário, por exemplo em um painel lateral ou tooltip.
192
+ *
193
+ * - **`custom`**: a IA retornou um payload genérico definido pelo backend. Use `result.data` para
194
+ * executar qualquer ação específica da aplicação (ex: navegação, abertura de modal, acionamento de comando).
195
+ */
196
+ result: import("@angular/core").OutputEmitterRef<PoSearchAiResult>;
197
+ protected searchAiService: PoSearchAiService;
198
+ /**
199
+ * @optional
200
+ *
201
+ * @description
202
+ *
203
+ * Tempo máximo de espera (em milissegundos) pela resposta da IA antes de abortar a
204
+ * requisição e emitir `p-error` com `statusCode 408`.
205
+ *
206
+ * @default `10000`
207
+ */
208
+ timeout: import("@angular/core").InputSignalWithTransform<number, number>;
209
+ /**
210
+ * @optional
211
+ *
212
+ * @description
213
+ *
214
+ * Endpoint (proxy) responsável por encaminhar a consulta para o provedor de IA.
215
+ * Recebe `{ query, columns }` via `POST` e deve retornar `{ filter, description, confidence }`.
216
+ *
217
+ * > A integração com a LLM e a guarda de chaves devem ocorrer **no backend**, nunca no client-side.
218
+ */
219
+ url: import("@angular/core").InputSignal<string>;
220
+ constructor();
221
+ abstract clearSearch(): void;
222
+ abstract search(): void;
223
+ getErrorPattern(): string;
224
+ extraValidation(_c: AbstractControl): {
225
+ [key: string]: any;
226
+ };
227
+ hasValue(): boolean;
228
+ ngOnDestroy(): void;
229
+ }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @docsPrivate
3
+ *
4
+ * Este arquivo implementa um motor independente para interpretar filtros no formato OData v4 e aplicá-los sobre listas de objetos JavaScript.
5
+ * Na prática, ele permite que o po-search-ai receba uma condição de filtro em texto, como “nome contém Henrique" ou “idade maior que 18”, e transforme isso em uma função capaz de filtrar os dados localmente.
6
+ * A principal vantagem é que essa lógica não depende do Angular nem de outro framework. Com isso, o mesmo motor pode ser reutilizado por diferentes consumidores do po-search-ai, mantendo o comportamento de filtro padronizado.
7
+ * O arquivo suporta os principais recursos necessários para filtros simples e intermediários, como comparações, operadores lógicos, funções de texto, valores booleanos, nulos, números, datas e campos aninhados.
8
+ * Também há um cuidado para evitar que filtros inválidos quebrem a aplicação. Quando o filtro está vazio ou não pode ser interpretado, o motor apenas mantém a lista original, sem aplicar nenhuma filtragem.
9
+ * Em resumo, este arquivo centraliza a interpretação e execução dos filtros, reduzindo dependências externas e tornando o comportamento mais previsível, reutilizável e fácil de manter.
10
+ *
11
+ * Operadores suportados:
12
+ * - Comparação: eq, ne, gt, ge, lt, le
13
+ * - Lógicos: and, or, not, parênteses
14
+ * - Funções de string: contains, startswith, endswith
15
+ * - Funções de transformação: tolower, toupper
16
+ * - Literais: string ('...'), número, true, false, null, data ISO (yyyy-MM-dd)
17
+ */
18
+ /**
19
+ * Compila uma string de filtro OData v4 em um predicado JavaScript reutilizável.
20
+ *
21
+ * Operadores suportados: `eq`, `ne`, `gt`, `ge`, `lt`, `le`, `and`, `or`, `not`,
22
+ * `contains`, `startswith`, `endswith`, `tolower`, `toupper`.
23
+ *
24
+ * Em caso de filtro inválido ou vazio, retorna `() => true` (sem filtragem).
25
+ *
26
+ * @param filter String de filtro OData (ex: `"city eq 'SP' and salary gt 5000"`).
27
+ */
28
+ export declare function poSearchAiCompileFilter(filter: string): (item: Record<string, unknown>) => boolean;
29
+ /**
30
+ * Filtra um array de itens aplicando uma string de filtro OData v4.
31
+ *
32
+ * Utiliza `poSearchAiCompileFilter` internamente. Em caso de filtro inválido
33
+ * ou array vazio, retorna o array original sem modificação.
34
+ *
35
+ * @param items Array de itens a filtrar.
36
+ * @param filter String de filtro OData.
37
+ */
38
+ export declare function poSearchAiFilterItems<T extends Record<string, unknown>>(items: Array<T>, filter: string): Array<T>;
@@ -0,0 +1,12 @@
1
+ import { PoSearchAiColumn, PoSearchAiColumnInput } from './interfaces/po-search-ai-column.interface';
2
+ /**
3
+ * @docsPrivate
4
+ *
5
+ * Extrai e normaliza os metadados das colunas para envio à IA,
6
+ * descartando colunas sem `property`, invisíveis ou marcadas com `searchAiIgnore`.
7
+ *
8
+ * Função utilitária pura, reutilizada pelo `PoSearchAiService` e pelo `PoTableComponent`.
9
+ *
10
+ * @param columns Lista de colunas no formato bruto do componente consumidor.
11
+ */
12
+ export declare function extractSearchAiColumns(columns: Array<PoSearchAiColumnInput>): Array<PoSearchAiColumn>;
@@ -0,0 +1,58 @@
1
+ import { ElementRef, OnChanges, SimpleChanges } from '@angular/core';
2
+ import { PoButtonComponent } from '../../po-button/po-button.component';
3
+ import { PoSearchAiBaseComponent } from './po-search-ai-base.component';
4
+ /**
5
+ * @docsExtends PoSearchAiBaseComponent
6
+ *
7
+ * @example
8
+ *
9
+ * <example name="po-search-ai-basic" title="PO AI Search Basic">
10
+ * <file name="sample-po-search-ai-basic/sample-po-search-ai-basic.component.html"> </file>
11
+ * <file name="sample-po-search-ai-basic/sample-po-search-ai-basic.component.ts"> </file>
12
+ * </example>
13
+ *
14
+ * <example name="po-search-ai-labs" title="PO AI Search Labs">
15
+ * <file name="sample-po-search-ai-labs/sample-po-search-ai-labs.component.html"> </file>
16
+ * <file name="sample-po-search-ai-labs/sample-po-search-ai-labs.component.ts"> </file>
17
+ * </example>
18
+ *
19
+ * <example name="po-search-ai-result" title="PO AI Search - Result">
20
+ * <file name="sample-po-search-ai-result/sample-po-search-ai-result.component.html"> </file>
21
+ * <file name="sample-po-search-ai-result/sample-po-search-ai-result.component.ts"> </file>
22
+ * </example>
23
+ *
24
+ * <example name="po-search-ai-filter" title="PO AI Search - Filter">
25
+ * <file name="sample-po-search-ai-filter/sample-po-search-ai-filter.component.html"> </file>
26
+ * <file name="sample-po-search-ai-filter/sample-po-search-ai-filter.component.ts"> </file>
27
+ * </example>
28
+ */
29
+ export declare class PoSearchAiComponent extends PoSearchAiBaseComponent implements OnChanges {
30
+ inp: ElementRef;
31
+ iconSearchAiEl: PoButtonComponent;
32
+ id: string;
33
+ constructor();
34
+ ngOnChanges(changes: SimpleChanges): void;
35
+ /**
36
+ * Envia a consulta atual (valor do campo) para o endpoint de IA configurado em `p-url`.
37
+ *
38
+ * Caso a consulta esteja vazia ou `p-url` não esteja definido, nada é feito.
39
+ * O resultado é emitido via `p-result` (ou `p-low-confidence` quando a confiança for baixa)
40
+ * e falhas são emitidas via `p-error`.
41
+ */
42
+ search(): void;
43
+ clearAndFocus(): void;
44
+ handleCleanKeydown(event: KeyboardEvent): void;
45
+ /**
46
+ * Limpa o filtro aplicado via IA, esvazia o campo e emite o evento `p-clear`.
47
+ */
48
+ clearSearch(): void;
49
+ /**
50
+ * Manipula a tecla pressionada no campo: dispara a busca ao pressionar `Enter`.
51
+ *
52
+ * @param event Evento de teclado.
53
+ */
54
+ onSearchKeydown(event: KeyboardEvent): void;
55
+ private finishProcessing;
56
+ private handleResponse;
57
+ private handleError;
58
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @description
3
+ * Módulo do componente `po-search-ai`.
4
+ *
5
+ * Pode ser importado de forma independente por qualquer módulo que precise renderizar
6
+ * o campo de busca por IA.
7
+ */
8
+ export declare class PoSearchAiModule {
9
+ }
@@ -0,0 +1,34 @@
1
+ import { HttpClient, HttpHeaders } from '@angular/common/http';
2
+ import { Observable } from 'rxjs';
3
+ import { PoSearchAiColumn, PoSearchAiColumnInput } from './interfaces/po-search-ai-column.interface';
4
+ import { PoSearchAiResponse } from './interfaces/po-search-ai.interface';
5
+ /**
6
+ * @docsPrivate
7
+ *
8
+ * Serviço responsável por enviar a consulta em linguagem natural para o endpoint de IA
9
+ * configurado no `PoSearchAiComponent` e tratar a resposta/erros.
10
+ *
11
+ * O serviço é agnóstico ao provedor de IA: ele apenas faz o `POST` do payload
12
+ * (`{ query, columns }`) e padroniza o tratamento de timeout e falhas.
13
+ */
14
+ export declare class PoSearchAiService {
15
+ private readonly http;
16
+ readonly headers: HttpHeaders;
17
+ constructor(http: HttpClient);
18
+ /**
19
+ * Envia a consulta para o endpoint de IA.
20
+ *
21
+ * @param url Endpoint configurado em `p-url`.
22
+ * @param query Texto em linguagem natural digitado pelo usuário.
23
+ * @param columns Metadados das colunas/campos disponíveis para a busca.
24
+ * @param timeoutMs Tempo máximo de espera (ms) antes de abortar a requisição.
25
+ */
26
+ sendQuery(url: string, query: string, columns: Array<PoSearchAiColumn>, timeoutMs?: number): Observable<PoSearchAiResponse>;
27
+ /**
28
+ * Extrai e normaliza os metadados das colunas para envio à IA,
29
+ * descartando colunas sem `property` ou marcadas para serem ignoradas.
30
+ *
31
+ * @param columns Lista de colunas no formato bruto do componente consumidor.
32
+ */
33
+ extractColumnsMetadata(columns: Array<PoSearchAiColumnInput>): Array<PoSearchAiColumn>;
34
+ }
@@ -6,6 +6,7 @@ export * from './interfaces/po-table-boolean.interface';
6
6
  export * from './interfaces/po-table-column.interface';
7
7
  export * from './interfaces/po-table-column-sort.interface';
8
8
  export * from './interfaces/po-table-literals.interface';
9
+ export * from './interfaces/po-table-search-ai-field.interface';
9
10
  export * from './po-table-column-icon/po-table-column-icon.interface';
10
11
  export * from './po-table-column-label/po-table-column-label.interface';
11
12
  export * from './po-table-detail/po-table-detail-column.interface';
@@ -299,4 +299,18 @@ export interface PoTableColumn {
299
299
  * Caso a coluna possua um `type` diferente de `string`, a máscara será ignorada.
300
300
  */
301
301
  mask?: string;
302
+ /**
303
+ * @optional
304
+ *
305
+ * @description
306
+ *
307
+ * Quando `true`, exclui a coluna dos metadados enviados ao endpoint de IA configurado
308
+ * em `p-search-ai-field`, independentemente de estar visível na tabela.
309
+ *
310
+ * Útil para ocultar colunas de controle interno (IDs, flags técnicos, etc.) da
311
+ * interpretação da linguagem natural.
312
+ *
313
+ * @default `false`
314
+ */
315
+ searchAiIgnore?: boolean;
302
316
  }
@@ -38,4 +38,6 @@ export interface PoTableLiterals {
38
38
  deleteSuccessful?: string;
39
39
  /** Texto de notificação de erro na requisição Delete */
40
40
  deleteApiError?: string;
41
+ /** Texto exibido como placeholder padrão no campo de busca por IA (`p-search-ai-field`) quando nenhum `placeholder` é informado. */
42
+ searchAiPlaceholder?: string;
41
43
  }