@po-ui/ng-components 21.21.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.
- package/fesm2022/po-ui-ng-components.mjs +7407 -6039
- package/fesm2022/po-ui-ng-components.mjs.map +1 -1
- package/lib/components/po-dynamic/po-dynamic-form/interfaces/po-dynamic-form-field.interface.d.ts +5 -5
- package/lib/components/po-field/index.d.ts +7 -0
- package/lib/components/po-field/po-datetimepicker/po-datetimepicker-base.component.d.ts +1 -2
- package/lib/components/po-field/po-datetimepicker/po-datetimepicker.component.d.ts +12 -1
- package/lib/components/po-field/po-field.module.d.ts +1 -2
- package/lib/components/po-field/po-lookup/interfaces/po-lookup-column.interface.d.ts +36 -0
- package/lib/components/po-field/po-lookup/po-lookup.component.d.ts +6 -0
- package/lib/components/po-field/po-search-ai/interfaces/po-search-ai-column.interface.d.ts +39 -0
- package/lib/components/po-field/po-search-ai/interfaces/po-search-ai-literals-default.interface.d.ts +7 -0
- package/lib/components/po-field/po-search-ai/interfaces/po-search-ai-literals.interface.d.ts +13 -0
- package/lib/components/po-field/po-search-ai/interfaces/po-search-ai.interface.d.ts +109 -0
- package/lib/components/po-field/po-search-ai/po-search-ai-base.component.d.ts +229 -0
- package/lib/components/po-field/po-search-ai/po-search-ai-odata-filter.d.ts +38 -0
- package/lib/components/po-field/po-search-ai/po-search-ai-utils.d.ts +12 -0
- package/lib/components/po-field/po-search-ai/po-search-ai.component.d.ts +58 -0
- package/lib/components/po-field/po-search-ai/po-search-ai.module.d.ts +9 -0
- package/lib/components/po-field/po-search-ai/po-search-ai.service.d.ts +34 -0
- package/lib/components/po-table/index.d.ts +1 -0
- package/lib/components/po-table/interfaces/po-table-column.interface.d.ts +55 -2
- package/lib/components/po-table/interfaces/po-table-literals.interface.d.ts +2 -0
- package/lib/components/po-table/interfaces/po-table-search-ai-field.interface.d.ts +122 -0
- package/lib/components/po-table/po-table-base.component.d.ts +69 -0
- package/lib/components/po-table/po-table.component.d.ts +53 -0
- package/package.json +4 -4
- package/po-ui-ng-components-21.23.0.tgz +0 -0
- package/schematics/ng-add/index.js +1 -1
- package/schematics/ng-update/v14/index.js +1 -1
- package/schematics/ng-update/v15/index.js +1 -1
- package/schematics/ng-update/v16/index.js +1 -1
- package/schematics/ng-update/v17/index.js +1 -1
- package/schematics/ng-update/v18/index.js +2 -2
- package/schematics/ng-update/v19/index.js +2 -2
- package/schematics/ng-update/v2/index.js +1 -1
- package/schematics/ng-update/v20/index.js +2 -2
- package/schematics/ng-update/v21/index.js +1 -1
- package/schematics/ng-update/v3/index.js +1 -1
- package/schematics/ng-update/v4/index.js +1 -1
- package/schematics/ng-update/v5/index.js +1 -1
- package/schematics/ng-update/v6/index.js +1 -1
- package/types/po-ui-ng-components.d.ts +10501 -9628
- package/po-ui-ng-components-21.21.0.tgz +0 -0
|
@@ -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,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';
|
|
@@ -106,6 +106,7 @@ export interface PoTableColumn {
|
|
|
106
106
|
* |------------|-----------------|-----------|----------|
|
|
107
107
|
* | Monetário | `currency` | Formato para valores monetários. Informe o código da moeda (ISO 4217). | `'BRL'`, `'USD'`, `'EUR'`, `'RUB'` |
|
|
108
108
|
* | Data | `date` | Aceita apenas os caracteres de dia(dd), mês(MM) e ano (yyyy ou yy), caso não seja informado um formato o mesmo será 'dd/MM/yyyy' | `'dd/MM/yyyy'`, `'dd-MM-yy'`, `'mm/dd/yyyy'` |
|
|
109
|
+
* | Data/Hora | `dateTime` | Aceita os caracteres de dia(dd), mês(MM), ano(yyyy), hora(HH para 24h ou hh para 12h), minutos(mm), segundos(ss), milissegundos(SSS) e período(a para AM/PM). Caso não seja informado um formato o mesmo será 'dd/MM/yyyy HH:mm:ss' | `'dd/MM/yyyy HH:mm'`, `'dd/MM/yyyy HH:mm:ss'`, `'dd/MM/yyyy HH:mm:ss.SSS'`, `'MM/dd/yyyy hh:mm a'`, `'yyyy-MM-dd HH:mm'`, `'short'`, `'medium'` |
|
|
109
110
|
* | Hora | `time` | Aceita apenas os caracteres de hora(HH), minutos(mm), segundos(ss) e milisegundos(f-ffffff), os milisegundos são opcionais, caso não seja informado um formato o mesmo será 'HH:mm:ss' | `'HH:mm'`, `'HH:mm:ss.ffffff'`, `'HH:mm:ss.ff'`, `'mm:ss.fff'` |
|
|
110
111
|
* | Número | `number` | Aceita um valor seguindo o padrão [**DecimalPipe**](https://angular.dev/api/common/DecimalPipe) para formatação, e caso não seja informado, o número será exibido na sua forma original. | `'1.2-5'` (ex.: `50` → `50.00`) |
|
|
111
112
|
*
|
|
@@ -214,8 +215,10 @@ export interface PoTableColumn {
|
|
|
214
215
|
* por exemplo: `'2017-11-28'` ou `new Date(2017, 10, 28)`.
|
|
215
216
|
*
|
|
216
217
|
* - `dateTime`: valor de data com horário.
|
|
217
|
-
* + Aceita o tipo _string_ no formato **ISO-8601** extendido **'yyyy-mm-
|
|
218
|
-
*
|
|
218
|
+
* + Aceita o tipo _string_ no formato **ISO-8601** extendido **'yyyy-mm-ddTHH:mm:ss+|-hh:mm'**
|
|
219
|
+
* ou **'yyyy-mm-ddTHH:mm+|-hh:mm'** (sem segundos),
|
|
220
|
+
* e o tipo _Date_ padrão do Javascript, por exemplo: `'2017-11-28T00:00:00-02:00'`, `'2017-11-28T14:30-02:00'` ou `new Date(2017, 10, 28)`.
|
|
221
|
+
* + A formatação de exibição pode ser configurada pela propriedade `format`.
|
|
219
222
|
*
|
|
220
223
|
* - `detail`: array de objetos para o master-detail.
|
|
221
224
|
* + Incompatível com `virtual-scroll`, que requer altura fixa nas linhas.
|
|
@@ -260,4 +263,54 @@ export interface PoTableColumn {
|
|
|
260
263
|
*/
|
|
261
264
|
width?: string;
|
|
262
265
|
fixed?: boolean;
|
|
266
|
+
/**
|
|
267
|
+
* @optional
|
|
268
|
+
*
|
|
269
|
+
* @description
|
|
270
|
+
*
|
|
271
|
+
* Define uma máscara para formatação do valor exibido na coluna.
|
|
272
|
+
*
|
|
273
|
+
* A máscara é aplicada somente para **exibição** na tabela, formatando o valor bruto
|
|
274
|
+
* armazenado no model antes de apresentá-lo ao usuário.
|
|
275
|
+
*
|
|
276
|
+
* Caracteres válidos para a máscara:
|
|
277
|
+
* - `9` : aceita um dígito numérico (0-9).
|
|
278
|
+
* - `@` : aceita um caractere alfabético (a-z, A-Z).
|
|
279
|
+
* - `w` : aceita um caractere alfanumérico (a-z, A-Z, 0-9).
|
|
280
|
+
* - Demais caracteres são considerados fixos e inseridos automaticamente na formatação
|
|
281
|
+
* (por exemplo: `.`, `-`, `/`, `(`, `)`, `+`, ` `).
|
|
282
|
+
*
|
|
283
|
+
* Exemplos de uso:
|
|
284
|
+
* ```
|
|
285
|
+
* // CPF
|
|
286
|
+
* { property: 'cpf', label: 'CPF', mask: '999.999.999-99' }
|
|
287
|
+
*
|
|
288
|
+
* // CNPJ
|
|
289
|
+
* { property: 'cnpj', label: 'CNPJ', mask: '99.999.999/9999-99' }
|
|
290
|
+
*
|
|
291
|
+
* // Telefone
|
|
292
|
+
* { property: 'phone', label: 'Telefone', mask: '(99) 99999-9999' }
|
|
293
|
+
*
|
|
294
|
+
* // CEP
|
|
295
|
+
* { property: 'zipCode', label: 'CEP', mask: '99999-999' }
|
|
296
|
+
* ```
|
|
297
|
+
*
|
|
298
|
+
* > Esta propriedade é utilizada apenas para colunas do tipo `string` (padrão).
|
|
299
|
+
* Caso a coluna possua um `type` diferente de `string`, a máscara será ignorada.
|
|
300
|
+
*/
|
|
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;
|
|
263
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
|
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { PoSearchAiColumn } from '../../po-field/po-search-ai/interfaces/po-search-ai-column.interface';
|
|
2
|
+
import { PoSearchAiLiterals } from '../../po-field/po-search-ai/interfaces/po-search-ai-literals.interface';
|
|
3
|
+
import { PoSearchAiResult } from '../../po-field/po-search-ai/interfaces/po-search-ai.interface';
|
|
4
|
+
/**
|
|
5
|
+
* @usedBy PoTableComponent
|
|
6
|
+
*
|
|
7
|
+
* @description
|
|
8
|
+
*
|
|
9
|
+
* Interface de configuração da busca por IA integrada ao `po-table`, utilizada pela
|
|
10
|
+
* propriedade `p-search-ai-field`.
|
|
11
|
+
*
|
|
12
|
+
* Quando configurada, a tabela renderiza um campo `po-search-ai` na barra de ações,
|
|
13
|
+
* no lugar da busca textual padrão (`po-search`). O filtro gerado pela IA é aplicado
|
|
14
|
+
* automaticamente aos dados da tabela, conforme a estratégia definida em `apply`.
|
|
15
|
+
*
|
|
16
|
+
* #### Endpoint de IA (`url`)
|
|
17
|
+
*
|
|
18
|
+
* O campo `url` deve apontar para um endpoint (proxy) que implemente o contrato do
|
|
19
|
+
* `po-search-ai`: recebe `{ query, columns }` via `POST` e responde com
|
|
20
|
+
* `{ filter, description, confidence }`.
|
|
21
|
+
*
|
|
22
|
+
* > A integração com a LLM e a guarda de chaves devem ocorrer **no backend**, nunca
|
|
23
|
+
* > no client-side. O backend de referência open source está disponível em
|
|
24
|
+
* > [`po-sample-api`](https://github.com/po-ui/po-sample-api).
|
|
25
|
+
*
|
|
26
|
+
* #### Colunas enviadas à IA
|
|
27
|
+
*
|
|
28
|
+
* Por padrão, os metadados enviados ao endpoint são derivados automaticamente de
|
|
29
|
+
* `p-columns` da tabela, respeitando as colunas visíveis e excluindo aquelas com
|
|
30
|
+
* `searchAiIgnore: true`. O campo `columns` permite sobrescrever esse comportamento.
|
|
31
|
+
*
|
|
32
|
+
* #### Estratégia de aplicação do filtro (`apply`)
|
|
33
|
+
*
|
|
34
|
+
* | Valor | Comportamento |
|
|
35
|
+
* |-------|---------------|
|
|
36
|
+
* | `'auto'` (padrão) | Modo serviço: envia `$filter` ao `p-service-api`; modo local: aplica o parser OData interno sobre `p-items`. |
|
|
37
|
+
* | `'parser'` | Sempre usa o parser OData interno. No modo serviço, busca todos os dados e filtra localmente. |
|
|
38
|
+
* | `'server'` | Sempre delega o filtro ao `p-service-api` via `$filter`. |
|
|
39
|
+
* | `'none'` | Não aplica o filtro; apenas emite `p-search-ai-result` para o desenvolvedor tratar. |
|
|
40
|
+
* | `(result) => void` | Override total: o desenvolvedor recebe o resultado e assume o controle. |
|
|
41
|
+
*/
|
|
42
|
+
export interface PoTableSearchAiField {
|
|
43
|
+
/**
|
|
44
|
+
* Endpoint (proxy) de IA responsável por converter a consulta em linguagem natural
|
|
45
|
+
* em um filtro estruturado (OData). Repassado ao `po-search-ai` via `p-url`.
|
|
46
|
+
*
|
|
47
|
+
* O endpoint deve seguir o contrato do backend de referência (`po-sample-api`):
|
|
48
|
+
* - Recebe: `POST { query: string, columns: PoSearchAiColumn[] }`
|
|
49
|
+
* - Responde: `{ filter: string, description: string, confidence: number }`
|
|
50
|
+
*/
|
|
51
|
+
url: string;
|
|
52
|
+
/**
|
|
53
|
+
* @optional
|
|
54
|
+
*
|
|
55
|
+
* @description
|
|
56
|
+
*
|
|
57
|
+
* Override das colunas enviadas ao endpoint de IA. Quando omitido, os metadados
|
|
58
|
+
* são derivados automaticamente de `p-columns` da tabela, excluindo colunas com
|
|
59
|
+
* `visible: false` ou `searchAiIgnore: true`.
|
|
60
|
+
*/
|
|
61
|
+
columns?: Array<PoSearchAiColumn>;
|
|
62
|
+
/**
|
|
63
|
+
* @optional
|
|
64
|
+
*
|
|
65
|
+
* @description
|
|
66
|
+
*
|
|
67
|
+
* Nível mínimo de confiança (`0.0` a `1.0`) para que o filtro gerado pela IA seja
|
|
68
|
+
* aplicado automaticamente. Quando a confiança for inferior, o evento
|
|
69
|
+
* `p-search-ai-low-confidence` é emitido em vez de `p-search-ai-result`.
|
|
70
|
+
*
|
|
71
|
+
* @default `0.5`
|
|
72
|
+
*/
|
|
73
|
+
minConfidence?: number;
|
|
74
|
+
/**
|
|
75
|
+
* @optional
|
|
76
|
+
*
|
|
77
|
+
* @description
|
|
78
|
+
*
|
|
79
|
+
* Tempo máximo de espera (em milissegundos) pela resposta do endpoint de IA.
|
|
80
|
+
*
|
|
81
|
+
* @default `10000`
|
|
82
|
+
*/
|
|
83
|
+
timeout?: number;
|
|
84
|
+
/**
|
|
85
|
+
* @optional
|
|
86
|
+
*
|
|
87
|
+
* @description
|
|
88
|
+
*
|
|
89
|
+
* Texto exibido como placeholder no campo de busca por IA.
|
|
90
|
+
*/
|
|
91
|
+
placeholder?: string;
|
|
92
|
+
/**
|
|
93
|
+
* @optional
|
|
94
|
+
*
|
|
95
|
+
* @description
|
|
96
|
+
*
|
|
97
|
+
* Objeto com os literais usados pelo `po-search-ai` integrado à tabela. Permite
|
|
98
|
+
* sobrescrever as mensagens padrão para internacionalização ou customização.
|
|
99
|
+
*/
|
|
100
|
+
literals?: PoSearchAiLiterals;
|
|
101
|
+
/**
|
|
102
|
+
* @optional
|
|
103
|
+
*
|
|
104
|
+
* @description
|
|
105
|
+
*
|
|
106
|
+
* Define como o filtro OData retornado pela IA é aplicado à tabela.
|
|
107
|
+
*
|
|
108
|
+
* - `'auto'` _(padrão)_: aplica automaticamente conforme o modo da tabela —
|
|
109
|
+
* modo serviço envia `$filter` ao `p-service-api`; modo local usa o parser
|
|
110
|
+
* OData interno sobre `p-items`.
|
|
111
|
+
* - `'parser'`: sempre usa o parser OData interno. No modo serviço, busca todos
|
|
112
|
+
* os dados primeiro e filtra localmente em seguida.
|
|
113
|
+
* - `'server'`: sempre envia `$filter` ao `p-service-api`, independentemente
|
|
114
|
+
* do modo da tabela.
|
|
115
|
+
* - `'none'`: não aplica o filtro; apenas emite `p-search-ai-result`.
|
|
116
|
+
* - `(result: PoSearchAiResult) => void`: override total — o desenvolvedor recebe
|
|
117
|
+
* o resultado e assume o controle da aplicação do filtro.
|
|
118
|
+
*
|
|
119
|
+
* @default `'auto'`
|
|
120
|
+
*/
|
|
121
|
+
apply?: 'auto' | 'parser' | 'server' | 'none' | ((result: PoSearchAiResult) => void);
|
|
122
|
+
}
|
|
@@ -6,8 +6,10 @@ import { PoSearchFilterMode } from '../po-search/enums/po-search-filter-mode.enu
|
|
|
6
6
|
import { PoTableAction } from './interfaces/po-table-action.interface';
|
|
7
7
|
import { PoTableColumnSort } from './interfaces/po-table-column-sort.interface';
|
|
8
8
|
import { PoTableColumn } from './interfaces/po-table-column.interface';
|
|
9
|
+
import { PoSearchAiError, PoSearchAiResult } from '../po-field/po-search-ai/interfaces/po-search-ai.interface';
|
|
9
10
|
import { PoTableLiterals } from './interfaces/po-table-literals.interface';
|
|
10
11
|
import { PoTableResponseApi } from './interfaces/po-table-response-api.interface';
|
|
12
|
+
import { PoTableSearchAiField } from './interfaces/po-table-search-ai-field.interface';
|
|
11
13
|
import { PoTableService } from './services/po-table.service';
|
|
12
14
|
export type QueryParamsType = string | number | boolean;
|
|
13
15
|
export declare const poTableContainer: string[];
|
|
@@ -239,6 +241,30 @@ export declare abstract class PoTableBaseComponent implements OnChanges, OnDestr
|
|
|
239
241
|
* @default `startsWith`
|
|
240
242
|
*/
|
|
241
243
|
filterType: PoSearchFilterMode;
|
|
244
|
+
/**
|
|
245
|
+
* @optional
|
|
246
|
+
*
|
|
247
|
+
* @description
|
|
248
|
+
*
|
|
249
|
+
* Configura a busca por linguagem natural integrada à tabela, substituindo o campo de busca padrão
|
|
250
|
+
* (`po-search`) pelo componente `po-search-ai` na barra de ações.
|
|
251
|
+
*
|
|
252
|
+
* Recebe um objeto do tipo `PoTableSearchAiField` com as configurações necessárias:
|
|
253
|
+
* - `url` _(obrigatório)_: endpoint (proxy) de IA que traduz a consulta em linguagem natural para um filtro
|
|
254
|
+
* estruturado (OData v4). O backend deve seguir o contrato do
|
|
255
|
+
* [`po-sample-api`](https://github.com/po-ui/po-sample-api).
|
|
256
|
+
* - `columns`: lista de colunas enviadas à IA; quando omitida, são derivadas de `p-columns`.
|
|
257
|
+
* - `minConfidence`: confiança mínima para aplicação automática do filtro (padrão `0.5`).
|
|
258
|
+
* - `timeout`: tempo máximo de espera pela resposta da IA em ms (padrão `10000`).
|
|
259
|
+
* - `placeholder`: texto exibido como placeholder no campo.
|
|
260
|
+
* - `literals`: literais customizadas do `po-search-ai`.
|
|
261
|
+
* - `apply`: estratégia de aplicação do filtro — `'auto'` (padrão), `'parser'`, `'server'`, `'none'`
|
|
262
|
+
* ou uma função `(result: PoSearchAiResult) => void`.
|
|
263
|
+
*
|
|
264
|
+
* Quando esta propriedade está definida, os eventos `p-search-ai-result`, `p-search-ai-low-confidence`
|
|
265
|
+
* e `p-search-ai-error` ficam disponíveis para tratamento customizado.
|
|
266
|
+
*/
|
|
267
|
+
searchAiField: import("@angular/core").InputSignal<PoTableSearchAiField>;
|
|
242
268
|
/**
|
|
243
269
|
* @optional
|
|
244
270
|
*
|
|
@@ -375,6 +401,49 @@ export declare abstract class PoTableBaseComponent implements OnChanges, OnDestr
|
|
|
375
401
|
* Por exemplo: ["idCard", "name", "hireStatus", "age"].
|
|
376
402
|
*/
|
|
377
403
|
columnRestoreManager: EventEmitter<string[]>;
|
|
404
|
+
/**
|
|
405
|
+
* @optional
|
|
406
|
+
*
|
|
407
|
+
* @description
|
|
408
|
+
*
|
|
409
|
+
* Evento emitido quando o `po-search-ai` retorna um resultado com confiança igual ou superior
|
|
410
|
+
* ao `minConfidence` configurado em `p-search-ai-field`.
|
|
411
|
+
*
|
|
412
|
+
* O parâmetro enviado é um objeto `PoSearchAiResult` contendo:
|
|
413
|
+
* - `filter`: string de filtro OData v4 gerada pela IA (ex: `"city eq 'SP' and salary gt 5000"`).
|
|
414
|
+
* - `description`: descrição em linguagem natural do filtro aplicado.
|
|
415
|
+
* - `confidence`: nível de confiança da resposta (0.0 a 1.0).
|
|
416
|
+
*
|
|
417
|
+
* > Quando `apply` for diferente de `'none'`, o filtro já é aplicado automaticamente pela tabela
|
|
418
|
+
* > antes deste evento ser emitido.
|
|
419
|
+
*/
|
|
420
|
+
searchAiResult: EventEmitter<PoSearchAiResult>;
|
|
421
|
+
/**
|
|
422
|
+
* @optional
|
|
423
|
+
*
|
|
424
|
+
* @description
|
|
425
|
+
*
|
|
426
|
+
* Evento emitido quando o `po-search-ai` retorna um resultado cuja confiança é inferior ao
|
|
427
|
+
* `minConfidence` configurado em `p-search-ai-field`. Nesse caso, o filtro **não** é aplicado
|
|
428
|
+
* automaticamente.
|
|
429
|
+
*
|
|
430
|
+
* O parâmetro enviado é um objeto `PoSearchAiResult` com os mesmos campos de `p-search-ai-result`,
|
|
431
|
+
* permitindo que o desenvolvedor decida como tratar o resultado de baixa confiança.
|
|
432
|
+
*/
|
|
433
|
+
searchAiLowConfidence: EventEmitter<PoSearchAiResult>;
|
|
434
|
+
/**
|
|
435
|
+
* @optional
|
|
436
|
+
*
|
|
437
|
+
* @description
|
|
438
|
+
*
|
|
439
|
+
* Evento emitido quando ocorre um erro na requisição ao endpoint de IA configurado em
|
|
440
|
+
* `p-search-ai-field`.
|
|
441
|
+
*
|
|
442
|
+
* O parâmetro enviado é um objeto `PoSearchAiError` contendo:
|
|
443
|
+
* - `statusCode`: código HTTP do erro (ex: `408` para timeout, `500` para erro interno).
|
|
444
|
+
* - `message`: mensagem descritiva do erro.
|
|
445
|
+
*/
|
|
446
|
+
searchAiError: EventEmitter<PoSearchAiError>;
|
|
378
447
|
allColumnsWidthPixels: boolean;
|
|
379
448
|
columnMasterDetail: PoTableColumn;
|
|
380
449
|
hasMainColumns: boolean;
|
|
@@ -8,6 +8,9 @@ import { PoNotificationService } from '../../services/po-notification/po-notific
|
|
|
8
8
|
import { PoModalAction, PoModalComponent } from '../po-modal';
|
|
9
9
|
import { PoPopupComponent } from '../po-popup/po-popup.component';
|
|
10
10
|
import { PoTableColumnLabel } from './po-table-column-label/po-table-column-label.interface';
|
|
11
|
+
import { PoSearchAiColumn } from '../po-field/po-search-ai/interfaces/po-search-ai-column.interface';
|
|
12
|
+
import { PoSearchAiError, PoSearchAiResult } from '../po-field/po-search-ai/interfaces/po-search-ai.interface';
|
|
13
|
+
import { PoSearchAiComponent } from '../po-field/po-search-ai/po-search-ai.component';
|
|
11
14
|
import { PoTableAction } from './interfaces/po-table-action.interface';
|
|
12
15
|
import { PoTableColumn } from './interfaces/po-table-column.interface';
|
|
13
16
|
import { PoTableBaseComponent, QueryParamsType } from './po-table-base.component';
|
|
@@ -68,6 +71,11 @@ import { PoTableColumnSpacing } from './enums/po-table-spacing.enum';
|
|
|
68
71
|
* <file name="sample-po-table-draggable/sample-po-table-draggable.component.html"> </file>
|
|
69
72
|
* <file name="sample-po-table-draggable/sample-po-table-draggable.component.ts"> </file>
|
|
70
73
|
* </example>
|
|
74
|
+
*
|
|
75
|
+
* <example name="po-table-search-ai" title="PO Table - Search A.I. (EXPERIMENTAL)">
|
|
76
|
+
* <file name="sample-po-table-search-ai/sample-po-table-search-ai.component.html"> </file>
|
|
77
|
+
* <file name="sample-po-table-search-ai/sample-po-table-search-ai.component.ts"> </file>
|
|
78
|
+
* </example>
|
|
71
79
|
*/
|
|
72
80
|
export declare class PoTableComponent extends PoTableBaseComponent implements AfterViewInit, DoCheck, OnDestroy, OnInit {
|
|
73
81
|
private readonly changeDetector;
|
|
@@ -91,6 +99,7 @@ export declare class PoTableComponent extends PoTableBaseComponent implements Af
|
|
|
91
99
|
actionsElement: QueryList<any>;
|
|
92
100
|
filterInput: ElementRef;
|
|
93
101
|
poSearchInput: ElementRef;
|
|
102
|
+
searchAiComponent: PoSearchAiComponent;
|
|
94
103
|
viewPort: CdkVirtualScrollViewport;
|
|
95
104
|
poNotification: PoNotificationService;
|
|
96
105
|
heightTableContainer: number;
|
|
@@ -118,6 +127,7 @@ export declare class PoTableComponent extends PoTableBaseComponent implements Af
|
|
|
118
127
|
private scrollEvent$;
|
|
119
128
|
private subscriptionScrollEvent;
|
|
120
129
|
private readonly subscriptionService;
|
|
130
|
+
private aiParserSubscription?;
|
|
121
131
|
private readonly clickListener;
|
|
122
132
|
private readonly resizeListener;
|
|
123
133
|
set columnManagerTarget(value: ElementRef);
|
|
@@ -231,6 +241,8 @@ export declare class PoTableComponent extends PoTableBaseComponent implements Af
|
|
|
231
241
|
*/
|
|
232
242
|
deleteItems(): void;
|
|
233
243
|
formatNumber(value: any, format: string): any;
|
|
244
|
+
protected formatWithMask(value: any, mask: string): string;
|
|
245
|
+
private isValidMaskChar;
|
|
234
246
|
getCellData(row: any, column: PoTableColumn): any;
|
|
235
247
|
getBooleanLabel(rowValue: any, columnBoolean: PoTableColumn): string;
|
|
236
248
|
getColumnIcons(row: any, column: PoTableColumn): any;
|
|
@@ -250,6 +262,47 @@ export declare class PoTableComponent extends PoTableBaseComponent implements Af
|
|
|
250
262
|
validateTableAction(row: any, tableAction: any): any;
|
|
251
263
|
onOpenColumnManager(): void;
|
|
252
264
|
onFilteredItemsChange(items: Array<any>): void;
|
|
265
|
+
get searchAiColumns(): Array<PoSearchAiColumn>;
|
|
266
|
+
get searchAiPlaceholder(): string;
|
|
267
|
+
onAiResult(result: PoSearchAiResult): void;
|
|
268
|
+
onAiLowConfidence(result: PoSearchAiResult): void;
|
|
269
|
+
onAiError(error: PoSearchAiError): void;
|
|
270
|
+
onAiClear(): void;
|
|
271
|
+
private shouldDelegateToServer;
|
|
272
|
+
private applyFilterViaServer;
|
|
273
|
+
private applyFilterViaParser;
|
|
274
|
+
private applyFilterLocally;
|
|
275
|
+
/**
|
|
276
|
+
* Atualiza programaticamente o valor do campo de busca por IA (`po-search-ai`) integrado à tabela
|
|
277
|
+
* via `p-search-ai-field`.
|
|
278
|
+
*
|
|
279
|
+
* Útil quando a aplicação precisa preencher a busca a partir de uma ação externa (por exemplo, o
|
|
280
|
+
* clique em um botão que sugere uma consulta pronta), opcionalmente disparando a busca em seguida.
|
|
281
|
+
*
|
|
282
|
+
* > Só tem efeito quando a propriedade `p-search-ai-field` está configurada. Caso contrário, o método
|
|
283
|
+
* > não executa nenhuma ação.
|
|
284
|
+
*
|
|
285
|
+
* @param { string } value Texto da consulta a ser inserido no campo de busca por IA.
|
|
286
|
+
* @param { boolean } triggerSearch Quando `true`, dispara automaticamente a busca após preencher o
|
|
287
|
+
* valor. Quando `false` _(padrão)_, apenas preenche o campo.
|
|
288
|
+
*
|
|
289
|
+
* @default `triggerSearch = false`
|
|
290
|
+
*
|
|
291
|
+
* @example
|
|
292
|
+
*
|
|
293
|
+
* ```typescript
|
|
294
|
+
* @ViewChild(PoTableComponent) table: PoTableComponent;
|
|
295
|
+
*
|
|
296
|
+
* onSuggestionClick() {
|
|
297
|
+
* // apenas preenche o campo
|
|
298
|
+
* this.table.updateSearchAIQuery('clientes de SP com saldo acima de 500');
|
|
299
|
+
*
|
|
300
|
+
* // preenche e já dispara a busca
|
|
301
|
+
* this.table.updateSearchAIQuery('clientes de SP com saldo acima de 500', true);
|
|
302
|
+
* }
|
|
303
|
+
* ```
|
|
304
|
+
*/
|
|
305
|
+
updateSearchAIQuery(value: string, triggerSearch?: boolean): void;
|
|
253
306
|
/**
|
|
254
307
|
* Método que remove um item da tabela.
|
|
255
308
|
*
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@po-ui/ng-components",
|
|
3
|
-
"version": "21.
|
|
3
|
+
"version": "21.23.0",
|
|
4
4
|
"description": "PO UI - Components",
|
|
5
5
|
"author": "PO UI",
|
|
6
6
|
"license": "MIT",
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"@angular/cdk": "~21.2.4",
|
|
25
|
-
"@po-ui/style": "21.
|
|
26
|
-
"@po-ui/ng-schematics": "21.
|
|
25
|
+
"@po-ui/style": "21.23.0",
|
|
26
|
+
"@po-ui/ng-schematics": "21.23.0",
|
|
27
27
|
"driver.js": "~1.4.0",
|
|
28
28
|
"echarts": "^5.6.0",
|
|
29
29
|
"tslib": "^2.6.2"
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"@angular/platform-browser-dynamic": "^21",
|
|
40
40
|
"@angular/router": "^21",
|
|
41
41
|
"@angular-devkit/schematics": "^21",
|
|
42
|
-
"@po-ui/style": "21.
|
|
42
|
+
"@po-ui/style": "21.23.0",
|
|
43
43
|
"rxjs": "~7.8.1",
|
|
44
44
|
"zone.js": "~0.15.0"
|
|
45
45
|
},
|
|
Binary file
|
|
@@ -18,7 +18,7 @@ function default_1(options) {
|
|
|
18
18
|
}
|
|
19
19
|
function addPoPackageAndInstall() {
|
|
20
20
|
return (tree, context) => {
|
|
21
|
-
(0, package_config_1.addPackageToPackageJson)(tree, '@po-ui/ng-components', '21.
|
|
21
|
+
(0, package_config_1.addPackageToPackageJson)(tree, '@po-ui/ng-components', '21.23.0');
|
|
22
22
|
// install packages
|
|
23
23
|
context.addTask(new tasks_1.NodePackageInstallTask());
|
|
24
24
|
};
|
|
@@ -6,7 +6,7 @@ const tasks_1 = require("@angular-devkit/schematics/tasks");
|
|
|
6
6
|
const package_config_1 = require("@po-ui/ng-schematics/package-config");
|
|
7
7
|
const changes_1 = require("./changes");
|
|
8
8
|
function default_1() {
|
|
9
|
-
return (0, schematics_1.chain)([(0, package_config_1.updatePackageJson)('21.
|
|
9
|
+
return (0, schematics_1.chain)([(0, package_config_1.updatePackageJson)('21.23.0', changes_1.updateDepedenciesVersion), postUpdate()]);
|
|
10
10
|
}
|
|
11
11
|
function postUpdate() {
|
|
12
12
|
return (_, context) => {
|
|
@@ -11,7 +11,7 @@ const changes_1 = require("./changes");
|
|
|
11
11
|
const httpClientModuleName = 'HttpClientModule';
|
|
12
12
|
const httpClientModuleSourcePath = '@angular/common/http';
|
|
13
13
|
function default_1() {
|
|
14
|
-
return (0, schematics_1.chain)([(0, package_config_1.updatePackageJson)('21.
|
|
14
|
+
return (0, schematics_1.chain)([(0, package_config_1.updatePackageJson)('21.23.0', changes_1.updateDepedenciesVersion), createUpgradeRule(), postUpdate()]);
|
|
15
15
|
}
|
|
16
16
|
function postUpdate() {
|
|
17
17
|
return (_, context) => {
|
|
@@ -6,7 +6,7 @@ const tasks_1 = require("@angular-devkit/schematics/tasks");
|
|
|
6
6
|
const package_config_1 = require("@po-ui/ng-schematics/package-config");
|
|
7
7
|
const changes_1 = require("./changes");
|
|
8
8
|
function default_1() {
|
|
9
|
-
return (0, schematics_1.chain)([(0, package_config_1.updatePackageJson)('21.
|
|
9
|
+
return (0, schematics_1.chain)([(0, package_config_1.updatePackageJson)('21.23.0', changes_1.updateDepedenciesVersion), postUpdate()]);
|
|
10
10
|
}
|
|
11
11
|
function postUpdate() {
|
|
12
12
|
return (_, context) => {
|
|
@@ -6,7 +6,7 @@ const tasks_1 = require("@angular-devkit/schematics/tasks");
|
|
|
6
6
|
const package_config_1 = require("@po-ui/ng-schematics/package-config");
|
|
7
7
|
const changes_1 = require("./changes");
|
|
8
8
|
function default_1() {
|
|
9
|
-
return (0, schematics_1.chain)([(0, package_config_1.updatePackageJson)('21.
|
|
9
|
+
return (0, schematics_1.chain)([(0, package_config_1.updatePackageJson)('21.23.0', changes_1.updateDepedenciesVersion), postUpdate()]);
|
|
10
10
|
}
|
|
11
11
|
function postUpdate() {
|
|
12
12
|
return (_, context) => {
|
|
@@ -40,11 +40,11 @@ function main(options) {
|
|
|
40
40
|
configureNewIcon.toLowerCase() === 'y' ||
|
|
41
41
|
configureNewIcon.toLowerCase() === 'sim' ||
|
|
42
42
|
configureNewIcon.toLowerCase() === '') {
|
|
43
|
-
return (0, schematics_1.chain)([(0, package_config_1.updatePackageJson)('21.
|
|
43
|
+
return (0, schematics_1.chain)([(0, package_config_1.updatePackageJson)('21.23.0', changes_1.updateDepedenciesVersion), createUpgradeRule(), postUpdate()]);
|
|
44
44
|
}
|
|
45
45
|
else {
|
|
46
46
|
return (0, schematics_1.chain)([
|
|
47
|
-
(0, package_config_1.updatePackageJson)('21.
|
|
47
|
+
(0, package_config_1.updatePackageJson)('21.23.0', changes_1.updateDepedenciesVersion),
|
|
48
48
|
addImportOnly(options, [IconsDictionaryName, poIconDictionary], poModuleSourcePath),
|
|
49
49
|
addProviderToAppModule(options, newProviderDictionary),
|
|
50
50
|
updateAppConfigFileRule(),
|
|
@@ -40,11 +40,11 @@ function main(options) {
|
|
|
40
40
|
configureNewIcon.toLowerCase() === 'y' ||
|
|
41
41
|
configureNewIcon.toLowerCase() === 'sim' ||
|
|
42
42
|
configureNewIcon.toLowerCase() === '') {
|
|
43
|
-
return (0, schematics_1.chain)([(0, package_config_1.updatePackageJson)('21.
|
|
43
|
+
return (0, schematics_1.chain)([(0, package_config_1.updatePackageJson)('21.23.0', changes_1.updateDepedenciesVersion), createUpgradeRule(), postUpdate()]);
|
|
44
44
|
}
|
|
45
45
|
else {
|
|
46
46
|
return (0, schematics_1.chain)([
|
|
47
|
-
(0, package_config_1.updatePackageJson)('21.
|
|
47
|
+
(0, package_config_1.updatePackageJson)('21.23.0', changes_1.updateDepedenciesVersion),
|
|
48
48
|
addImportOnly(options, [IconsDictionaryName, poIconDictionary], poModuleSourcePath),
|
|
49
49
|
addProviderToAppModule(options, newProviderDictionary),
|
|
50
50
|
updateAppConfigFileRule(),
|
|
@@ -10,7 +10,7 @@ const package_config_1 = require("@po-ui/ng-schematics/package-config");
|
|
|
10
10
|
const changes_1 = require("./changes");
|
|
11
11
|
function updateToV2() {
|
|
12
12
|
return (0, schematics_1.chain)([
|
|
13
|
-
updatePackageJson('21.
|
|
13
|
+
updatePackageJson('21.23.0', changes_1.dependeciesChanges),
|
|
14
14
|
(0, replace_1.replaceInFile)('tslint.json', changes_1.tsLintReplaces),
|
|
15
15
|
(0, replace_1.replaceInFile)('angular.json', changes_1.angularJsonReplaces),
|
|
16
16
|
createUpgradeRule(),
|
|
@@ -40,11 +40,11 @@ function main(options) {
|
|
|
40
40
|
configureNewIcon.toLowerCase() === 'y' ||
|
|
41
41
|
configureNewIcon.toLowerCase() === 'sim' ||
|
|
42
42
|
configureNewIcon.toLowerCase() === '') {
|
|
43
|
-
return (0, schematics_1.chain)([(0, package_config_1.updatePackageJson)('21.
|
|
43
|
+
return (0, schematics_1.chain)([(0, package_config_1.updatePackageJson)('21.23.0', changes_1.updateDepedenciesVersion), createUpgradeRule(), postUpdate()]);
|
|
44
44
|
}
|
|
45
45
|
else {
|
|
46
46
|
return (0, schematics_1.chain)([
|
|
47
|
-
(0, package_config_1.updatePackageJson)('21.
|
|
47
|
+
(0, package_config_1.updatePackageJson)('21.23.0', changes_1.updateDepedenciesVersion),
|
|
48
48
|
addImportOnly(options, [IconsDictionaryName, poIconDictionary], poModuleSourcePath),
|
|
49
49
|
addProviderToAppModule(options, newProviderDictionary),
|
|
50
50
|
updateAppConfigFileRule(),
|