@praxisui/table 1.0.0-beta.61 → 1.0.0-beta.63
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/README.md +9 -4
- package/fesm2022/{praxisui-table-table-ai.adapter-DAmsfime.mjs → praxisui-table-table-ai.adapter-C5rjLb8E.mjs} +9 -3
- package/fesm2022/{praxisui-table-table-ai.adapter-DAmsfime.mjs.map → praxisui-table-table-ai.adapter-C5rjLb8E.mjs.map} +1 -1
- package/fesm2022/praxisui-table.mjs +816 -457
- package/fesm2022/praxisui-table.mjs.map +1 -1
- package/index.d.ts +121 -26
- package/package.json +10 -9
package/README.md
CHANGED
|
@@ -50,12 +50,17 @@ last_updated: "2026-03-07"
|
|
|
50
50
|
|
|
51
51
|
# @praxisui/table
|
|
52
52
|
|
|
53
|
-
##
|
|
53
|
+
## Documentation
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
- Documentação oficial: https://praxisui.dev
|
|
56
|
+
- Aplicação de referência: https://github.com/codexrodrigues/praxis-ui-quickstart
|
|
57
|
+
- Indicado para: data grids enterprise com filtros, edicao, virtualizacao, renderers e governanca de configuracao
|
|
56
58
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
+
## When to use
|
|
60
|
+
|
|
61
|
+
- Exibir grandes volumes de dados com filtros e operacoes ricas
|
|
62
|
+
- Governar configuracao de colunas, toolbar e comportamento em runtime
|
|
63
|
+
- Integrar tabelas a fluxos CRUD, IA e editores visuais do ecossistema Praxis UI
|
|
59
64
|
|
|
60
65
|
> Componente de tabela empresarial avançado com arquitetura unificada
|
|
61
66
|
|
|
@@ -157,8 +157,8 @@ class TableAiAdapter extends BaseAiAdapter {
|
|
|
157
157
|
if (!this.table.resourcePath) {
|
|
158
158
|
availableFeatures.push('data-connection');
|
|
159
159
|
}
|
|
160
|
-
if (!
|
|
161
|
-
availableFeatures.push('
|
|
160
|
+
if (!this.table.idField) {
|
|
161
|
+
availableFeatures.push('bindings.idField');
|
|
162
162
|
}
|
|
163
163
|
if (!behavior.filtering?.enabled) {
|
|
164
164
|
availableFeatures.push('behavior.filtering');
|
|
@@ -217,6 +217,12 @@ class TableAiAdapter extends BaseAiAdapter {
|
|
|
217
217
|
missingCapabilities.push('conditional');
|
|
218
218
|
}
|
|
219
219
|
return {
|
|
220
|
+
authoringContract: {
|
|
221
|
+
kind: 'praxis.table.editor',
|
|
222
|
+
usesBindings: true,
|
|
223
|
+
bindingsPaths: ['bindings.resourcePath', 'bindings.idField', 'bindings.horizontalScroll'],
|
|
224
|
+
runtimeConfigProjection: 'TableConfig',
|
|
225
|
+
},
|
|
220
226
|
availableFeatures,
|
|
221
227
|
missingCapabilities: Array.from(new Set(missingCapabilities)),
|
|
222
228
|
inputs: {
|
|
@@ -813,4 +819,4 @@ Columns Analysis:
|
|
|
813
819
|
}
|
|
814
820
|
|
|
815
821
|
export { TableAiAdapter };
|
|
816
|
-
//# sourceMappingURL=praxisui-table-table-ai.adapter-
|
|
822
|
+
//# sourceMappingURL=praxisui-table-table-ai.adapter-C5rjLb8E.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"praxisui-table-table-ai.adapter-DAmsfime.mjs","sources":["../../../projects/praxis-table/src/lib/ai/table-data-profiler.ts","../../../projects/praxis-table/src/lib/ai/table-ai.adapter.ts"],"sourcesContent":["import { TableConfig } from '@praxisui/core';\n\nexport interface ColumnStats {\n field: string;\n header?: string;\n inferredType: 'string' | 'number' | 'boolean' | 'date' | 'mixed' | 'empty';\n cardinality: number; // Quantidade de valores únicos\n hasNulls: boolean;\n // Amostra de valores frequentes para contexto (limitado a 5)\n topValues: any[];\n // Para numbers\n min?: number;\n max?: number;\n // Para dates\n dateRange?: { start: string; end: string };\n // Flags úteis para sugestão\n isUrl?: boolean;\n isEmail?: boolean;\n isLongText?: boolean; // > 50 chars\n}\n\nexport interface DataProfile {\n rowCount: number;\n columns: Record<string, ColumnStats>;\n generatedAt: number;\n}\n\n/**\n * Analisa uma amostra de dados da tabela para gerar estatísticas\n * que ajudem a IA a sugerir renderers e formatos adequados.\n */\nexport class TableDataProfiler {\n private static SAMPLE_LIMIT = 3; // Analisa no máximo 3 linhas para performance\n private static VALUE_TRUNCATE = 50; // Trunca strings longas no contexto\n\n static profile(\n data: any[],\n config: TableConfig,\n options?: { sampleLimit?: number; rowCountOverride?: number }\n ): DataProfile {\n const sampleLimit = options?.sampleLimit ?? this.SAMPLE_LIMIT;\n const rowCount = options?.rowCountOverride ?? data.length;\n const profile: DataProfile = {\n rowCount,\n columns: {},\n generatedAt: Date.now()\n };\n\n if (!data || data.length === 0 || !config.columns) {\n return profile;\n }\n\n // 1. Selecionar amostra (início, meio e fim se possível, ou apenas slice)\n // Para simplicidade e estabilidade, pegamos os primeiros N itens.\n const sample = data.slice(0, sampleLimit);\n\n // 2. Iterar colunas configuradas\n for (const col of config.columns) {\n if (!col || !col.field) continue;\n const values = sample.map(row => this.getValue(row, col.field)).filter(v => v !== null && v !== undefined && v !== '');\n \n const stats: ColumnStats = {\n field: col.field,\n header: col.header,\n inferredType: 'empty',\n cardinality: 0,\n hasNulls: values.length < sample.length,\n topValues: []\n };\n\n if (values.length > 0) {\n stats.inferredType = this.inferType(values);\n stats.cardinality = new Set(values.map(v => String(v))).size;\n \n // Coletar Top Values (frequência)\n const freqMap = new Map<string, number>();\n values.forEach(v => {\n const k = String(v);\n freqMap.set(k, (freqMap.get(k) || 0) + 1);\n });\n \n stats.topValues = Array.from(freqMap.entries())\n .sort((a, b) => b[1] - a[1]) // Sort by count desc\n .slice(0, 5)\n .map(([val]) => this.sanitizeValue(val, stats.inferredType));\n\n // Stats específicas por tipo\n if (stats.inferredType === 'number') {\n const nums = values.map(v => Number(v)).filter(n => !isNaN(n));\n if (nums.length) {\n stats.min = Math.min(...nums);\n stats.max = Math.max(...nums);\n }\n } else if (stats.inferredType === 'date') {\n const dates = values.map(v => new Date(v).getTime()).filter(t => !isNaN(t));\n if (dates.length) {\n stats.dateRange = {\n start: new Date(Math.min(...dates)).toISOString(),\n end: new Date(Math.max(...dates)).toISOString()\n };\n }\n } else if (stats.inferredType === 'string') {\n const strVal = String(values[0]);\n stats.isUrl = strVal.startsWith('http');\n stats.isEmail = strVal.includes('@') && strVal.includes('.');\n stats.isLongText = values.some(v => String(v).length > 50);\n }\n }\n\n profile.columns[col.field] = stats;\n }\n\n return profile;\n }\n\n private static getValue(row: any, path: string): any {\n if (!path || typeof path !== 'string') return undefined;\n return path.split('.').reduce((obj, key) => obj?.[key], row);\n }\n\n private static inferType(values: any[]): ColumnStats['inferredType'] {\n const first = values[0];\n if (typeof first === 'number') return 'number';\n if (typeof first === 'boolean') return 'boolean';\n if (first instanceof Date) return 'date';\n \n // Check string formats\n const str = String(first);\n if (!isNaN(Number(str)) && str.trim() !== '') return 'number';\n if (!isNaN(Date.parse(str)) && str.length > 5) return 'date'; // length check avoids short strings being parsed as dates\n \n return 'string';\n }\n\n private static sanitizeValue(val: string, type: string): any {\n if (type === 'string' && val.length > this.VALUE_TRUNCATE) {\n return val.substring(0, this.VALUE_TRUNCATE) + '...';\n }\n return val;\n }\n}\n","import { firstValueFrom, Observable } from 'rxjs';\nimport { BaseAiAdapter, PatchResult, AiSuggestion, Capability } from '@praxisui/ai';\nimport { TableConfig, deepMerge, type AsyncConfigStorage } from '@praxisui/core';\nimport { PraxisTable } from '../praxis-table';\nimport { TABLE_AI_CAPABILITIES, TASK_PRESETS } from './table-ai-capabilities';\nimport { TableDataProfiler } from './table-data-profiler';\n\nexport interface AiServiceLike {\n classifyIntent: (input: string, columns: string[]) => any;\n executeEnrichedPrompt: (input: string, contextDesc: string, contextConfig: any, caps: Capability[]) => any;\n answerQuestion: (input: string, config: any) => Observable<string>;\n generateJson: <T>(prompt: string, modelName?: string, schema?: any) => Observable<T | null>;\n}\n\n/**\n * Adapter that connects the AI Engine to a specific PraxisTable instance.\n * Implements two-step intent flow + heuristics for contextual suggestions.\n */\nexport class TableAiAdapter extends BaseAiAdapter<TableConfig> {\n componentName = 'Data Table';\n componentId = 'praxis-table';\n componentType = 'table';\n\n constructor(private table: PraxisTable, private aiService?: AiServiceLike) {\n super();\n }\n\n // -------- Core contract --------\n\n getCurrentConfig(): TableConfig {\n try {\n return structuredClone(this.table.config);\n } catch {\n return JSON.parse(JSON.stringify(this.table.config));\n }\n }\n\n getCapabilities(): Capability[] {\n return TABLE_AI_CAPABILITIES.capabilities as unknown as Capability[];\n }\n\n override getTaskPresets(): Record<string, string[]> {\n return TASK_PRESETS;\n }\n\n override getRuntimeState(): Record<string, any> {\n return {\n rowsTotal: this.table.dataSource.data.length,\n rowsVisible: this.table.paginator ? this.table.paginator.pageSize : this.table.dataSource.data.length,\n pageIndex: this.table.paginator ? this.table.paginator.pageIndex : 0,\n sort: this.table.sort ? { active: this.table.sort.active, direction: this.table.sort.direction } : null,\n filters: this.table.filterCriteria,\n selectionCount: this.table.selection.selected.length,\n isLoading: false // TODO: expose real loading flag\n };\n }\n\n override getSuggestionContext(): Record<string, any> {\n const config = this.getCurrentConfig();\n const behavior = config.behavior || {};\n const actions = config.actions || {};\n const availableFeatures: string[] = [];\n const missingCapabilities: string[] = [];\n\n if (!this.table.resourcePath) {\n availableFeatures.push('data-connection');\n }\n if (!config.meta?.idField) {\n availableFeatures.push('meta.idField');\n }\n if (!behavior.filtering?.enabled) {\n availableFeatures.push('behavior.filtering');\n missingCapabilities.push('filtering');\n }\n if (!behavior.sorting?.enabled) {\n availableFeatures.push('behavior.sorting');\n missingCapabilities.push('sorting');\n }\n if (!behavior.pagination?.enabled) {\n availableFeatures.push('behavior.pagination');\n missingCapabilities.push('pagination');\n }\n if (!behavior.selection?.enabled) {\n availableFeatures.push('behavior.selection');\n missingCapabilities.push('selection');\n }\n if (!config.toolbar?.visible) {\n availableFeatures.push('toolbar');\n missingCapabilities.push('toolbar');\n }\n if (!actions.row?.enabled) {\n availableFeatures.push('actions.row');\n missingCapabilities.push('actions');\n }\n if (!actions.bulk?.enabled) {\n availableFeatures.push('actions.bulk');\n missingCapabilities.push('actions');\n }\n if (!actions.context?.enabled) {\n availableFeatures.push('actions.context');\n missingCapabilities.push('actions');\n }\n if (!config.export?.enabled) {\n availableFeatures.push('export');\n missingCapabilities.push('export');\n }\n if (!config.localization) {\n availableFeatures.push('localization');\n missingCapabilities.push('localization');\n }\n if (!config.messages) {\n availableFeatures.push('messages');\n missingCapabilities.push('messages');\n }\n if (!config.performance) {\n availableFeatures.push('performance');\n missingCapabilities.push('performance');\n }\n if (!config.accessibility) {\n availableFeatures.push('accessibility');\n missingCapabilities.push('accessibility');\n }\n if (!config.rowConditionalStyles || config.rowConditionalStyles.length === 0) {\n availableFeatures.push('row-conditional-styles');\n missingCapabilities.push('conditional');\n }\n\n return {\n availableFeatures,\n missingCapabilities: Array.from(new Set(missingCapabilities)),\n inputs: {\n resourcePath: this.table.resourcePath || null,\n idField: this.table.getIdField?.() || null,\n horizontalScroll: (this.table as any).horizontalScroll || null,\n },\n };\n }\n\n getDataProfile(): Record<string, any> {\n const data = this.table.dataSource.data || [];\n return TableDataProfiler.profile(data, this.table.config);\n }\n\n getSchemaFields(): Record<string, any>[] {\n try {\n return this.table.getSchemaFieldsSnapshot();\n } catch {\n return [];\n }\n }\n\n createSnapshot(): any {\n return this.getCurrentConfig();\n }\n\n async restoreSnapshot(snapshot: any): Promise<void> {\n if (!snapshot) return;\n this.applyConfig(snapshot);\n }\n\n async applyPatch(patch: Partial<TableConfig>, intent?: string): Promise<PatchResult> {\n const current = this.getCurrentConfig();\n const normalizedPatch = this.normalizePatch(patch);\n const nextConfig = this.smartMergeTableConfig(current, normalizedPatch);\n this.applyConfig(nextConfig);\n return { success: true };\n }\n\n // -------- Context & suggestions --------\n\n /**\n * Human-friendly summary for prompt/context (columns + feature flags + data stats).\n */\n getContextDescription(contextOverride?: Partial<TableConfig>): string {\n // 1. Generate Data Profile\n const data = this.table.dataSource.data || [];\n const effectiveConfig = contextOverride ? deepMerge(this.table.config, contextOverride) : this.table.config;\n const profile = TableDataProfiler.profile(data, effectiveConfig);\n \n // 2. Format Column Stats\n const colDetails = Object.values(profile.columns).map(stats => {\n let desc = `${stats.field} (${stats.inferredType})`;\n if (stats.cardinality > 0 && stats.cardinality < 10) {\n desc += `, values=[${stats.topValues.join(', ')}]`;\n } else if (stats.inferredType === 'number' && stats.min !== undefined) {\n desc += `, range=[${stats.min}-${stats.max}]`;\n }\n \n // Check existing config to see if it has renderer/format\n const colCfg = effectiveConfig.columns?.find(c => c.field === stats.field);\n if (colCfg?.renderer) desc += ` [has-renderer: ${colCfg.renderer.type}]`;\n if (colCfg?.format) desc += ` [has-format]`;\n \n return desc;\n });\n\n // 3. Active Features\n const behaviorFlags: string[] = [];\n const b = this.table.config?.behavior;\n if (b?.filtering?.enabled) behaviorFlags.push('filtering');\n if (b?.sorting?.enabled) behaviorFlags.push('sorting');\n if (b?.pagination?.enabled) behaviorFlags.push('pagination');\n if (b?.selection?.enabled) behaviorFlags.push('selection');\n\n return `\nDataset: ${profile.rowCount} rows.\nActive Features: ${behaviorFlags.join(', ') || 'None'}.\nColumns Analysis:\n- ${colDetails.join('\\n- ')}\n `.trim();\n }\n\n /**\n * Dynamic suggestions based on current config/data.\n * Uses AI Service if available, otherwise falls back to heuristics.\n */\n override async getSuggestions(forceReload = false): Promise<AiSuggestion[]> {\n const storage = (this.table as any)?.asyncConfigStorage as AsyncConfigStorage | undefined;\n const key = this.suggestionsKey();\n \n // 1. Try cache\n if (storage && !forceReload) {\n try {\n const cached = await firstValueFrom(storage.loadConfig<AiSuggestion[]>(key));\n if (cached && Array.isArray(cached) && cached.length) {\n return cached;\n }\n } catch {}\n }\n\n let suggestions: AiSuggestion[] = [];\n\n // 2. Clear cache explicitly when forcing reload\n if (forceReload && storage && typeof storage.clearConfig === 'function') {\n try { await firstValueFrom(storage.clearConfig(key)); } catch {}\n }\n\n // 3. Try AI Generation (if service available)\n if (this.aiService) {\n try {\n const filtered = this.filterCompletedColumnsFromContext();\n suggestions = await this.generateAiSuggestions(filtered);\n } catch (err) {\n console.warn('[TableAiAdapter] AI suggestion failed, falling back to heuristics', err);\n }\n }\n\n // 4. Fallback to Heuristics if AI failed or not available\n if (!suggestions.length) {\n suggestions = this.getHeuristicSuggestions();\n }\n\n // 5. Save to cache\n const sorted = suggestions.sort((a, b) => (b.score || 0) - (a.score || 0));\n if (storage && sorted.length > 0) {\n try {\n await firstValueFrom(storage.saveConfig(key, sorted));\n } catch {}\n }\n return sorted;\n }\n\n private async generateAiSuggestions(contextOverride?: Partial<TableConfig>): Promise<AiSuggestion[]> {\n if (!this.aiService) return [];\n\n const prompt = `\n Analyze the following data table context and stats.\n Suggest 3 to 5 specific UX/UI improvements based on the data distribution and active features.\n \n Guidelines for Suggestions:\n - Focus on: Data formatting (dates/currency), Visual indicators (badges/icons for low-cardinality or mapped fields), Filter types, and missing critical features (pagination/export).\n - Prefer explicit metadata (column types, value mappings, data stats). Avoid guessing semantics from field names.\n - Intents MUST be actionable user commands, not just labels.\n \n Intent Examples:\n [GOOD]: \"Format column 'birthDate' as dd/MM/yyyy\", \"Use badges for column 'state' (3 distinct values)\", \"Enable pagination with 10 rows\".\n [BAD]: \"Improve formatting\", \"Add badges\", \"Pagination settings\".\n\n Context:\n ${this.getContextDescription(contextOverride)}\n \n Return a JSON array of suggestions with: id, label, description, icon, group, intent (the actionable command), and score (0-1).\n `;\n\n const result = await firstValueFrom(this.aiService.generateJson<{ suggestions: AiSuggestion[] } | null>(prompt, undefined, {\n type: 'OBJECT',\n properties: {\n suggestions: {\n type: 'ARRAY',\n items: {\n type: 'OBJECT',\n properties: {\n id: { type: 'STRING' },\n label: { type: 'STRING' },\n description: { type: 'STRING' },\n icon: { type: 'STRING' },\n group: { type: 'STRING' },\n intent: { type: 'STRING' },\n score: { type: 'NUMBER' }\n },\n required: ['id', 'label', 'intent']\n }\n }\n }\n }));\n\n return result?.suggestions || [];\n }\n\n private getHeuristicSuggestions(): AiSuggestion[] {\n const suggestions: AiSuggestion[] = [];\n const config = this.table.config;\n const data = this.table.dataSource.data || [];\n const columns = config.columns || [];\n const profile = TableDataProfiler.profile(data, config);\n const profileColumns = profile.columns || {};\n const capabilities = this.getCapabilities?.() || [];\n const categorySet = new Set(\n capabilities\n .map((cap) => String(cap?.category || '').toLowerCase())\n .filter((cat) => cat.length > 0),\n );\n const allowCategory = (categories: string[]): boolean => {\n if (!categorySet.size) return false;\n return categories.some((cat) => categorySet.has(cat));\n };\n\n // Pagination if many rows and disabled\n if (allowCategory(['pagination', 'behavior']) && !config.behavior?.pagination?.enabled && data.length > 20) {\n suggestions.push({\n id: 'enable-paging',\n label: 'Habilitar Paginação',\n description: `Tabela tem ${data.length} linhas. Paginação melhora a performance.`,\n icon: 'list_alt',\n group: 'Performance',\n intent: 'Habilitar paginação com 10 itens por página',\n score: 0.9\n });\n }\n\n // Modo compacto se muitas colunas visíveis\n const visibleCols = columns.filter((c) => c.visible !== false).length;\n if (allowCategory(['appearance']) && visibleCols > 8 && config.appearance?.density !== 'compact') {\n suggestions.push({\n id: 'compact-mode',\n label: 'Modo Compacto',\n description: 'Muitas colunas visíveis. Modo compacto exibe mais dados.',\n icon: 'compress',\n group: 'Visual',\n intent: 'Usar densidade compacta',\n score: 0.8\n });\n }\n\n // Badge/Icon para valores discretos\n const badgeCardinalityMax = 6;\n const badgeCol = columns.find((col) => {\n if (!col || col.renderer || !col.field) return false;\n const stats = profileColumns[col.field];\n const inferredType = stats?.inferredType;\n const cardinality = stats?.cardinality ?? -1;\n const isLongText = stats?.isLongText ?? false;\n const hasValueMapping = !!col.valueMapping && Object.keys(col.valueMapping).length > 0;\n const typeMatch = col.type === 'boolean'\n || col.type === 'string'\n || inferredType === 'boolean'\n || inferredType === 'string';\n const lowCardinality = cardinality > 0 && cardinality <= badgeCardinalityMax;\n return !isLongText && (hasValueMapping || (typeMatch && lowCardinality));\n });\n if (allowCategory(['renderer', 'columns']) && badgeCol) {\n suggestions.push({\n id: 'status-badge',\n label: `Badges para ${badgeCol.header || badgeCol.field}`,\n description: 'Destacar valores com badges ou ícones.',\n icon: 'verified',\n group: 'Visual',\n intent: `Usar renderer badge para a coluna ${badgeCol.field}`,\n score: 0.7\n });\n }\n\n // Datas sem format\n const dateCol = columns.find((c) => c.type === 'date' && !c.format);\n if (allowCategory(['format', 'columns']) && dateCol) {\n suggestions.push({\n id: 'date-format',\n label: `Formatar ${dateCol.header || dateCol.field}`,\n description: 'Padronizar exibição de data.',\n icon: 'calendar_today',\n group: 'Formatação',\n intent: `Formatar coluna ${dateCol.field} como dd/MM/yyyy`,\n score: 0.6\n });\n }\n \n return suggestions;\n }\n\n /**\n * Remove colunas já formatadas/tipadas para evitar sugestões redundantes (ex.: salário já em currency)\n */\n private filterCompletedColumnsFromContext(): Partial<TableConfig> {\n const cfg = this.getCurrentConfig();\n const filteredCols = (cfg.columns || []).filter((col) => {\n // Keep if missing type or format (needs suggestion)\n if (!col.type) return true;\n if (col.type === 'currency' && col.format) return false;\n if (col.type === 'date' && col.format) return false;\n return true;\n });\n return { ...cfg, columns: filteredCols };\n }\n\n // -------- Two-step flow helpers --------\n\n getFilteredCapabilities(category?: string): Capability[] {\n const all = TABLE_AI_CAPABILITIES.capabilities as unknown as Capability[];\n if (!category || category === 'unknown') return all;\n\n const categoryMap: Record<string, string[]> = {\n columns: ['columns', 'format', 'mapping', 'renderer', 'conditional'],\n appearance: ['appearance', 'conditional'],\n conditional: ['conditional', 'renderer', 'columns'], // Include 'columns' to allow field context\n behavior: ['behavior', 'pagination', 'sorting', 'filtering', 'selection', 'interaction'],\n actions: ['actions', 'toolbar', 'export']\n };\n\n const targets = categoryMap[category] || [category];\n return all.filter((c) => targets.includes(c.category as string));\n }\n\n private suggestionsKey(): string {\n const id = this.table.tableId || 'default';\n const rp = this.table.resourcePath || 'default';\n // bump version to invalidate old cached suggestions\n return `ai-suggestions:v3:${id}:${rp}`;\n }\n\n private getColumnNames(): string[] {\n return (this.table.config?.columns || [])\n .map((c) => c.field)\n .filter((f) => !!f);\n }\n\n private extractContextForIntent(intent: any): { desc: string; config: any } {\n const fullConfig = this.getCurrentConfig();\n\n if ((intent.category === 'columns' || intent.category === 'conditional') && intent.targetField) {\n const col = fullConfig.columns?.find((c) => c.field === intent.targetField);\n if (col) {\n return { desc: `Contexto focado na coluna '${intent.targetField}'.`, config: { columns: [col] } };\n }\n }\n\n if (intent.category === 'behavior' && fullConfig.behavior) {\n return { desc: 'Contexto focado em Comportamento (pagination/sorting/filtering/selection).', config: { behavior: fullConfig.behavior } };\n }\n\n if (intent.category === 'appearance' && fullConfig.appearance) {\n return { desc: 'Contexto focado em Aparência.', config: { appearance: fullConfig.appearance } };\n }\n\n if (intent.category === 'actions' && (fullConfig.actions || fullConfig.toolbar)) {\n return { desc: 'Contexto focado em Ações e Toolbar.', config: { actions: fullConfig.actions, toolbar: fullConfig.toolbar } };\n }\n\n return { desc: 'Contexto completo da tabela.', config: fullConfig };\n }\n\n /**\n * Two-step flow: classify intent, build focused context, call enriched prompt.\n * Returns the patch WITHOUT applying, so the UI can review.\n */\n async processUserIntent(\n userInput: string,\n aiService: AiServiceLike // Use interface type\n ): Promise<{ patch?: any; explanation?: string; type?: string; message?: string; options?: string[]; warnings?: string[] }> {\n const classification: any = await firstValueFrom(aiService.classifyIntent(userInput, this.getColumnNames()));\n\n if (classification?.needsClarification) {\n return {\n type: 'clarification',\n message: 'Preciso de mais detalhes para continuar.',\n options: classification.options || []\n };\n }\n\n // Handle QA intent\n if (classification?.intent === 'ask_about_config') {\n const answer = await firstValueFrom(aiService.answerQuestion(userInput, this.getCurrentConfig()));\n return {\n type: 'info',\n message: answer,\n explanation: answer // Map to explanation for UI compatibility if needed, or UI should handle 'info' type\n };\n }\n\n const context = this.extractContextForIntent(classification);\n const caps = this.getFilteredCapabilities((classification as any)?.category);\n\n const result: any = await firstValueFrom(\n aiService.executeEnrichedPrompt(userInput, context.desc, context.config, caps)\n );\n\n if (!result || !result.patch) {\n return { type: 'error', message: 'Nenhum patch gerado.' };\n }\n\n const { sanitized, warnings } = this.validateAndSanitizePatch(result.patch, caps);\n // Passar warnings para o retorno, para que o UI possa mostrá-los\n // Se o patch estiver vazio após sanitização, informar ao usuário\n\n // Se sobrou algo válido\n if (Object.keys(sanitized).length > 0) {\n const explanation = result.explanation + (warnings.length ? ` (Ajustado: ${warnings.length} itens inválidos removidos)` : '');\n return { patch: sanitized, explanation, warnings };\n } else {\n return { type: 'error', message: 'O patch gerado não continha configurações válidas permitidas.', warnings };\n }\n }\n\n private validateAndSanitizePatch(patch: any, allowedCaps: Capability[]): { sanitized: any; warnings: string[] } {\n const allowedPaths = new Set(allowedCaps.map(c => c.path));\n const warnings: string[] = [];\n // Some schema-driven nodes are intentionally open objects and must be preserved as-is.\n const passthroughObjectPaths = new Set<string>([\n 'behavior.expansion.detail.source.inlineSchema',\n 'behavior.expansion.detail.source.resourcePath.paramsMap',\n ]);\n\n const recurse = (obj: any, currentPath: string): any => {\n if (typeof obj !== 'object' || obj === null) return obj;\n\n if (Array.isArray(obj)) {\n // Se estamos em um array conhecido (ex: columns), o path vira columns[]\n // Se não, assume que é valor final (ex: options: [1,2])\n const isRootArray = currentPath && (allowedPaths.has(currentPath + '[]') || Array.from(allowedPaths).some(p => p.startsWith(currentPath + '[].')));\n \n if (!isRootArray) return obj; // É um valor array (ex: tags), retorna direto\n\n return obj.map(item => recurse(item, currentPath + '[]'));\n }\n\n const cleanObj: any = {};\n for (const key of Object.keys(obj)) {\n const newPath = currentPath ? `${currentPath}.${key}` : key;\n // Verifica se este path exato é permitido OU se é um prefixo de algo permitido\n // Ex: 'columns' é permitido se 'columns[].width' existe\n // Special case: 'columns[].field' is identity, always allow it if we are inside columns[]\n const isIdentityField = currentPath === 'columns[]' && key === 'field';\n const exactMatch = allowedPaths.has(newPath) || isIdentityField;\n const prefixMatch = Array.from(allowedPaths).some(p => p.startsWith(newPath + '.') || p.startsWith(newPath + '['));\n\n if (exactMatch || prefixMatch) {\n if (\n exactMatch\n && passthroughObjectPaths.has(newPath)\n && typeof obj[key] === 'object'\n && obj[key] !== null\n ) {\n cleanObj[key] = obj[key];\n continue;\n }\n const val = recurse(obj[key], newPath);\n if (newPath === 'columns[].computed.expression') {\n if (typeof val !== 'string') {\n warnings.push(`Computed expression inválida: ${newPath} (não é string)`);\n continue;\n }\n const trimmed = val.trim();\n if (!trimmed) {\n warnings.push(`Computed expression vazia: ${newPath}`);\n continue;\n }\n if (trimmed.length > 200) {\n warnings.push(`Computed expression muito longa: ${newPath}`);\n continue;\n }\n cleanObj[key] = trimmed;\n continue;\n }\n // Se for objeto vazio após limpeza, não inclui (salvo se for intenção explicita de limpar config, mas patch geralmente é aditivo)\n if (typeof val === 'object' && val !== null && !Array.isArray(val) && Object.keys(val).length === 0) {\n // ignora\n } else {\n cleanObj[key] = val;\n }\n } else {\n warnings.push(`Campo ignorado: ${newPath}`);\n }\n }\n return cleanObj;\n };\n\n const sanitized = recurse(patch, '');\n return { sanitized, warnings };\n }\n\n \n\n // -------- Internal helpers --------\n\n /**\n * Specialized merge for TableConfig that handles Array reconciliation safely.\n * - 'columns': merges by 'field' ID.\n */\n private smartMergeTableConfig(base: TableConfig, patch: Partial<TableConfig>): TableConfig {\n const result = deepMerge(base, patch);\n\n if (patch.columns && Array.isArray(patch.columns)) {\n const originalCols = base.columns || [];\n const patchCols = patch.columns;\n\n const mergedCols = originalCols.map((origCol) => {\n const match = patchCols.find((p) => p.field === origCol.field);\n return match ? deepMerge(origCol, match) : origCol;\n });\n\n patchCols.forEach((pCol) => {\n if (!originalCols.find((o) => o.field === pCol.field)) {\n mergedCols.push(pCol as any);\n }\n });\n\n result.columns = mergedCols;\n }\n\n return result;\n }\n\n private applyConfig(config: TableConfig): void {\n const prev = this.table.config;\n this.table.config = config;\n\n this.table.ngOnChanges({\n config: {\n previousValue: prev,\n currentValue: config,\n firstChange: false,\n isFirstChange: () => false\n }\n });\n }\n\n /**\n * If a patch adds only a currency format, ensure the column type is set to 'currency'\n * so the formatter runs. Avoid overriding an explicit non-currency type.\n */\n private normalizePatch(patch: Partial<TableConfig>): Partial<TableConfig> {\n if (!patch.columns || !Array.isArray(patch.columns)) return patch;\n const cols = patch.columns.map((col) => this.normalizeColumn(col));\n return { ...patch, columns: cols };\n }\n\n private looksLikeCurrencyFormat(format: string | undefined | null): boolean {\n if (!format) return false;\n const fmt = format.trim();\n return /^[A-Z]{3}(\\|.*)?$/.test(fmt);\n }\n\n private looksLikeDateFormat(format: string | undefined | null): boolean {\n if (!format) return false;\n const fmt = format.trim();\n // Heuristics: contains date tokens like d/M/y or common date separators\n return /(d|M|y){2,}/i.test(fmt) || fmt.includes('/') || fmt.includes('-');\n }\n\n private isIconRendererHint(renderer: any): boolean {\n if (!renderer) return false;\n if (renderer.type && renderer.type !== 'icon') return false;\n const icon = renderer.icon || renderer.name || renderer.iconName;\n return typeof icon === 'string' || typeof renderer.color === 'string' || typeof renderer.size === 'number';\n }\n private normalizeColumn(col: any): any {\n if (!col) return col;\n const next = { ...col };\n\n // Normalize formats\n if (next.format && !next.type) {\n if (this.looksLikeCurrencyFormat(next.format)) {\n next.type = 'currency' as any;\n } else if (this.looksLikeDateFormat(next.format)) {\n next.type = 'date' as any;\n }\n }\n\n // Normalize renderer structure (icon shorthand)\n if (next.renderer) {\n next.renderer = this.normalizeRenderer(next.renderer);\n }\n\n // Normalize conditional renderers\n if (Array.isArray(next.conditionalRenderers)) {\n next.conditionalRenderers = next.conditionalRenderers.map((r: any) => {\n if (!r) return r;\n const out = { ...r };\n if (out.renderer) out.renderer = this.normalizeRenderer(out.renderer);\n return out;\n });\n }\n\n return next;\n }\n\n private normalizeRenderer(renderer: any): any {\n if (!renderer) return renderer;\n const out = { ...renderer };\n if (out.type === 'icon') {\n // Move icon shorthand to renderer.icon.*\n const iconObj: any = { ...(out.icon || {}) };\n if (renderer.icon && typeof renderer.icon === 'string') iconObj.name = renderer.icon;\n if (renderer.icon?.name) iconObj.name = renderer.icon.name;\n if (renderer.icon?.color) iconObj.color = renderer.icon.color;\n if (renderer.icon?.size) iconObj.size = renderer.icon.size;\n if (renderer.color && !iconObj.color) iconObj.color = renderer.color;\n if (renderer.size && !iconObj.size) iconObj.size = renderer.size;\n out.icon = iconObj;\n delete out.color;\n delete out.size;\n }\n\n // Badge shorthand (allow badge.color/variant/icon/text via renderer.badge or root)\n if (out.type === 'badge') {\n const badge = { ...(out.badge || {}) };\n if (renderer.color && !badge.color) badge.color = renderer.color;\n if (renderer.variant && !badge.variant) badge.variant = renderer.variant;\n if (renderer.text && !badge.text) badge.text = renderer.text;\n if (renderer.icon && !badge.icon && typeof renderer.icon === 'string') badge.icon = renderer.icon;\n out.badge = badge;\n delete out.color;\n delete out.variant;\n delete out.text;\n if (typeof out.icon === 'string') delete out.icon;\n }\n\n // Chip shorthand\n if (out.type === 'chip') {\n const chip = { ...(out.chip || {}) };\n if (renderer.color && !chip.color) chip.color = renderer.color;\n if (renderer.variant && !chip.variant) chip.variant = renderer.variant;\n if (renderer.text && !chip.text) chip.text = renderer.text;\n if (renderer.icon && !chip.icon && typeof renderer.icon === 'string') chip.icon = renderer.icon;\n out.chip = chip;\n delete out.color;\n delete out.variant;\n delete out.text;\n if (typeof out.icon === 'string') delete out.icon;\n }\n\n // Link shorthand\n if (out.type === 'link' && typeof renderer.href === 'string') {\n out.link = { ...(out.link || {}), href: renderer.href };\n delete out.href;\n }\n\n return out;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"praxisui-table-table-ai.adapter-C5rjLb8E.mjs","sources":["../../../projects/praxis-table/src/lib/ai/table-data-profiler.ts","../../../projects/praxis-table/src/lib/ai/table-ai.adapter.ts"],"sourcesContent":["import { TableConfig } from '@praxisui/core';\n\nexport interface ColumnStats {\n field: string;\n header?: string;\n inferredType: 'string' | 'number' | 'boolean' | 'date' | 'mixed' | 'empty';\n cardinality: number; // Quantidade de valores únicos\n hasNulls: boolean;\n // Amostra de valores frequentes para contexto (limitado a 5)\n topValues: any[];\n // Para numbers\n min?: number;\n max?: number;\n // Para dates\n dateRange?: { start: string; end: string };\n // Flags úteis para sugestão\n isUrl?: boolean;\n isEmail?: boolean;\n isLongText?: boolean; // > 50 chars\n}\n\nexport interface DataProfile {\n rowCount: number;\n columns: Record<string, ColumnStats>;\n generatedAt: number;\n}\n\n/**\n * Analisa uma amostra de dados da tabela para gerar estatísticas\n * que ajudem a IA a sugerir renderers e formatos adequados.\n */\nexport class TableDataProfiler {\n private static SAMPLE_LIMIT = 3; // Analisa no máximo 3 linhas para performance\n private static VALUE_TRUNCATE = 50; // Trunca strings longas no contexto\n\n static profile(\n data: any[],\n config: TableConfig,\n options?: { sampleLimit?: number; rowCountOverride?: number }\n ): DataProfile {\n const sampleLimit = options?.sampleLimit ?? this.SAMPLE_LIMIT;\n const rowCount = options?.rowCountOverride ?? data.length;\n const profile: DataProfile = {\n rowCount,\n columns: {},\n generatedAt: Date.now()\n };\n\n if (!data || data.length === 0 || !config.columns) {\n return profile;\n }\n\n // 1. Selecionar amostra (início, meio e fim se possível, ou apenas slice)\n // Para simplicidade e estabilidade, pegamos os primeiros N itens.\n const sample = data.slice(0, sampleLimit);\n\n // 2. Iterar colunas configuradas\n for (const col of config.columns) {\n if (!col || !col.field) continue;\n const values = sample.map(row => this.getValue(row, col.field)).filter(v => v !== null && v !== undefined && v !== '');\n \n const stats: ColumnStats = {\n field: col.field,\n header: col.header,\n inferredType: 'empty',\n cardinality: 0,\n hasNulls: values.length < sample.length,\n topValues: []\n };\n\n if (values.length > 0) {\n stats.inferredType = this.inferType(values);\n stats.cardinality = new Set(values.map(v => String(v))).size;\n \n // Coletar Top Values (frequência)\n const freqMap = new Map<string, number>();\n values.forEach(v => {\n const k = String(v);\n freqMap.set(k, (freqMap.get(k) || 0) + 1);\n });\n \n stats.topValues = Array.from(freqMap.entries())\n .sort((a, b) => b[1] - a[1]) // Sort by count desc\n .slice(0, 5)\n .map(([val]) => this.sanitizeValue(val, stats.inferredType));\n\n // Stats específicas por tipo\n if (stats.inferredType === 'number') {\n const nums = values.map(v => Number(v)).filter(n => !isNaN(n));\n if (nums.length) {\n stats.min = Math.min(...nums);\n stats.max = Math.max(...nums);\n }\n } else if (stats.inferredType === 'date') {\n const dates = values.map(v => new Date(v).getTime()).filter(t => !isNaN(t));\n if (dates.length) {\n stats.dateRange = {\n start: new Date(Math.min(...dates)).toISOString(),\n end: new Date(Math.max(...dates)).toISOString()\n };\n }\n } else if (stats.inferredType === 'string') {\n const strVal = String(values[0]);\n stats.isUrl = strVal.startsWith('http');\n stats.isEmail = strVal.includes('@') && strVal.includes('.');\n stats.isLongText = values.some(v => String(v).length > 50);\n }\n }\n\n profile.columns[col.field] = stats;\n }\n\n return profile;\n }\n\n private static getValue(row: any, path: string): any {\n if (!path || typeof path !== 'string') return undefined;\n return path.split('.').reduce((obj, key) => obj?.[key], row);\n }\n\n private static inferType(values: any[]): ColumnStats['inferredType'] {\n const first = values[0];\n if (typeof first === 'number') return 'number';\n if (typeof first === 'boolean') return 'boolean';\n if (first instanceof Date) return 'date';\n \n // Check string formats\n const str = String(first);\n if (!isNaN(Number(str)) && str.trim() !== '') return 'number';\n if (!isNaN(Date.parse(str)) && str.length > 5) return 'date'; // length check avoids short strings being parsed as dates\n \n return 'string';\n }\n\n private static sanitizeValue(val: string, type: string): any {\n if (type === 'string' && val.length > this.VALUE_TRUNCATE) {\n return val.substring(0, this.VALUE_TRUNCATE) + '...';\n }\n return val;\n }\n}\n","import { firstValueFrom, Observable } from 'rxjs';\nimport { BaseAiAdapter, PatchResult, AiSuggestion, Capability } from '@praxisui/ai';\nimport { TableConfig, deepMerge, type AsyncConfigStorage } from '@praxisui/core';\nimport { PraxisTable } from '../praxis-table';\nimport { TABLE_AI_CAPABILITIES, TASK_PRESETS } from './table-ai-capabilities';\nimport { TableDataProfiler } from './table-data-profiler';\n\nexport interface AiServiceLike {\n classifyIntent: (input: string, columns: string[]) => any;\n executeEnrichedPrompt: (input: string, contextDesc: string, contextConfig: any, caps: Capability[]) => any;\n answerQuestion: (input: string, config: any) => Observable<string>;\n generateJson: <T>(prompt: string, modelName?: string, schema?: any) => Observable<T | null>;\n}\n\n/**\n * Adapter that connects the AI Engine to a specific PraxisTable instance.\n * Implements two-step intent flow + heuristics for contextual suggestions.\n */\nexport class TableAiAdapter extends BaseAiAdapter<TableConfig> {\n componentName = 'Data Table';\n componentId = 'praxis-table';\n componentType = 'table';\n\n constructor(private table: PraxisTable, private aiService?: AiServiceLike) {\n super();\n }\n\n // -------- Core contract --------\n\n getCurrentConfig(): TableConfig {\n try {\n return structuredClone(this.table.config);\n } catch {\n return JSON.parse(JSON.stringify(this.table.config));\n }\n }\n\n getCapabilities(): Capability[] {\n return TABLE_AI_CAPABILITIES.capabilities as unknown as Capability[];\n }\n\n override getTaskPresets(): Record<string, string[]> {\n return TASK_PRESETS;\n }\n\n override getRuntimeState(): Record<string, any> {\n return {\n rowsTotal: this.table.dataSource.data.length,\n rowsVisible: this.table.paginator ? this.table.paginator.pageSize : this.table.dataSource.data.length,\n pageIndex: this.table.paginator ? this.table.paginator.pageIndex : 0,\n sort: this.table.sort ? { active: this.table.sort.active, direction: this.table.sort.direction } : null,\n filters: this.table.filterCriteria,\n selectionCount: this.table.selection.selected.length,\n isLoading: false // TODO: expose real loading flag\n };\n }\n\n override getSuggestionContext(): Record<string, any> {\n const config = this.getCurrentConfig();\n const behavior = config.behavior || {};\n const actions = config.actions || {};\n const availableFeatures: string[] = [];\n const missingCapabilities: string[] = [];\n\n if (!this.table.resourcePath) {\n availableFeatures.push('data-connection');\n }\n if (!this.table.idField) {\n availableFeatures.push('bindings.idField');\n }\n if (!behavior.filtering?.enabled) {\n availableFeatures.push('behavior.filtering');\n missingCapabilities.push('filtering');\n }\n if (!behavior.sorting?.enabled) {\n availableFeatures.push('behavior.sorting');\n missingCapabilities.push('sorting');\n }\n if (!behavior.pagination?.enabled) {\n availableFeatures.push('behavior.pagination');\n missingCapabilities.push('pagination');\n }\n if (!behavior.selection?.enabled) {\n availableFeatures.push('behavior.selection');\n missingCapabilities.push('selection');\n }\n if (!config.toolbar?.visible) {\n availableFeatures.push('toolbar');\n missingCapabilities.push('toolbar');\n }\n if (!actions.row?.enabled) {\n availableFeatures.push('actions.row');\n missingCapabilities.push('actions');\n }\n if (!actions.bulk?.enabled) {\n availableFeatures.push('actions.bulk');\n missingCapabilities.push('actions');\n }\n if (!actions.context?.enabled) {\n availableFeatures.push('actions.context');\n missingCapabilities.push('actions');\n }\n if (!config.export?.enabled) {\n availableFeatures.push('export');\n missingCapabilities.push('export');\n }\n if (!config.localization) {\n availableFeatures.push('localization');\n missingCapabilities.push('localization');\n }\n if (!config.messages) {\n availableFeatures.push('messages');\n missingCapabilities.push('messages');\n }\n if (!config.performance) {\n availableFeatures.push('performance');\n missingCapabilities.push('performance');\n }\n if (!config.accessibility) {\n availableFeatures.push('accessibility');\n missingCapabilities.push('accessibility');\n }\n if (!config.rowConditionalStyles || config.rowConditionalStyles.length === 0) {\n availableFeatures.push('row-conditional-styles');\n missingCapabilities.push('conditional');\n }\n\n return {\n authoringContract: {\n kind: 'praxis.table.editor',\n usesBindings: true,\n bindingsPaths: ['bindings.resourcePath', 'bindings.idField', 'bindings.horizontalScroll'],\n runtimeConfigProjection: 'TableConfig',\n },\n availableFeatures,\n missingCapabilities: Array.from(new Set(missingCapabilities)),\n inputs: {\n resourcePath: this.table.resourcePath || null,\n idField: this.table.getIdField?.() || null,\n horizontalScroll: (this.table as any).horizontalScroll || null,\n },\n };\n }\n\n getDataProfile(): Record<string, any> {\n const data = this.table.dataSource.data || [];\n return TableDataProfiler.profile(data, this.table.config);\n }\n\n getSchemaFields(): Record<string, any>[] {\n try {\n return this.table.getSchemaFieldsSnapshot();\n } catch {\n return [];\n }\n }\n\n createSnapshot(): any {\n return this.getCurrentConfig();\n }\n\n async restoreSnapshot(snapshot: any): Promise<void> {\n if (!snapshot) return;\n this.applyConfig(snapshot);\n }\n\n async applyPatch(patch: Partial<TableConfig>, intent?: string): Promise<PatchResult> {\n const current = this.getCurrentConfig();\n const normalizedPatch = this.normalizePatch(patch);\n const nextConfig = this.smartMergeTableConfig(current, normalizedPatch);\n this.applyConfig(nextConfig);\n return { success: true };\n }\n\n // -------- Context & suggestions --------\n\n /**\n * Human-friendly summary for prompt/context (columns + feature flags + data stats).\n */\n getContextDescription(contextOverride?: Partial<TableConfig>): string {\n // 1. Generate Data Profile\n const data = this.table.dataSource.data || [];\n const effectiveConfig = contextOverride ? deepMerge(this.table.config, contextOverride) : this.table.config;\n const profile = TableDataProfiler.profile(data, effectiveConfig);\n \n // 2. Format Column Stats\n const colDetails = Object.values(profile.columns).map(stats => {\n let desc = `${stats.field} (${stats.inferredType})`;\n if (stats.cardinality > 0 && stats.cardinality < 10) {\n desc += `, values=[${stats.topValues.join(', ')}]`;\n } else if (stats.inferredType === 'number' && stats.min !== undefined) {\n desc += `, range=[${stats.min}-${stats.max}]`;\n }\n \n // Check existing config to see if it has renderer/format\n const colCfg = effectiveConfig.columns?.find(c => c.field === stats.field);\n if (colCfg?.renderer) desc += ` [has-renderer: ${colCfg.renderer.type}]`;\n if (colCfg?.format) desc += ` [has-format]`;\n \n return desc;\n });\n\n // 3. Active Features\n const behaviorFlags: string[] = [];\n const b = this.table.config?.behavior;\n if (b?.filtering?.enabled) behaviorFlags.push('filtering');\n if (b?.sorting?.enabled) behaviorFlags.push('sorting');\n if (b?.pagination?.enabled) behaviorFlags.push('pagination');\n if (b?.selection?.enabled) behaviorFlags.push('selection');\n\n return `\nDataset: ${profile.rowCount} rows.\nActive Features: ${behaviorFlags.join(', ') || 'None'}.\nColumns Analysis:\n- ${colDetails.join('\\n- ')}\n `.trim();\n }\n\n /**\n * Dynamic suggestions based on current config/data.\n * Uses AI Service if available, otherwise falls back to heuristics.\n */\n override async getSuggestions(forceReload = false): Promise<AiSuggestion[]> {\n const storage = (this.table as any)?.asyncConfigStorage as AsyncConfigStorage | undefined;\n const key = this.suggestionsKey();\n \n // 1. Try cache\n if (storage && !forceReload) {\n try {\n const cached = await firstValueFrom(storage.loadConfig<AiSuggestion[]>(key));\n if (cached && Array.isArray(cached) && cached.length) {\n return cached;\n }\n } catch {}\n }\n\n let suggestions: AiSuggestion[] = [];\n\n // 2. Clear cache explicitly when forcing reload\n if (forceReload && storage && typeof storage.clearConfig === 'function') {\n try { await firstValueFrom(storage.clearConfig(key)); } catch {}\n }\n\n // 3. Try AI Generation (if service available)\n if (this.aiService) {\n try {\n const filtered = this.filterCompletedColumnsFromContext();\n suggestions = await this.generateAiSuggestions(filtered);\n } catch (err) {\n console.warn('[TableAiAdapter] AI suggestion failed, falling back to heuristics', err);\n }\n }\n\n // 4. Fallback to Heuristics if AI failed or not available\n if (!suggestions.length) {\n suggestions = this.getHeuristicSuggestions();\n }\n\n // 5. Save to cache\n const sorted = suggestions.sort((a, b) => (b.score || 0) - (a.score || 0));\n if (storage && sorted.length > 0) {\n try {\n await firstValueFrom(storage.saveConfig(key, sorted));\n } catch {}\n }\n return sorted;\n }\n\n private async generateAiSuggestions(contextOverride?: Partial<TableConfig>): Promise<AiSuggestion[]> {\n if (!this.aiService) return [];\n\n const prompt = `\n Analyze the following data table context and stats.\n Suggest 3 to 5 specific UX/UI improvements based on the data distribution and active features.\n \n Guidelines for Suggestions:\n - Focus on: Data formatting (dates/currency), Visual indicators (badges/icons for low-cardinality or mapped fields), Filter types, and missing critical features (pagination/export).\n - Prefer explicit metadata (column types, value mappings, data stats). Avoid guessing semantics from field names.\n - Intents MUST be actionable user commands, not just labels.\n \n Intent Examples:\n [GOOD]: \"Format column 'birthDate' as dd/MM/yyyy\", \"Use badges for column 'state' (3 distinct values)\", \"Enable pagination with 10 rows\".\n [BAD]: \"Improve formatting\", \"Add badges\", \"Pagination settings\".\n\n Context:\n ${this.getContextDescription(contextOverride)}\n \n Return a JSON array of suggestions with: id, label, description, icon, group, intent (the actionable command), and score (0-1).\n `;\n\n const result = await firstValueFrom(this.aiService.generateJson<{ suggestions: AiSuggestion[] } | null>(prompt, undefined, {\n type: 'OBJECT',\n properties: {\n suggestions: {\n type: 'ARRAY',\n items: {\n type: 'OBJECT',\n properties: {\n id: { type: 'STRING' },\n label: { type: 'STRING' },\n description: { type: 'STRING' },\n icon: { type: 'STRING' },\n group: { type: 'STRING' },\n intent: { type: 'STRING' },\n score: { type: 'NUMBER' }\n },\n required: ['id', 'label', 'intent']\n }\n }\n }\n }));\n\n return result?.suggestions || [];\n }\n\n private getHeuristicSuggestions(): AiSuggestion[] {\n const suggestions: AiSuggestion[] = [];\n const config = this.table.config;\n const data = this.table.dataSource.data || [];\n const columns = config.columns || [];\n const profile = TableDataProfiler.profile(data, config);\n const profileColumns = profile.columns || {};\n const capabilities = this.getCapabilities?.() || [];\n const categorySet = new Set(\n capabilities\n .map((cap) => String(cap?.category || '').toLowerCase())\n .filter((cat) => cat.length > 0),\n );\n const allowCategory = (categories: string[]): boolean => {\n if (!categorySet.size) return false;\n return categories.some((cat) => categorySet.has(cat));\n };\n\n // Pagination if many rows and disabled\n if (allowCategory(['pagination', 'behavior']) && !config.behavior?.pagination?.enabled && data.length > 20) {\n suggestions.push({\n id: 'enable-paging',\n label: 'Habilitar Paginação',\n description: `Tabela tem ${data.length} linhas. Paginação melhora a performance.`,\n icon: 'list_alt',\n group: 'Performance',\n intent: 'Habilitar paginação com 10 itens por página',\n score: 0.9\n });\n }\n\n // Modo compacto se muitas colunas visíveis\n const visibleCols = columns.filter((c) => c.visible !== false).length;\n if (allowCategory(['appearance']) && visibleCols > 8 && config.appearance?.density !== 'compact') {\n suggestions.push({\n id: 'compact-mode',\n label: 'Modo Compacto',\n description: 'Muitas colunas visíveis. Modo compacto exibe mais dados.',\n icon: 'compress',\n group: 'Visual',\n intent: 'Usar densidade compacta',\n score: 0.8\n });\n }\n\n // Badge/Icon para valores discretos\n const badgeCardinalityMax = 6;\n const badgeCol = columns.find((col) => {\n if (!col || col.renderer || !col.field) return false;\n const stats = profileColumns[col.field];\n const inferredType = stats?.inferredType;\n const cardinality = stats?.cardinality ?? -1;\n const isLongText = stats?.isLongText ?? false;\n const hasValueMapping = !!col.valueMapping && Object.keys(col.valueMapping).length > 0;\n const typeMatch = col.type === 'boolean'\n || col.type === 'string'\n || inferredType === 'boolean'\n || inferredType === 'string';\n const lowCardinality = cardinality > 0 && cardinality <= badgeCardinalityMax;\n return !isLongText && (hasValueMapping || (typeMatch && lowCardinality));\n });\n if (allowCategory(['renderer', 'columns']) && badgeCol) {\n suggestions.push({\n id: 'status-badge',\n label: `Badges para ${badgeCol.header || badgeCol.field}`,\n description: 'Destacar valores com badges ou ícones.',\n icon: 'verified',\n group: 'Visual',\n intent: `Usar renderer badge para a coluna ${badgeCol.field}`,\n score: 0.7\n });\n }\n\n // Datas sem format\n const dateCol = columns.find((c) => c.type === 'date' && !c.format);\n if (allowCategory(['format', 'columns']) && dateCol) {\n suggestions.push({\n id: 'date-format',\n label: `Formatar ${dateCol.header || dateCol.field}`,\n description: 'Padronizar exibição de data.',\n icon: 'calendar_today',\n group: 'Formatação',\n intent: `Formatar coluna ${dateCol.field} como dd/MM/yyyy`,\n score: 0.6\n });\n }\n \n return suggestions;\n }\n\n /**\n * Remove colunas já formatadas/tipadas para evitar sugestões redundantes (ex.: salário já em currency)\n */\n private filterCompletedColumnsFromContext(): Partial<TableConfig> {\n const cfg = this.getCurrentConfig();\n const filteredCols = (cfg.columns || []).filter((col) => {\n // Keep if missing type or format (needs suggestion)\n if (!col.type) return true;\n if (col.type === 'currency' && col.format) return false;\n if (col.type === 'date' && col.format) return false;\n return true;\n });\n return { ...cfg, columns: filteredCols };\n }\n\n // -------- Two-step flow helpers --------\n\n getFilteredCapabilities(category?: string): Capability[] {\n const all = TABLE_AI_CAPABILITIES.capabilities as unknown as Capability[];\n if (!category || category === 'unknown') return all;\n\n const categoryMap: Record<string, string[]> = {\n columns: ['columns', 'format', 'mapping', 'renderer', 'conditional'],\n appearance: ['appearance', 'conditional'],\n conditional: ['conditional', 'renderer', 'columns'], // Include 'columns' to allow field context\n behavior: ['behavior', 'pagination', 'sorting', 'filtering', 'selection', 'interaction'],\n actions: ['actions', 'toolbar', 'export']\n };\n\n const targets = categoryMap[category] || [category];\n return all.filter((c) => targets.includes(c.category as string));\n }\n\n private suggestionsKey(): string {\n const id = this.table.tableId || 'default';\n const rp = this.table.resourcePath || 'default';\n // bump version to invalidate old cached suggestions\n return `ai-suggestions:v3:${id}:${rp}`;\n }\n\n private getColumnNames(): string[] {\n return (this.table.config?.columns || [])\n .map((c) => c.field)\n .filter((f) => !!f);\n }\n\n private extractContextForIntent(intent: any): { desc: string; config: any } {\n const fullConfig = this.getCurrentConfig();\n\n if ((intent.category === 'columns' || intent.category === 'conditional') && intent.targetField) {\n const col = fullConfig.columns?.find((c) => c.field === intent.targetField);\n if (col) {\n return { desc: `Contexto focado na coluna '${intent.targetField}'.`, config: { columns: [col] } };\n }\n }\n\n if (intent.category === 'behavior' && fullConfig.behavior) {\n return { desc: 'Contexto focado em Comportamento (pagination/sorting/filtering/selection).', config: { behavior: fullConfig.behavior } };\n }\n\n if (intent.category === 'appearance' && fullConfig.appearance) {\n return { desc: 'Contexto focado em Aparência.', config: { appearance: fullConfig.appearance } };\n }\n\n if (intent.category === 'actions' && (fullConfig.actions || fullConfig.toolbar)) {\n return { desc: 'Contexto focado em Ações e Toolbar.', config: { actions: fullConfig.actions, toolbar: fullConfig.toolbar } };\n }\n\n return { desc: 'Contexto completo da tabela.', config: fullConfig };\n }\n\n /**\n * Two-step flow: classify intent, build focused context, call enriched prompt.\n * Returns the patch WITHOUT applying, so the UI can review.\n */\n async processUserIntent(\n userInput: string,\n aiService: AiServiceLike // Use interface type\n ): Promise<{ patch?: any; explanation?: string; type?: string; message?: string; options?: string[]; warnings?: string[] }> {\n const classification: any = await firstValueFrom(aiService.classifyIntent(userInput, this.getColumnNames()));\n\n if (classification?.needsClarification) {\n return {\n type: 'clarification',\n message: 'Preciso de mais detalhes para continuar.',\n options: classification.options || []\n };\n }\n\n // Handle QA intent\n if (classification?.intent === 'ask_about_config') {\n const answer = await firstValueFrom(aiService.answerQuestion(userInput, this.getCurrentConfig()));\n return {\n type: 'info',\n message: answer,\n explanation: answer // Map to explanation for UI compatibility if needed, or UI should handle 'info' type\n };\n }\n\n const context = this.extractContextForIntent(classification);\n const caps = this.getFilteredCapabilities((classification as any)?.category);\n\n const result: any = await firstValueFrom(\n aiService.executeEnrichedPrompt(userInput, context.desc, context.config, caps)\n );\n\n if (!result || !result.patch) {\n return { type: 'error', message: 'Nenhum patch gerado.' };\n }\n\n const { sanitized, warnings } = this.validateAndSanitizePatch(result.patch, caps);\n // Passar warnings para o retorno, para que o UI possa mostrá-los\n // Se o patch estiver vazio após sanitização, informar ao usuário\n\n // Se sobrou algo válido\n if (Object.keys(sanitized).length > 0) {\n const explanation = result.explanation + (warnings.length ? ` (Ajustado: ${warnings.length} itens inválidos removidos)` : '');\n return { patch: sanitized, explanation, warnings };\n } else {\n return { type: 'error', message: 'O patch gerado não continha configurações válidas permitidas.', warnings };\n }\n }\n\n private validateAndSanitizePatch(patch: any, allowedCaps: Capability[]): { sanitized: any; warnings: string[] } {\n const allowedPaths = new Set(allowedCaps.map(c => c.path));\n const warnings: string[] = [];\n // Some schema-driven nodes are intentionally open objects and must be preserved as-is.\n const passthroughObjectPaths = new Set<string>([\n 'behavior.expansion.detail.source.inlineSchema',\n 'behavior.expansion.detail.source.resourcePath.paramsMap',\n ]);\n\n const recurse = (obj: any, currentPath: string): any => {\n if (typeof obj !== 'object' || obj === null) return obj;\n\n if (Array.isArray(obj)) {\n // Se estamos em um array conhecido (ex: columns), o path vira columns[]\n // Se não, assume que é valor final (ex: options: [1,2])\n const isRootArray = currentPath && (allowedPaths.has(currentPath + '[]') || Array.from(allowedPaths).some(p => p.startsWith(currentPath + '[].')));\n \n if (!isRootArray) return obj; // É um valor array (ex: tags), retorna direto\n\n return obj.map(item => recurse(item, currentPath + '[]'));\n }\n\n const cleanObj: any = {};\n for (const key of Object.keys(obj)) {\n const newPath = currentPath ? `${currentPath}.${key}` : key;\n // Verifica se este path exato é permitido OU se é um prefixo de algo permitido\n // Ex: 'columns' é permitido se 'columns[].width' existe\n // Special case: 'columns[].field' is identity, always allow it if we are inside columns[]\n const isIdentityField = currentPath === 'columns[]' && key === 'field';\n const exactMatch = allowedPaths.has(newPath) || isIdentityField;\n const prefixMatch = Array.from(allowedPaths).some(p => p.startsWith(newPath + '.') || p.startsWith(newPath + '['));\n\n if (exactMatch || prefixMatch) {\n if (\n exactMatch\n && passthroughObjectPaths.has(newPath)\n && typeof obj[key] === 'object'\n && obj[key] !== null\n ) {\n cleanObj[key] = obj[key];\n continue;\n }\n const val = recurse(obj[key], newPath);\n if (newPath === 'columns[].computed.expression') {\n if (typeof val !== 'string') {\n warnings.push(`Computed expression inválida: ${newPath} (não é string)`);\n continue;\n }\n const trimmed = val.trim();\n if (!trimmed) {\n warnings.push(`Computed expression vazia: ${newPath}`);\n continue;\n }\n if (trimmed.length > 200) {\n warnings.push(`Computed expression muito longa: ${newPath}`);\n continue;\n }\n cleanObj[key] = trimmed;\n continue;\n }\n // Se for objeto vazio após limpeza, não inclui (salvo se for intenção explicita de limpar config, mas patch geralmente é aditivo)\n if (typeof val === 'object' && val !== null && !Array.isArray(val) && Object.keys(val).length === 0) {\n // ignora\n } else {\n cleanObj[key] = val;\n }\n } else {\n warnings.push(`Campo ignorado: ${newPath}`);\n }\n }\n return cleanObj;\n };\n\n const sanitized = recurse(patch, '');\n return { sanitized, warnings };\n }\n\n \n\n // -------- Internal helpers --------\n\n /**\n * Specialized merge for TableConfig that handles Array reconciliation safely.\n * - 'columns': merges by 'field' ID.\n */\n private smartMergeTableConfig(base: TableConfig, patch: Partial<TableConfig>): TableConfig {\n const result = deepMerge(base, patch);\n\n if (patch.columns && Array.isArray(patch.columns)) {\n const originalCols = base.columns || [];\n const patchCols = patch.columns;\n\n const mergedCols = originalCols.map((origCol) => {\n const match = patchCols.find((p) => p.field === origCol.field);\n return match ? deepMerge(origCol, match) : origCol;\n });\n\n patchCols.forEach((pCol) => {\n if (!originalCols.find((o) => o.field === pCol.field)) {\n mergedCols.push(pCol as any);\n }\n });\n\n result.columns = mergedCols;\n }\n\n return result;\n }\n\n private applyConfig(config: TableConfig): void {\n const prev = this.table.config;\n this.table.config = config;\n\n this.table.ngOnChanges({\n config: {\n previousValue: prev,\n currentValue: config,\n firstChange: false,\n isFirstChange: () => false\n }\n });\n }\n\n /**\n * If a patch adds only a currency format, ensure the column type is set to 'currency'\n * so the formatter runs. Avoid overriding an explicit non-currency type.\n */\n private normalizePatch(patch: Partial<TableConfig>): Partial<TableConfig> {\n if (!patch.columns || !Array.isArray(patch.columns)) return patch;\n const cols = patch.columns.map((col) => this.normalizeColumn(col));\n return { ...patch, columns: cols };\n }\n\n private looksLikeCurrencyFormat(format: string | undefined | null): boolean {\n if (!format) return false;\n const fmt = format.trim();\n return /^[A-Z]{3}(\\|.*)?$/.test(fmt);\n }\n\n private looksLikeDateFormat(format: string | undefined | null): boolean {\n if (!format) return false;\n const fmt = format.trim();\n // Heuristics: contains date tokens like d/M/y or common date separators\n return /(d|M|y){2,}/i.test(fmt) || fmt.includes('/') || fmt.includes('-');\n }\n\n private isIconRendererHint(renderer: any): boolean {\n if (!renderer) return false;\n if (renderer.type && renderer.type !== 'icon') return false;\n const icon = renderer.icon || renderer.name || renderer.iconName;\n return typeof icon === 'string' || typeof renderer.color === 'string' || typeof renderer.size === 'number';\n }\n private normalizeColumn(col: any): any {\n if (!col) return col;\n const next = { ...col };\n\n // Normalize formats\n if (next.format && !next.type) {\n if (this.looksLikeCurrencyFormat(next.format)) {\n next.type = 'currency' as any;\n } else if (this.looksLikeDateFormat(next.format)) {\n next.type = 'date' as any;\n }\n }\n\n // Normalize renderer structure (icon shorthand)\n if (next.renderer) {\n next.renderer = this.normalizeRenderer(next.renderer);\n }\n\n // Normalize conditional renderers\n if (Array.isArray(next.conditionalRenderers)) {\n next.conditionalRenderers = next.conditionalRenderers.map((r: any) => {\n if (!r) return r;\n const out = { ...r };\n if (out.renderer) out.renderer = this.normalizeRenderer(out.renderer);\n return out;\n });\n }\n\n return next;\n }\n\n private normalizeRenderer(renderer: any): any {\n if (!renderer) return renderer;\n const out = { ...renderer };\n if (out.type === 'icon') {\n // Move icon shorthand to renderer.icon.*\n const iconObj: any = { ...(out.icon || {}) };\n if (renderer.icon && typeof renderer.icon === 'string') iconObj.name = renderer.icon;\n if (renderer.icon?.name) iconObj.name = renderer.icon.name;\n if (renderer.icon?.color) iconObj.color = renderer.icon.color;\n if (renderer.icon?.size) iconObj.size = renderer.icon.size;\n if (renderer.color && !iconObj.color) iconObj.color = renderer.color;\n if (renderer.size && !iconObj.size) iconObj.size = renderer.size;\n out.icon = iconObj;\n delete out.color;\n delete out.size;\n }\n\n // Badge shorthand (allow badge.color/variant/icon/text via renderer.badge or root)\n if (out.type === 'badge') {\n const badge = { ...(out.badge || {}) };\n if (renderer.color && !badge.color) badge.color = renderer.color;\n if (renderer.variant && !badge.variant) badge.variant = renderer.variant;\n if (renderer.text && !badge.text) badge.text = renderer.text;\n if (renderer.icon && !badge.icon && typeof renderer.icon === 'string') badge.icon = renderer.icon;\n out.badge = badge;\n delete out.color;\n delete out.variant;\n delete out.text;\n if (typeof out.icon === 'string') delete out.icon;\n }\n\n // Chip shorthand\n if (out.type === 'chip') {\n const chip = { ...(out.chip || {}) };\n if (renderer.color && !chip.color) chip.color = renderer.color;\n if (renderer.variant && !chip.variant) chip.variant = renderer.variant;\n if (renderer.text && !chip.text) chip.text = renderer.text;\n if (renderer.icon && !chip.icon && typeof renderer.icon === 'string') chip.icon = renderer.icon;\n out.chip = chip;\n delete out.color;\n delete out.variant;\n delete out.text;\n if (typeof out.icon === 'string') delete out.icon;\n }\n\n // Link shorthand\n if (out.type === 'link' && typeof renderer.href === 'string') {\n out.link = { ...(out.link || {}), href: renderer.href };\n delete out.href;\n }\n\n return out;\n }\n}\n"],"names":[],"mappings":"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"}
|